[asterisk-commits] murf: branch murf/bug_7638 r59184 - in
/team/murf/bug_7638: main/ utils/
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Mar 22 18:15:01 MST 2007
Author: murf
Date: Thu Mar 22 20:15:00 2007
New Revision: 59184
URL: http://svn.digium.com/view/asterisk?view=rev&rev=59184
Log:
7605 is complete. It lives in aelparse; I can't provide it in asterisk or the AEL mod, because at load time, the extensions.conf may not have been loaded yet.
Modified:
team/murf/bug_7638/main/pval.c
team/murf/bug_7638/utils/Makefile
team/murf/bug_7638/utils/check_expr.c
team/murf/bug_7638/utils/extconf.c
Modified: team/murf/bug_7638/main/pval.c
URL: http://svn.digium.com/view/asterisk/team/murf/bug_7638/main/pval.c?view=diff&rev=59184&r1=59183&r2=59184
==============================================================================
--- team/murf/bug_7638/main/pval.c (original)
+++ team/murf/bug_7638/main/pval.c Thu Mar 22 20:15:00 2007
@@ -1334,8 +1334,8 @@
}
} else {
/* here is where code would go to check for target existence in extensions.conf files */
- struct pbx_find_info pfiq;
#ifdef STANDALONE
+ struct pbx_find_info pfiq = {.stacklen = 0 };
extern int localized_pbx_load_module(void);
/* if this is a standalone, we will need to make sure the
localized load of extensions.conf is done */
@@ -1343,7 +1343,6 @@
localized_pbx_load_module();
extensions_dot_conf_loaded++;
}
-#endif
pbx_find_extension(NULL, NULL, &pfiq, first->u1.str, second->u1.str, atoi(third->u1.str),
atoi(third->u1.str) ? NULL : third->u1.str, NULL,
@@ -1354,6 +1353,11 @@
item->filename, item->startline, item->endline, first->u1.str, second->u1.str, third->u1.str);
warns++;
}
+#else
+ ast_log(LOG_WARNING,"Warning: file %s, line %d-%d: goto: Couldn't find goto target %s|%s|%s in the AEL code!\n",
+ item->filename, item->startline, item->endline, first->u1.str, second->u1.str, third->u1.str);
+ warns++;
+#endif
}
} else {
struct pval *mac = in_macro(item); /* is this goto inside a macro? */
@@ -2379,7 +2383,9 @@
#endif
macro_def = find_macro(item->u1.str);
if (!macro_def) {
- struct pbx_find_info pfiq;
+#ifdef STANDALONE
+ struct pbx_find_info pfiq = {.stacklen = 0 };
+ struct pbx_find_info pfiq2 = {.stacklen = 0 };
/* look for the macro in the extensions.conf world */
pbx_find_extension(NULL, NULL, &pfiq, item->u1.str, "s", 1, NULL, NULL, E_MATCH);
@@ -2389,9 +2395,9 @@
snprintf(namebuf2, 256, "macro-%s", item->u1.str);
/* look for the macro in the extensions.conf world */
- pbx_find_extension(NULL, NULL, &pfiq, namebuf2, "s", 1, NULL, NULL, E_MATCH);
+ pbx_find_extension(NULL, NULL, &pfiq2, namebuf2, "s", 1, NULL, NULL, E_MATCH);
- if (pfiq.status == STATUS_SUCCESS) {
+ if (pfiq2.status == STATUS_SUCCESS) {
ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: macro call to non-existent %s! (macro-%s was found in the extensions.conf stuff, but we are using gosubs!)\n",
item->filename, item->startline, item->endline, item->u1.str, item->u1.str);
warns++;
@@ -2401,7 +2407,12 @@
warns++;
}
}
-
+#else
+ ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: macro call to %s cannot be found in the AEL code!\n",
+ item->filename, item->startline, item->endline, item->u1.str);
+ warns++;
+
+#endif
#ifdef THIS_IS_1DOT4
char namebuf2[256];
snprintf(namebuf2, 256, "macro-%s", item->u1.str);
@@ -2410,7 +2421,7 @@
pbx_find_extension(NULL, NULL, &pfiq, namebuf2, "s", 1, NULL, NULL, E_MATCH);
if (pfiq.status != STATUS_SUCCESS) {
- ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: macro call to non-existent %s!\n",
+ ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: macro call to %s was not found in the AEL, nor the extensions.conf !\n",
item->filename, item->startline, item->endline, item->u1.str);
warns++;
}
Modified: team/murf/bug_7638/utils/Makefile
URL: http://svn.digium.com/view/asterisk/team/murf/bug_7638/utils/Makefile?view=diff&rev=59184&r1=59183&r2=59184
==============================================================================
--- team/murf/bug_7638/utils/Makefile (original)
+++ team/murf/bug_7638/utils/Makefile Thu Mar 22 20:15:00 2007
@@ -58,7 +58,7 @@
clean:
rm -f *.o $(ALL_UTILS) check_expr
rm -f .*.o.d .*.oo.d
- rm -f md5.c strcompat.c ast_expr2.c ast_expr2f.c pbx_ael.c
+ rm -f md5.c strcompat.c ast_expr2.c ast_expr2f.c pbx_ael.c pval.c
rm -f aelparse.c aelbison.c conf2ael
md5.c: ../main/md5.c
Modified: team/murf/bug_7638/utils/check_expr.c
URL: http://svn.digium.com/view/asterisk/team/murf/bug_7638/utils/check_expr.c?view=diff&rev=59184&r1=59183&r2=59184
==============================================================================
--- team/murf/bug_7638/utils/check_expr.c (original)
+++ team/murf/bug_7638/utils/check_expr.c Thu Mar 22 20:15:00 2007
@@ -22,6 +22,59 @@
#include <string.h>
#include <stdlib.h>
#include <../include/asterisk/ast_expr.h>
+#define AST_API_MODULE 1
+#include "asterisk/inline_api.h"
+#include "asterisk/strings.h"
+
+/* I included this from utils.c, so as not to have everything in that .c
+ file included */
+/*!
+ * core handler for dynamic strings.
+ * This is not meant to be called directly, but rather through the
+ * various wrapper macros
+ * ast_str_set(...)
+ * ast_str_append(...)
+ * ast_str_set_va(...)
+ * ast_str_append_va(...)
+ */
+int __ast_str_helper(struct ast_str **buf, size_t max_len,
+ int append, const char *fmt, va_list ap)
+{
+ int res, need;
+ int offset = (append && (*buf)->len) ? (*buf)->used : 0;
+
+ if (max_len < 0)
+ max_len = (*buf)->len; /* don't exceed the allocated space */
+ /*
+ * Ask vsnprintf how much space we need. Remember that vsnprintf
+ * does not count the final '\0' so we must add 1.
+ */
+ res = vsnprintf((*buf)->str + offset, (*buf)->len - offset, fmt, ap);
+
+ need = res + offset + 1;
+ /*
+ * If there is not enough space and we are below the max length,
+ * reallocate the buffer and return a message telling to retry.
+ */
+ if (need > (*buf)->len && (max_len == 0 || (*buf)->len < max_len) ) {
+ if (max_len && max_len < need) /* truncate as needed */
+ need = max_len;
+ else if (max_len == 0) /* if unbounded, give more room for next time */
+ need += 16 + need/4;
+ if (ast_str_make_space(buf, need)) {
+ return AST_DYNSTR_BUILD_FAILED;
+ }
+ (*buf)->str[offset] = '\0'; /* Truncate the partial write. */
+
+ /* va_end() and va_start() must be done before calling
+ * vsnprintf() again. */
+ return AST_DYNSTR_BUILD_RETRY;
+ }
+ /* update space used, keep in mind the truncation */
+ (*buf)->used = (res + offset > (*buf)->len) ? (*buf)->len : res + offset;
+
+ return res;
+}
static int global_lineno = 1;
static int global_expr_count=0;
Modified: team/murf/bug_7638/utils/extconf.c
URL: http://svn.digium.com/view/asterisk/team/murf/bug_7638/utils/extconf.c?view=diff&rev=59184&r1=59183&r2=59184
==============================================================================
--- team/murf/bug_7638/utils/extconf.c (original)
+++ team/murf/bug_7638/utils/extconf.c Thu Mar 22 20:15:00 2007
@@ -49,7 +49,7 @@
#include <pthread.h>
#include <netdb.h>
#include <sys/param.h>
-#define AST_INCLUDE_GLOB 1
+#define ASINCLUDE_GLOB 1
#ifdef AST_INCLUDE_GLOB
#if defined(__Darwin__) || defined(__CYGWIN__)
#define GLOB_ABORTED GLOB_ABEND
@@ -58,6 +58,7 @@
#endif
static char ast_config_AST_CONFIG_DIR[PATH_MAX] = {"/etc/asterisk"};
+#define AST_API_MODULE 1 /* gimme the inline defs! */
#include "asterisk/inline_api.h"
#include "asterisk/compat.h"
@@ -4584,14 +4585,12 @@
struct ast_include *i;
/* Initialize status if appropriate */
- q->stacklen = 0;
- q->status = STATUS_NO_CONTEXT;
- q->swo = NULL;
- q->data = NULL;
- q->foundcontext = NULL;
-
- /* Check for stack overflow */
- if (q->stacklen >= AST_PBX_MAX_STACK) {
+ if (q->stacklen == 0) {
+ q->status = STATUS_NO_CONTEXT;
+ q->swo = NULL;
+ q->data = NULL;
+ q->foundcontext = NULL;
+ } else if (q->stacklen >= AST_PBX_MAX_STACK) {
ast_log(LOG_WARNING, "Maximum PBX stack exceeded\n");
return NULL;
}
More information about the asterisk-commits
mailing list