diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-07 16:21:12 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-07 16:21:12 +0000 |
commit | b218a25733127773940a60371c9eb685a47f9236 (patch) | |
tree | 7a7b6db348f112659b0159872ae3b3aa727df3ea /main | |
parent | d78e74ce7e376b55771b8933afd24f7cedfd2bd3 (diff) |
When calling the Realtime app more than once, unset fields which were
previously set are erroneously still set (Bug 6701). After discussion,
it was determined this should only be changed in trunk.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@49801 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r-- | main/config.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/main/config.c b/main/config.c index 4a14d21b5..28e9708a7 100644 --- a/main/config.c +++ b/main/config.c @@ -1314,7 +1314,7 @@ struct ast_config *ast_config_load_with_comments(const char *filename) return result; } -struct ast_variable *ast_load_realtime(const char *family, ...) +struct ast_variable *ast_load_realtime_all(const char *family, ...) { struct ast_config_engine *eng; char db[256]=""; @@ -1331,6 +1331,35 @@ struct ast_variable *ast_load_realtime(const char *family, ...) return res; } +struct ast_variable *ast_load_realtime(const char *family, ...) +{ + struct ast_variable *res, *cur, *prev = NULL, *freeme = NULL; + va_list ap; + + va_start(ap, family); + res = ast_load_realtime_all(family, ap); + va_end(ap); + + /* Eliminate blank entries */ + for (cur = res; cur; cur = cur->next) { + if (freeme) { + free(freeme); + freeme = NULL; + } + + if (ast_strlen_zero(cur->value)) { + if (prev) + prev->next = cur->next; + else + res = cur->next; + freeme = cur; + } else { + prev = cur; + } + } + return res; +} + /*! \brief Check if realtime engine is configured for family */ int ast_check_realtime(const char *family) { |