diff options
Diffstat (limited to 'pbx.c')
-rwxr-xr-x | pbx.c | 31 |
1 files changed, 16 insertions, 15 deletions
@@ -5667,24 +5667,25 @@ static int pbx_builtin_goto(struct ast_channel *chan, void *data) int pbx_builtin_serialize_variables(struct ast_channel *chan, char *buf, size_t size) { struct ast_var_t *variables; - struct varshead *headp; - char *var=NULL ,*val=NULL; + char *var, *val; int total = 0; - memset(buf,0,size); - if (chan) { - headp=&chan->varshead; - AST_LIST_TRAVERSE(headp,variables,entries) { - if(chan && variables && (var=ast_var_name(variables)) && (val=ast_var_value(variables)) && !ast_strlen_zero(var) && !ast_strlen_zero(val)) { - snprintf(buf + strlen(buf), size - strlen(buf), "%s=%s\n", var, val); - if(strlen(buf) >= size) { - ast_log(LOG_ERROR,"Data Buffer Size Exceeded!\n"); - break; - } - total++; - } else + if (!chan) + return 0; + + memset(buf, 0, size); + + AST_LIST_TRAVERSE(&chan->varshead, variables, entries) { + if(variables && + (var=ast_var_name(variables)) && (val=ast_var_value(variables)) && + !ast_strlen_zero(var) && !ast_strlen_zero(val)) { + if (ast_build_string(&buf, &size, "%s=%s\n", var, val)) { + ast_log(LOG_ERROR, "Data Buffer Size Exceeded!\n"); break; - } + } else + total++; + } else + break; } return total; |