dect
/
asterisk
Archived
13
0
Fork 0

The amazing disappearing and reappearing patch... This time with documentation explaining it.

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6821 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
markster 2005-10-18 19:16:13 +00:00
parent e9de686a67
commit add0106fc4
2 changed files with 37 additions and 1 deletions

View File

@ -66,6 +66,34 @@ value "blabla".
In fact, everything contained ${here} is just replaced with the value of
the variable "here".
____________________
VARIABLE INHERITANCE
--------------------
Variable names which are prefixed by "_" will be inherited to channels
that are created in the process of servicing the original channel in
which the variable was set. When the inheritance takes place, the
prefix will be removed in the channel inheriting the variable. If the
name is prefixed by "__" in the channel, then the variable is
inherited and the "__" will remain intact in the new channel.
In the dialplan, all references to these variables refer to the same
variable, regardless of having a prefix or not. Note that setting any
version of the variable removes any other version of the variable,
regardless of prefix.
Example:
Set(__FOO=bar) ; Sets an inherited version of "FOO" variable
Set(FOO=bar) ; Removes the inherited version and sets a local
; variable.
However,
NoOp(${__FOO}) is identical to NoOp(${FOO})
_______________________________
REMOVING CHARACTERS FROM STRING
-------------------------------

10
pbx.c
View File

@ -5885,14 +5885,22 @@ void pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const
{
struct ast_var_t *newvariable;
struct varshead *headp;
const char *nametail = name;
if (name[strlen(name)-1] == ')')
return ast_func_write(chan, name, value);
headp = (chan) ? &chan->varshead : &globals;
/* For comparison purposes, we have to strip leading underscores */
if (*nametail == '_') {
nametail++;
if (*nametail == '_')
nametail++;
}
AST_LIST_TRAVERSE (headp, newvariable, entries) {
if (strcasecmp(ast_var_name(newvariable), name) == 0) {
if (strcasecmp(ast_var_name(newvariable), nametail) == 0) {
/* there is already such a variable, delete it */
AST_LIST_REMOVE(headp, newvariable, entries);
ast_var_delete(newvariable);