rendered paste body--- apps/app_externalivr.c (revision 103662)+++ apps/app_externalivr.c (working copy)@@ -228,18 +228,18 @@ static void ast_eivr_getvariable(struct ast_channel *chan, char *data, char *outbuf, int outbuflen) {- // original input data: "G,var1,var2,"- // data passed as "data": "var1,var2"+ /* original input data: "G,var1,var2," */+ /* data passed as "data": "var1,var2" */+ char *inbuf, *variable;- const char *value;- char *saveptr; int j;+ struct ast_str *newstring = ast_str_alloca(outbuflen); - outbuf[0] = 0;+ outbuf[0] = '\0'; - for (j = 1, inbuf = data; ; j++, inbuf = NULL) {- variable = strtok_r(inbuf, ",", &saveptr);+ for (j = 1, inbuf = data; ; j++) {+ variable = strsep(&inbuf, ","); if (variable == NULL) { int outstrlen = strlen(outbuf); if(outstrlen && outbuf[outstrlen - 1] == ',') {@@ -251,10 +251,8 @@ value = pbx_builtin_getvar_helper(chan, variable); if(!value) value = "";- strncat(outbuf,variable,outbuflen);- strncat(outbuf,"=",outbuflen);- strncat(outbuf,value,outbuflen);- strncat(outbuf,",",outbuflen);+ ast_str_append(&newstring, outbuflen, "%s=%s,", variable, value);+ ast_copy_string(outbuf, newstring->str, outbuflen); } }; @@ -265,28 +263,24 @@ char *inbuf, *variable; - char *saveptr; int j; - for(j=1, inbuf=data; ; j++, inbuf=NULL) {- variable = strtok_r(inbuf, ",", &saveptr);+ for (j = 1, inbuf = data; ; j++, inbuf = NULL) {+ variable = strsep(&inbuf, ","); ast_chan_log(LOG_DEBUG, chan, "Setting up a variable: %s\n", variable); if(variable) { //variable contains "varname=value"- strncpy(buf, variable, sizeof(buf));+ ast_copy_string(buf, variable, sizeof(buf)); value = strchr(buf, '='); if(!value) value="";- else {- value[0] = 0;- value++;- }+ else+ *value++ = '\0'; pbx_builtin_setvar_helper(chan, buf, value); }- else break;-+ else+ break; }- }; static struct playlist_entry *make_entry(const char *filename)