Merge "res_pjsip_mwi.c: Fix null pointer crash"
[asterisk/asterisk.git] / utils / extconf.c
index baca11b..1be739c 100644 (file)
@@ -18,7 +18,7 @@
 
 
 /*!
- * \file extconf
+ * \file
  * A condensation of the pbx_config stuff, to read into exensions.conf, and provide an interface to the data there,
  * for operations outside of asterisk. A huge, awful hack.
  *
@@ -120,9 +120,6 @@ void ast_queue_log(const char *queuename, const char *callid, const char *agent,
 /* IN CONFLICT: void ast_verbose(const char *fmt, ...)
    __attribute__((format(printf, 1, 2))); */
 
-int ast_register_verbose(void (*verboser)(const char *string));
-int ast_unregister_verbose(void (*verboser)(const char *string));
-
 void ast_console_puts(const char *string);
 
 #define _A_ __FILE__, __LINE__, __PRETTY_FUNCTION__
@@ -687,41 +684,6 @@ int ast_channel_trylock(struct ast_channel *chan);
 #define ast_free free
 #define ast_free_ptr free
 
-#define MALLOC_FAILURE_MSG \
-       ast_log(LOG_ERROR, "Memory Allocation Failure in function %s at line %d of %s\n", func, lineno, file);
-
-/*!
- * \brief A wrapper for malloc()
- *
- * ast_malloc() is a wrapper for malloc() that will generate an Asterisk log
- * message in the case that the allocation fails.
- *
- * The argument and return value are the same as malloc()
- */
-#define ast_malloc(len) \
-       _ast_malloc((len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
-
-#define ast_calloc(num, len) \
-       _ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
-
-#define ast_calloc_cache(num, len) \
-       _ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
-
-#define ast_realloc(p, len) \
-       _ast_realloc((p), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
-
-#define ast_strdup(str) \
-       _ast_strdup((str), __FILE__, __LINE__, __PRETTY_FUNCTION__)
-
-#define ast_strndup(str, len) \
-       _ast_strndup((str), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
-
-#define ast_asprintf(ret, fmt, ...) \
-       _ast_asprintf((ret), __FILE__, __LINE__, __PRETTY_FUNCTION__, fmt, __VA_ARGS__)
-
-#define ast_vasprintf(ret, fmt, ap) \
-       _ast_vasprintf((ret), __FILE__, __LINE__, __PRETTY_FUNCTION__, (fmt), (ap))
-
 struct ast_flags {  /* stolen from utils.h */
        unsigned int flags;
 };
@@ -746,6 +708,7 @@ struct ast_flags {  /* stolen from utils.h */
 
 #define MALLOC_FAILURE_MSG \
        ast_log(LOG_ERROR, "Memory Allocation Failure in function %s at line %d of %s\n", func, lineno, file);
+
 /*!
  * \brief A wrapper for malloc()
  *
@@ -755,10 +718,10 @@ struct ast_flags {  /* stolen from utils.h */
  * The argument and return value are the same as malloc()
  */
 #define ast_malloc(len) \
-       _ast_malloc((len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
+       __ast_malloc((len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
 AST_INLINE_API(
-void * attribute_malloc _ast_malloc(size_t len, const char *file, int lineno, const char *func),
+void * attribute_malloc __ast_malloc(size_t len, const char *file, int lineno, const char *func),
 {
        void *p;
 
@@ -778,10 +741,10 @@ void * attribute_malloc _ast_malloc(size_t len, const char *file, int lineno, co
  * The arguments and return value are the same as calloc()
  */
 #define ast_calloc(num, len) \
-       _ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
+       __ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
 AST_INLINE_API(
-void * attribute_malloc _ast_calloc(size_t num, size_t len, const char *file, int lineno, const char *func),
+void * attribute_malloc __ast_calloc(size_t num, size_t len, const char *file, int lineno, const char *func),
 {
        void *p;
 
@@ -803,7 +766,7 @@ void * attribute_malloc _ast_calloc(size_t num, size_t len, const char *file, in
  * The arguments and return value are the same as calloc()
  */
 #define ast_calloc_cache(num, len) \
-       _ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
+       __ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
 /*!
  * \brief A wrapper for realloc()
@@ -814,10 +777,10 @@ void * attribute_malloc _ast_calloc(size_t num, size_t len, const char *file, in
  * The arguments and return value are the same as realloc()
  */
 #define ast_realloc(p, len) \
-       _ast_realloc((p), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
+       __ast_realloc((p), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
 AST_INLINE_API(
-void * attribute_malloc _ast_realloc(void *p, size_t len, const char *file, int lineno, const char *func),
+void * attribute_malloc __ast_realloc(void *p, size_t len, const char *file, int lineno, const char *func),
 {
        void *newp;
 
@@ -841,10 +804,10 @@ void * attribute_malloc _ast_realloc(void *p, size_t len, const char *file, int
  * The argument and return value are the same as strdup()
  */
 #define ast_strdup(str) \
-       _ast_strdup((str), __FILE__, __LINE__, __PRETTY_FUNCTION__)
+       __ast_strdup((str), __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
 AST_INLINE_API(
-char * attribute_malloc _ast_strdup(const char *str, const char *file, int lineno, const char *func),
+char * attribute_malloc __ast_strdup(const char *str, const char *file, int lineno, const char *func),
 {
        char *newstr = NULL;
 
@@ -870,10 +833,10 @@ char * attribute_malloc _ast_strdup(const char *str, const char *file, int linen
  * The arguments and return value are the same as strndup()
  */
 #define ast_strndup(str, len) \
-       _ast_strndup((str), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
+       __ast_strndup((str), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
 AST_INLINE_API(
-char * attribute_malloc _ast_strndup(const char *str, size_t len, const char *file, int lineno, const char *func),
+char * attribute_malloc __ast_strndup(const char *str, size_t len, const char *file, int lineno, const char *func),
 {
        char *newstr = NULL;
 
@@ -895,11 +858,11 @@ char * attribute_malloc _ast_strndup(const char *str, size_t len, const char *fi
  * The arguments and return value are the same as asprintf()
  */
 #define ast_asprintf(ret, fmt, ...) \
-       _ast_asprintf((ret), __FILE__, __LINE__, __PRETTY_FUNCTION__, fmt, __VA_ARGS__)
+       __ast_asprintf(__FILE__, __LINE__, __PRETTY_FUNCTION__, (ret), (fmt), __VA_ARGS__)
 
 AST_INLINE_API(
 __attribute__((format(printf, 5, 6)))
-int _ast_asprintf(char **ret, const char *file, int lineno, const char *func, const char *fmt, ...),
+int __ast_asprintf(const char *file, int lineno, const char *func, char **ret, const char *fmt, ...),
 {
        int res;
        va_list ap;
@@ -922,11 +885,11 @@ int _ast_asprintf(char **ret, const char *file, int lineno, const char *func, co
  * The arguments and return value are the same as vasprintf()
  */
 #define ast_vasprintf(ret, fmt, ap) \
-       _ast_vasprintf((ret), __FILE__, __LINE__, __PRETTY_FUNCTION__, (fmt), (ap))
+       __ast_vasprintf((ret), (fmt), (ap), __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
 AST_INLINE_API(
-__attribute__((format(printf, 5, 0)))
-int _ast_vasprintf(char **ret, const char *file, int lineno, const char *func, const char *fmt, va_list ap),
+__attribute__((format(printf, 2, 0)))
+int __ast_vasprintf(char **ret, const char *fmt, va_list ap, const char *file, int lineno, const char *func),
 {
        int res;
 
@@ -4384,6 +4347,19 @@ static struct ast_include *ast_walk_context_includes(struct ast_context *con,
                return inc->next;
 }
 
+int ast_context_includes_count(struct ast_context *con);
+int ast_context_includes_count(struct ast_context *con)
+{
+       int c = 0;
+       struct ast_include *inc = NULL;
+
+       while ((inc = ast_walk_context_includes(con, inc))) {
+               c++;
+       }
+
+       return c;
+}
+
 struct ast_include *localized_walk_context_includes(struct ast_context *con,
                                                                                                        struct ast_include *inc);
 struct ast_include *localized_walk_context_includes(struct ast_context *con,
@@ -4392,6 +4368,31 @@ struct ast_include *localized_walk_context_includes(struct ast_context *con,
        return ast_walk_context_includes(con, inc);
 }
 
+static struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con,
+       struct ast_ignorepat *ip);
+
+static struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con,
+       struct ast_ignorepat *ip)
+{
+       if (!ip)
+               return con ? con->ignorepats : NULL;
+       else
+               return ip->next;
+}
+
+int ast_context_ignorepats_count(struct ast_context *con);
+int ast_context_ignorepats_count(struct ast_context *con)
+{
+       int c = 0;
+       struct ast_ignorepat *ip = NULL;
+
+       while ((ip = ast_walk_context_ignorepats(con, ip))) {
+               c++;
+       }
+
+       return c;
+}
+
 
 static struct ast_sw *ast_walk_context_switches(struct ast_context *con,
                                                                                                         struct ast_sw *sw);
@@ -4413,6 +4414,19 @@ struct ast_sw *localized_walk_context_switches(struct ast_context *con,
        return ast_walk_context_switches(con, sw);
 }
 
+int ast_context_switches_count(struct ast_context *con);
+int ast_context_switches_count(struct ast_context *con)
+{
+       int c = 0;
+       struct ast_sw *sw = NULL;
+
+       while ((sw = ast_walk_context_switches(con, sw))) {
+               c++;
+       }
+
+       return c;
+}
+
 
 static struct ast_context *ast_context_find(const char *name);
 
@@ -4591,6 +4605,10 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan,
        struct ast_exten *e, *eroot;
        struct ast_include *i;
 
+       if (!context) {
+               return NULL;
+       }
+
        /* Initialize status if appropriate */
        if (q->stacklen == 0) {
                q->status = STATUS_NO_CONTEXT;
@@ -5918,4 +5936,3 @@ struct timeval ast_tvnow(void)
        gettimeofday(&t, NULL);
        return t;
 }
-