git migration: Refactor the ASTERISK_FILE_VERSION macro
[asterisk/asterisk.git] / main / config.c
index f454544..bc622cc 100644 (file)
@@ -32,7 +32,7 @@
 
 #include "asterisk.h"
 
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+ASTERISK_REGISTER_FILE()
 
 #include "asterisk/paths.h"    /* use ast_config_AST_CONFIG_DIR */
 #include "asterisk/network.h"  /* we do some sockaddr manipulation here */
@@ -71,7 +71,7 @@ static char *extconfig_conf = "extconfig.conf";
 
 static struct ao2_container *cfg_hooks;
 static void config_hook_exec(const char *filename, const char *module, const struct ast_config *cfg);
-inline struct ast_variable *variable_list_switch(struct ast_variable *l1, struct ast_variable *l2);
+static inline struct ast_variable *variable_list_switch(struct ast_variable *l1, struct ast_variable *l2);
 static int does_category_match(struct ast_category *cat, const char *category_name, const char *match);
 
 /*! \brief Structure to keep comments for rewriting configuration files */
@@ -614,7 +614,7 @@ struct ast_variable *ast_variable_browse(const struct ast_config *config, const
        return (cat) ? cat->root : NULL;
 }
 
-inline struct ast_variable *variable_list_switch(struct ast_variable *l1, struct ast_variable *l2)
+static inline struct ast_variable *variable_list_switch(struct ast_variable *l1, struct ast_variable *l2)
 {
     l1->next = l2->next;
     l2->next = l1;
@@ -1238,23 +1238,27 @@ void ast_category_rename(struct ast_category *cat, const char *name)
        ast_copy_string(cat->name, name, sizeof(cat->name));
 }
 
-void ast_category_inherit(struct ast_category *new, const struct ast_category *base)
+int ast_category_inherit(struct ast_category *new, const struct ast_category *base)
 {
        struct ast_variable *var;
        struct ast_category_template_instance *x;
 
        x = ast_calloc(1, sizeof(*x));
        if (!x) {
-               return;
+               return -1;
        }
        strcpy(x->name, base->name);
        x->inst = base;
        AST_LIST_INSERT_TAIL(&new->template_instances, x, next);
        for (var = base->root; var; var = var->next) {
                struct ast_variable *cloned = variable_clone(var);
+               if (!cloned) {
+                       return -1;
+               }
                cloned->inherited = 1;
                ast_variable_append(new, cloned);
        }
+       return 0;
 }
 
 struct ast_config *ast_config_new(void)
@@ -1691,7 +1695,10 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
                                                ast_log(LOG_WARNING, "Inheritance requested, but category '%s' does not exist, line %d of %s\n", cur, lineno, configfile);
                                                return -1;
                                        }
-                                       ast_category_inherit(*cat, base);
+                                       if (ast_category_inherit(*cat, base)) {
+                                               ast_log(LOG_ERROR, "Inheritence requested, but allocation failed\n");
+                                               return -1;
+                                       }
                                }
                        }
                }
@@ -3351,7 +3358,7 @@ int ast_update2_realtime(const char *family, ...)
        va_end(ap);
 
        va_start(ap, family);
-       realtime_arguments_to_fields2(ap, 1, &lookup_fields);
+       realtime_arguments_to_fields2(ap, 1, &update_fields);
        va_end(ap);
 
        if (!lookup_fields || !update_fields) {
@@ -3821,12 +3828,15 @@ static void config_shutdown(void)
        AST_LIST_UNLOCK(&cfmtime_head);
 
        ast_cli_unregister_multiple(cli_config, ARRAY_LEN(cli_config));
+
+       ao2_cleanup(cfg_hooks);
+       cfg_hooks = NULL;
 }
 
 int register_config_cli(void)
 {
        ast_cli_register_multiple(cli_config, ARRAY_LEN(cli_config));
-       ast_register_atexit(config_shutdown);
+       ast_register_cleanup(config_shutdown);
        return 0;
 }
 
@@ -3909,5 +3919,6 @@ int ast_config_hook_register(const char *name,
        hook->module = ast_strdup(module);
 
        ao2_link(cfg_hooks, hook);
+       ao2_ref(hook, -1);
        return 0;
 }