diff options
author | Tilghman Lesher <tilghman@meg.abyt.es> | 2008-03-26 19:58:09 +0000 |
---|---|---|
committer | Tilghman Lesher <tilghman@meg.abyt.es> | 2008-03-26 19:58:09 +0000 |
commit | e04025ead97d1df6052960872f21040b804b0a9d (patch) | |
tree | a2ec32daecd62670904e958af90410ebd401bb99 | |
parent | 352ca6584bcb1aa2742da08fbadc46f6415e643c (diff) |
Simplify new macro, simplify configfile logic, now that list is sorted
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@111132 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | include/asterisk/linkedlists.h | 13 | ||||
-rw-r--r-- | main/config.c | 32 |
2 files changed, 13 insertions, 32 deletions
diff --git a/include/asterisk/linkedlists.h b/include/asterisk/linkedlists.h index 32d0cbe0b..5e8f70c34 100644 --- a/include/asterisk/linkedlists.h +++ b/include/asterisk/linkedlists.h @@ -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) diff --git a/main/config.c b/main/config.c index ec917d3e3..69c70bf91 100644 --- a/main/config.c +++ b/main/config.c @@ -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); |