diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c index 57a680044b1c772382f1d6a5fec30bda4e6a3e10..57b312494af8e0607e5001d1564d4225c2eccca8 100644 --- a/common/config/config_userapi.c +++ b/common/config/config_userapi.c @@ -29,6 +29,9 @@ * \note * \warning */ + +#define _GNU_SOURCE + #include <string.h> #include <stdlib.h> #include <stdio.h> @@ -210,6 +213,34 @@ configmodule_interface_t *cfgif = config_get_if(); return ret; } +int config_getlist(paramlist_def_t *ParamList, paramdef_t *params, int numparams, char *prefix) +{ + if (CONFIG_ISFLAGSET(CONFIG_ABORT)) { + fprintf(stderr,"[CONFIG] config_get skipped, config module not properly initialized\n"); + return -1; + } + if (!config_get_if()) + return -1; + + const int ret = config_get_if()->getlist(ParamList, params, numparams, prefix); + if (ret >= 0 && params) { + char *newprefix; + if (prefix) + asprintf(&newprefix, "%s.%s", prefix, ParamList->listname); + else + newprefix = ParamList->listname; + char cfgpath[MAX_OPTNAME_SIZE*2 + 6]; /* prefix.listname.[listindex] */ + for (int i = 0; i < ParamList->numelt; ++i) { + // TODO config_process_cmdline? + sprintf(cfgpath, "%s.[%i]", newprefix, i); + config_execcheck(ParamList->paramarray[i], numparams, cfgpath); + } + if (prefix) + free(newprefix); + } + return ret; +} + int config_isparamset(paramdef_t *params,int paramidx) { if ((params[paramidx].paramflags & PARAMFLAG_PARAMSET) != 0) { diff --git a/common/config/config_userapi.h b/common/config/config_userapi.h index 25306b8778d844f70db17826d14e26fccc72b35d..2b40f8401be2466cda9adfbbb3725910b83fd828 100644 --- a/common/config/config_userapi.h +++ b/common/config/config_userapi.h @@ -57,7 +57,7 @@ extern int config_assign_ipv4addr(paramdef_t *cfgoptions, char *ipv4addr); /* apis to get parameters, to be used by oai modules, at configuration time */ extern int config_get(paramdef_t *params,int numparams, char *prefix); -#define config_getlist config_get_if()->getlist +extern int config_getlist(paramlist_def_t *ParamList, paramdef_t *params, int numparams, char *prefix); /* apis to retrieve parameters info after calling get or getlist functions */ extern int config_isparamset(paramdef_t *params,int paramidx);