mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +00:00
This mod fixes a problem pointed out by dgarstang. Many thanks to Doug\!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@44488 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -803,6 +803,24 @@ static void check_expr2_input(pval *expr, char *str)
|
||||
}
|
||||
}
|
||||
|
||||
static void check_includes(pval *includes)
|
||||
{
|
||||
struct pval *p4;
|
||||
for (p4=includes->u1.list; p4; p4=p4->next) {
|
||||
/* for each context pointed to, find it, then find a context/label that matches the
|
||||
target here! */
|
||||
char *incl_context = p4->u1.str;
|
||||
/* find a matching context name */
|
||||
struct pval *that_other_context = find_context(incl_context);
|
||||
if (!that_other_context) {
|
||||
ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: The included context '%s' cannot be found.\n",
|
||||
includes->filename, includes->startline, includes->endline, incl_context);
|
||||
warns++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void check_timerange(pval *p)
|
||||
{
|
||||
char times[200];
|
||||
@@ -1156,7 +1174,10 @@ static void check_goto(pval *item)
|
||||
/* just one item-- the label should be in the current extension */
|
||||
|
||||
if (item->u1.list && !item->u1.list->next && !strstr((item->u1.list)->u1.str,"${")) {
|
||||
struct pval *x = find_label_in_current_extension((char*)((item->u1.list)->u1.str), current_extension? current_extension:current_context); /* if in macro, use current context instead */
|
||||
struct pval *z = get_extension_or_contxt(item);
|
||||
struct pval *x = 0;
|
||||
if (z)
|
||||
x = find_label_in_current_extension((char*)((item->u1.list)->u1.str), z); /* if in macro, use current context instead */
|
||||
/* printf("Called find_label_in_current_extension with arg %s; current_extension is %x: %d\n",
|
||||
(char*)((item->u1.list)->u1.str), current_extension?current_extension:current_context, current_extension?current_extension->type:current_context->type); */
|
||||
if (!x) {
|
||||
@@ -1175,7 +1196,12 @@ static void check_goto(pval *item)
|
||||
(char*)((item->u1.list)->u1.str), (char *)item->u1.list->next->u1.str); */
|
||||
if (!strstr((item->u1.list)->u1.str,"${")
|
||||
&& !strstr(item->u1.list->next->u1.str,"${") ) /* Don't try to match variables */ {
|
||||
struct pval *x = find_label_in_current_context((char *)item->u1.list->u1.str, (char *)item->u1.list->next->u1.str, current_context);
|
||||
struct pval *z = get_contxt(item);
|
||||
struct pval *x = 0;
|
||||
|
||||
if (z)
|
||||
x = find_label_in_current_context((char *)item->u1.list->u1.str, (char *)item->u1.list->next->u1.str, z);
|
||||
|
||||
if (!x) {
|
||||
ast_log(LOG_ERROR,"Error: file %s, line %d-%d: goto: no label %s|%s exists in the current context, or any of its inclusions!\n",
|
||||
item->filename, item->startline, item->endline, item->u1.list->u1.str, item->u1.list->next->u1.str );
|
||||
@@ -2354,6 +2380,7 @@ void check_pval_item(pval *item, struct argapp *apps, int in_globals)
|
||||
/* fields: item->u1.list == pval list of PV_WORD elements, one per entry in the list
|
||||
*/
|
||||
check_pval(item->u1.list, apps,in_globals);
|
||||
check_includes(item);
|
||||
for (lp=item->u1.list; lp; lp=lp->next){
|
||||
char *incl_context = lp->u1.str;
|
||||
struct pval *that_context = find_context(incl_context);
|
||||
|
Reference in New Issue
Block a user