diff options
-rw-r--r-- | apps/app_dumpchan.c | 6 | ||||
-rw-r--r-- | apps/app_queue.c | 6 | ||||
-rw-r--r-- | include/asterisk/cdr.h | 2 | ||||
-rw-r--r-- | include/asterisk/pbx.h | 2 | ||||
-rw-r--r-- | main/cdr.c | 11 | ||||
-rw-r--r-- | main/cli.c | 10 | ||||
-rw-r--r-- | main/pbx.c | 7 |
7 files changed, 24 insertions, 20 deletions
diff --git a/apps/app_dumpchan.c b/apps/app_dumpchan.c index 8e42e9d39..ca7897e4e 100644 --- a/apps/app_dumpchan.c +++ b/apps/app_dumpchan.c @@ -137,7 +137,7 @@ static int serialize_showchan(struct ast_channel *c, char *buf, size_t size) static int dumpchan_exec(struct ast_channel *chan, void *data) { struct ast_module_user *u; - char vars[BUFSIZ * 4]; + struct ast_str *vars = ast_str_alloca(BUFSIZ * 4); /* XXX very large! */ char info[1024]; int level = 0; static char *line = "================================================================================"; @@ -147,10 +147,10 @@ static int dumpchan_exec(struct ast_channel *chan, void *data) if (!ast_strlen_zero(data)) level = atoi(data); - pbx_builtin_serialize_variables(chan, vars, sizeof(vars)); + pbx_builtin_serialize_variables(chan, &vars); serialize_showchan(chan, info, sizeof(info)); if (option_verbose >= level) - ast_verbose("\nDumping Info For Channel: %s:\n%s\nInfo:\n%s\nVariables:\n%s%s\n", chan->name, line, info, vars, line); + ast_verbose("\nDumping Info For Channel: %s:\n%s\nInfo:\n%s\nVariables:\n%s%s\n", chan->name, line, info, vars->str, line); ast_module_user_remove(u); diff --git a/apps/app_queue.c b/apps/app_queue.c index 9eba7e0b4..280a0f3ca 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1565,13 +1565,15 @@ static void do_hang(struct callattempt *o) static char *vars2manager(struct ast_channel *chan, char *vars, size_t len) { - char *tmp = alloca(len); + struct ast_str *buf = ast_str_alloca(len + 1); + char *tmp; - if (pbx_builtin_serialize_variables(chan, tmp, len)) { + if (pbx_builtin_serialize_variables(chan, &buf)) { int i, j; /* convert "\n" to "\nVariable: " */ strcpy(vars, "Variable: "); + tmp = buf->str; for (i = 0, j = 10; (i < len - 1) && (j < len - 1); i++, j++) { vars[j] = tmp[i]; diff --git a/include/asterisk/cdr.h b/include/asterisk/cdr.h index e6fbe96ff..35f20e6b1 100644 --- a/include/asterisk/cdr.h +++ b/include/asterisk/cdr.h @@ -96,7 +96,7 @@ struct ast_cdr { void ast_cdr_getvar(struct ast_cdr *cdr, const char *name, char **ret, char *workspace, int workspacelen, int recur, int raw); int ast_cdr_setvar(struct ast_cdr *cdr, const char *name, const char *value, int recur); -int ast_cdr_serialize_variables(struct ast_cdr *cdr, char *buf, size_t size, char delim, char sep, int recur); +int ast_cdr_serialize_variables(struct ast_cdr *cdr, struct ast_str **buf, char delim, char sep, int recur); void ast_cdr_free_vars(struct ast_cdr *cdr, int recur); int ast_cdr_copy_vars(struct ast_cdr *to_cdr, struct ast_cdr *from_cdr); diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index c1a831838..0c94ea323 100644 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -793,7 +793,7 @@ struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con, struct ast_ignorepat *ip); struct ast_sw *ast_walk_context_switches(struct ast_context *con, struct ast_sw *sw); -int pbx_builtin_serialize_variables(struct ast_channel *chan, char *buf, size_t size); +int pbx_builtin_serialize_variables(struct ast_channel *chan, struct ast_str **buf); const char *pbx_builtin_getvar_helper(struct ast_channel *chan, const char *name); void pbx_builtin_pushvar_helper(struct ast_channel *chan, const char *name, const char *value); void pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value); diff --git a/main/cdr.c b/main/cdr.c index 309d73c0d..3f6215c88 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -344,7 +344,7 @@ int ast_cdr_copy_vars(struct ast_cdr *to_cdr, struct ast_cdr *from_cdr) return x; } -int ast_cdr_serialize_variables(struct ast_cdr *cdr, char *buf, size_t size, char delim, char sep, int recur) +int ast_cdr_serialize_variables(struct ast_cdr *cdr, struct ast_str **buf, char delim, char sep, int recur) { struct ast_var_t *variables; const char *var, *val; @@ -352,17 +352,18 @@ int ast_cdr_serialize_variables(struct ast_cdr *cdr, char *buf, size_t size, cha char workspace[256]; int total = 0, x = 0, i; - memset(buf, 0, size); + (*buf)->used = 0; + (*buf)->str[0] = '\0'; for (; cdr; cdr = recur ? cdr->next : NULL) { if (++x > 1) - ast_build_string(&buf, &size, "\n"); + ast_str_append(buf, 0, "\n"); AST_LIST_TRAVERSE(&cdr->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, "level %d: %s%c%s%c", x, var, delim, val, sep)) { + if (ast_str_append(buf, 0, "level %d: %s%c%s%c", x, var, delim, val, sep) < 0) { ast_log(LOG_ERROR, "Data Buffer Size Exceeded!\n"); break; } else @@ -376,7 +377,7 @@ int ast_cdr_serialize_variables(struct ast_cdr *cdr, char *buf, size_t size, cha if (!tmp) continue; - if (ast_build_string(&buf, &size, "level %d: %s%c%s%c", x, cdr_readonly_vars[i], delim, tmp, sep)) { + if (ast_str_append(buf, 0, "level %d: %s%c%s%c", x, cdr_readonly_vars[i], delim, tmp, sep) < 0) { ast_log(LOG_ERROR, "Data Buffer Size Exceeded!\n"); break; } else diff --git a/main/cli.c b/main/cli.c index e2a3a6db8..d099ae409 100644 --- a/main/cli.c +++ b/main/cli.c @@ -766,7 +766,7 @@ static int handle_showchan(int fd, int argc, char *argv[]) { struct ast_channel *c=NULL; struct timeval now; - char buf[2048]; + struct ast_str *out = ast_str_alloca(2048); char cdrtime[256]; char nf[256], wf[256], rf[256]; long elapsed_seconds=0; @@ -837,10 +837,10 @@ static int handle_showchan(int fd, int argc, char *argv[]) ( c-> data ? S_OR(c->data, "(Empty)") : "(None)"), (ast_test_flag(c, AST_FLAG_BLOCKING) ? c->blockproc : "(Not Blocking)")); - if(pbx_builtin_serialize_variables(c,buf,sizeof(buf))) - ast_cli(fd," Variables:\n%s\n",buf); - if(c->cdr && ast_cdr_serialize_variables(c->cdr,buf, sizeof(buf), '=', '\n', 1)) - ast_cli(fd," CDR Variables:\n%s\n",buf); + if(pbx_builtin_serialize_variables(c, &out)) + ast_cli(fd," Variables:\n%s\n", out->str); + if(c->cdr && ast_cdr_serialize_variables(c->cdr, &out, '=', '\n', 1)) + ast_cli(fd," CDR Variables:\n%s\n", out->str); ast_channel_unlock(c); return RESULT_SUCCESS; diff --git a/main/pbx.c b/main/pbx.c index 8a7d7200e..1e331c755 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -5644,7 +5644,7 @@ 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) +int pbx_builtin_serialize_variables(struct ast_channel *chan, struct ast_str **buf) { struct ast_var_t *variables; const char *var, *val; @@ -5653,13 +5653,14 @@ int pbx_builtin_serialize_variables(struct ast_channel *chan, char *buf, size_t if (!chan) return 0; - memset(buf, 0, size); + (*buf)->used = 0; + (*buf)->str[0] = '\0'; AST_LIST_TRAVERSE(&chan->varshead, variables, entries) { if ((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)) { + if (ast_str_append(buf, 0, "%s=%s\n", var, val) < 0) { ast_log(LOG_ERROR, "Data Buffer Size Exceeded!\n"); break; } else |