Index: pbx.c =================================================================== RCS file: /usr/cvsroot/asterisk/pbx.c,v retrieving revision 1.298 diff -u -r1.298 pbx.c --- pbx.c 8 Nov 2005 04:13:18 -0000 1.298 +++ pbx.c 8 Nov 2005 23:02:33 -0000 @@ -5897,6 +5897,26 @@ return NULL; } +void pbx_builtin_pushvar_helper(struct ast_channel *chan, const char *name, const char *value) +{ + struct ast_var_t *newvariable; + struct varshead *headp; + + if (name[strlen(name)-1] == ')') { + ast_log(LOG_WARNING, "Cannot push a value onto a function\n"); + return ast_func_write(chan, name, value); + } + + headp = (chan) ? &chan->varshead : &globals; + + if (value) { + if ((option_verbose > 1) && (headp == &globals)) + ast_verbose(VERBOSE_PREFIX_2 "Setting global variable '%s' to '%s'\n", name, value); + newvariable = ast_var_assign(name, value); + AST_LIST_INSERT_HEAD(headp, newvariable, entries); + } +} + void pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value) { struct ast_var_t *newvariable; Index: include/asterisk/pbx.h =================================================================== RCS file: /usr/cvsroot/asterisk/include/asterisk/pbx.h,v retrieving revision 1.55 diff -u -r1.55 pbx.h --- include/asterisk/pbx.h 26 Oct 2005 23:11:36 -0000 1.55 +++ include/asterisk/pbx.h 8 Nov 2005 23:02:33 -0000 @@ -606,6 +606,7 @@ int pbx_builtin_serialize_variables(struct ast_channel *chan, char *buf, size_t size); extern char *pbx_builtin_getvar_helper(struct ast_channel *chan, const char *name); +extern void pbx_builtin_pushvar_helper(struct ast_channel *chan, const char *name, const char *value); extern void pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value); extern void pbx_retrieve_variable(struct ast_channel *c, const char *var, char **ret, char *workspace, int workspacelen, struct varshead *headp); extern void pbx_builtin_clear_globals(void);