From a74f3f93f433594e6ac5a3fef0ea859ebfc43a14 Mon Sep 17 00:00:00 2001 From: kpfleming Date: Mon, 6 Jun 2005 18:31:29 +0000 Subject: add support for per-module version numbers git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5862 f38db490-d61c-443f-a65b-d21fe96a405b --- loader.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'loader.c') diff --git a/loader.c b/loader.c index 4403652e4..6c3f9ef21 100755 --- a/loader.c +++ b/loader.c @@ -51,6 +51,7 @@ struct module { char *(*description)(void); char *(*key)(void); int (*reload)(void); + const char *(*version)(void); void *lib; char resource[256]; struct module *next; @@ -252,6 +253,11 @@ int ast_module_reload(const char *name) return reloaded; } +static const char *unknown_version(void) +{ + return "--unknown--"; +} + static int __load_resource(const char *resource_name, const struct ast_config *cfg) { static char fn[256]; @@ -347,9 +353,17 @@ static int __load_resource(const char *resource_name, const struct ast_config *c ast_log(LOG_WARNING, "No key routine in module %s\n", fn); errors++; } + m->reload = dlsym(m->lib, "reload"); if (m->reload == NULL) m->reload = dlsym(m->lib, "_reload"); + + m->version = dlsym(m->lib, "version"); + if (m->version == NULL) + m->version = dlsym(m->lib, "_version"); + if (m->version == NULL) + m->version = unknown_version; + if (!m->key || !(key = m->key())) { ast_log(LOG_WARNING, "Key routine returned NULL in module %s\n", fn); key = NULL; @@ -549,20 +563,23 @@ void ast_update_use_count(void) } -int ast_update_module_list(int (*modentry)(char *module, char *description, int usecnt, char *like), char *like) +int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *version, const char *like), + const char *like) { struct module *m; int unlock = -1; int total_mod_loaded = 0; + if (ast_mutex_trylock(&modlock)) unlock = 0; m = module_list; - while(m) { - total_mod_loaded += modentry(m->resource, m->description(), m->usecount(), like); + while (m) { + total_mod_loaded += modentry(m->resource, m->description(), m->usecount(), m->version(), like); m = m->next; } if (unlock) ast_mutex_unlock(&modlock); + return total_mod_loaded; } -- cgit v1.2.3