From a98dd1933bcff09dd6bf7134bfa15f26d89c48b4 Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Tue, 25 Oct 2011 01:23:29 +0000 Subject: [PATCH] Return NULL when no results returned for realtime_multientry It was not documented what the return value should be when no entries were returned with the multientry realtime callback. This change forces consistent behavior even if the backends return an empty ast_config. Review: https://reviewboard.asterisk.org/r/1521/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@342223 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/config.h | 3 +++ main/config.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/include/asterisk/config.h b/include/asterisk/config.h index 56401bf46d..932404d14c 100644 --- a/include/asterisk/config.h +++ b/include/asterisk/config.h @@ -358,6 +358,9 @@ int ast_realtime_require_field(const char *family, ...) attribute_sentinel; * is thus stored inside a traditional ast_config structure rather than * just returning a linked list of variables. * + * \return An ast_config with one or more results + * \retval NULL Error or no results returned + * * \note You should use the constant SENTINEL to terminate arguments, in * order to preserve cross-platform compatibility. */ diff --git a/main/config.c b/main/config.c index 710b90ef08..8f4ed9b3b8 100644 --- a/main/config.c +++ b/main/config.c @@ -2446,6 +2446,11 @@ struct ast_config *ast_load_realtime_multientry(const char *family, ...) for (i = 1; ; i++) { if ((eng = find_engine(family, i, db, sizeof(db), table, sizeof(table)))) { if (eng->realtime_multi_func && (res = eng->realtime_multi_func(db, table, ap))) { + /* If we were returned an empty cfg, destroy it and return NULL */ + if (!res->root) { + ast_config_destroy(res); + res = NULL; + } break; } } else { -- 2.47.2