Simplify new macro, simplify configfile logic, now that list is sorted
authorTilghman Lesher <tilghman@meg.abyt.es>
Wed, 26 Mar 2008 19:58:09 +0000 (19:58 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Wed, 26 Mar 2008 19:58:09 +0000 (19:58 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@111132 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/linkedlists.h
main/config.c

index 32d0cbe..5e8f70c 100644 (file)
@@ -712,15 +712,12 @@ struct {                                                          \
                        prev = cur;                                             \
                        cur = cur->field.next;                                  \
                }                                                           \
-               if (!prev) {       /* Same as INSERT_HEAD */                \
-                       (elm)->field.next = (head)->first;                      \
-                       (head)->first = (elm);                                  \
-               } else if (!cur) { /* Same as INSERT_TAIL */                \
-                       (head)->last->field.next = (elm);                       \
-                       (head)->last = (elm);                                   \
+               if (!prev) {                                                \
+                       AST_LIST_INSERT_HEAD(head, elm, field);                 \
+               } else if (!cur) {                                          \
+                       AST_LIST_INSERT_TAIL(head, elm, field);                 \
                } else {                                                    \
-                       (elm)->field.next = cur;                                \
-                       (prev)->field.next = (elm);                             \
+                       AST_LIST_INSERT_AFTER(head, prev, elm, field);          \
                }                                                           \
        }                                                               \
 } while (0)
index ec917d3..69c70bf 100644 (file)
@@ -2348,12 +2348,7 @@ static char *handle_cli_core_show_config_mappings(struct ast_cli_entry *e, int c
 static char *handle_cli_config_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
        struct cache_file_mtime *cfmtime;
-       struct seenlist {
-               AST_LIST_ENTRY(seenlist) list;
-               char filename[0];
-       } *seenlist;
-       AST_LIST_HEAD_NOLOCK(, seenlist) seenhead = AST_LIST_HEAD_NOLOCK_INIT_VALUE;
-       char *completion_value = NULL;
+       char *prev = "", *completion_value = NULL;
        int wordlen, which = 0;
 
        switch (cmd) {
@@ -2372,15 +2367,13 @@ static char *handle_cli_config_reload(struct ast_cli_entry *e, int cmd, struct a
 
                AST_LIST_LOCK(&cfmtime_head);
                AST_LIST_TRAVERSE(&cfmtime_head, cfmtime, list) {
-                       int seen = 0;
-                       AST_LIST_TRAVERSE(&seenhead, seenlist, list) {
-                               if (strcmp(seenlist->filename, cfmtime->filename) == 0) {
-                                       seen = 1;
-                                       break;
-                               }
+                       /* Skip duplicates - this only works because the list is sorted by filename */
+                       if (strcmp(cfmtime->filename, prev) == 0) {
+                               continue;
                        }
 
-                       if (seen) {
+                       /* Core configs cannot be reloaded */
+                       if (ast_strlen_zero(cfmtime->who_asked)) {
                                continue;
                        }
 
@@ -2390,19 +2383,10 @@ static char *handle_cli_config_reload(struct ast_cli_entry *e, int cmd, struct a
                        }
 
                        /* Otherwise save that we've seen this filename */
-                       if (!(seenlist = ast_malloc(sizeof(*seenlist) + strlen(cfmtime->filename) + 1))) {
-                               break;
-                       }
-                       strcpy(seenlist->filename, cfmtime->filename);
-                       AST_LIST_INSERT_HEAD(&seenhead, seenlist, list);
+                       prev = cfmtime->filename;
                }
                AST_LIST_UNLOCK(&cfmtime_head);
 
-               /* Remove seenlist */
-               while ((seenlist = AST_LIST_REMOVE_HEAD(&seenhead, list))) {
-                       ast_free(seenlist);
-               }
-
                return completion_value;
        }
 
@@ -2440,7 +2424,7 @@ static char *handle_cli_config_list(struct ast_cli_entry *e, int cmd, struct ast
 
        AST_LIST_LOCK(&cfmtime_head);
        AST_LIST_TRAVERSE(&cfmtime_head, cfmtime, list) {
-               ast_cli(a->fd, "%-20.20s %-50s\n", cfmtime->who_asked, cfmtime->filename);
+               ast_cli(a->fd, "%-20.20s %-50s\n", S_OR(cfmtime->who_asked, "core"), cfmtime->filename);
        }
        AST_LIST_UNLOCK(&cfmtime_head);