From 7e1ae3b6b8d253a105367b1e27224c818235ff5a Mon Sep 17 00:00:00 2001 From: kpfleming Date: Tue, 5 Jul 2005 21:17:58 +0000 Subject: clean up find_engine() issue a warning when a config file mapping is found but the desired driver is not available (inspired by bug #4628) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6032 f38db490-d61c-443f-a65b-d21fe96a405b --- config.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'config.c') diff --git a/config.c b/config.c index 7800b71e6..dcb5c44e2 100755 --- a/config.c +++ b/config.c @@ -852,32 +852,30 @@ int ast_config_engine_deregister(struct ast_config_engine *del) static struct ast_config_engine *find_engine(const char *filename, char *database, int dbsiz, char *table, int tabsiz) { - struct ast_config_engine *eng, *ret=NULL; + struct ast_config_engine *eng, *ret = NULL; struct ast_config_map *map; ast_mutex_lock(&config_lock); - map = config_maps; - while (map) { + for (map = config_maps; map; map = map->next) { if (!strcasecmp(filename, map->name)) { - strncpy(database, map->database, dbsiz-1); - if (map->table) - strncpy(table, map->table, tabsiz-1); - else - strncpy(table, filename, tabsiz-1); + ast_copy_string(database, map->database, dbsiz); + ast_copy_string(table, map->table ? map->table : filename, tabsiz); break; } - map = map->next; } if (map) { - for (eng = config_engine_list; eng; eng = eng->next) { - if (!strcmp(eng->name, map->driver)) { + for (eng = config_engine_list; !ret && eng; eng = eng->next) { + if (!strcasecmp(eng->name, map->driver)) ret = eng; - break; - } } } + ast_mutex_unlock(&config_lock); + + /* if we found a mapping, but the engine is not available, then issue a warning */ + if (map && !ret) + ast_log(LOG_WARNING, "Mapping for '%s' found to engine '%s', but the engine is not available\n", map->name, map->driver); return ret; } -- cgit v1.2.3