summaryrefslogtreecommitdiff
path: root/main/config.c
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2008-03-26 19:58:09 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2008-03-26 19:58:09 +0000
commite04025ead97d1df6052960872f21040b804b0a9d (patch)
treea2ec32daecd62670904e958af90410ebd401bb99 /main/config.c
parent352ca6584bcb1aa2742da08fbadc46f6415e643c (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
Diffstat (limited to 'main/config.c')
-rw-r--r--main/config.c32
1 files changed, 8 insertions, 24 deletions
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);