aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoranthm <anthm@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-23 16:39:33 +0000
committeranthm <anthm@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-23 16:39:33 +0000
commit45ca34593892bb1752efb92ba50e1e4bf6ae7430 (patch)
treec28da3c3f2354b2bbf1478f3760ea23cd264d6f3
parent0caf04921039d80f314e3b2a6b8bb006c62a7d1c (diff)
tweak prior commit
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3826 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xapp.c15
-rwxr-xr-xapps/app_record.c30
2 files changed, 34 insertions, 11 deletions
diff --git a/app.c b/app.c
index d602de058..b273f4c3c 100755
--- a/app.c
+++ b/app.c
@@ -437,13 +437,16 @@ int ast_control_streamfile(struct ast_channel *chan, char *file, char *fwd, char
if (chan)
ast_stopstream(chan);
- if (file) {
- end = strchr(file,':');
- if (!strcasecmp(end,":end")) {
- *end = '\0';
- end++;
+
+ if(file) {
+ if((end = strchr(file,':'))) {
+ if(!strcasecmp(end,":end")) {
+ *end = '\0';
+ end++;
+ }
}
- }
+ }
+
for (;;) {
gettimeofday(&started,NULL);
diff --git a/apps/app_record.c b/apps/app_record.c
index cd46d3e43..c1f06780a 100755
--- a/apps/app_record.c
+++ b/apps/app_record.c
@@ -56,7 +56,7 @@ static int record_exec(struct ast_channel *chan, void *data)
char fil[256];
char tmp[256];
char ext[10];
- char * vdata; /* Used so I don't have to typecast every use of *data */
+ char *vdata;
int i = 0;
int j = 0;
@@ -78,15 +78,32 @@ static int record_exec(struct ast_channel *chan, void *data)
int option_skip = 0;
int option_noanswer = 0;
int rfmt = 0;
+ int flags;
+ char *end=NULL;
+ char *p=NULL;
+
- vdata = data; /* explained above */
/* The next few lines of code parse out the filename and header from the input string */
- if (!vdata) { /* no data implies no filename or anything is present */
+ if (!data) { /* no data implies no filename or anything is present */
ast_log(LOG_WARNING, "Record requires an argument (filename)\n");
return -1;
}
+ vdata = ast_strdupa(data);
+ p = vdata;
+ while(p && (p=strchr(p,':'))) {
+ end=p;
+ if(!strcasecmp(end,":end")) {
+ *end='\0';
+ end++;
+ break;
+ }
+ p++;
+ end=NULL;
+ }
+
+
for (; vdata[i] && (vdata[i] != ':') && (vdata[i] != '|'); i++ ) {
if ((vdata[i] == '%') && (vdata[i+1] == 'd')) {
percentflag = 1; /* the wildcard is used */
@@ -205,8 +222,11 @@ static int record_exec(struct ast_channel *chan, void *data)
ast_dsp_set_threshold(sildet, 256);
}
- s = ast_writefile( tmp, ext, NULL, O_CREAT|O_TRUNC|O_WRONLY , 0, 0644);
-
+
+ flags = end ? O_CREAT|O_APPEND|O_WRONLY : O_CREAT|O_TRUNC|O_WRONLY;
+ s = ast_writefile( tmp, ext, NULL, flags , 0, 0644);
+
+
if (s) {
if (maxduration > 0)
timeout = time(NULL) + (time_t)maxduration;