diff --git a/common/config/config_paramdesc.h b/common/config/config_paramdesc.h index 51c8626116..efb5c956d2 100644 --- a/common/config/config_paramdesc.h +++ b/common/config/config_paramdesc.h @@ -48,8 +48,8 @@ typedef union checkedparam { int num_okintval; /* number of valid values in the checkingval array */ } s1a; struct { - int (*f2)(configmodule_interface_t *cfg, - paramdef_t *param); /* check an integer against an authorized range, defined by its min and max value */ + int (*f2)(const configmodule_interface_t *cfg, + const paramdef_t *param); /* check an integer against an authorized range, defined by its min and max value */ int okintrange[CONFIG_MAX_NUMCHECKVAL]; /* integer array, store min and max values */ } s2; diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c index cb08fa8b58..c009187800 100644 --- a/common/config/config_userapi.c +++ b/common/config/config_userapi.c @@ -183,14 +183,35 @@ int config_check_intval(configmodule_interface_t *cfg, paramdef_t *param) return -1; } - for ( int i=0; ichkPptr->s1.num_okintval ; i++) { - if( *(param->uptr) == param->chkPptr->s1.okintval[i] ) { - return 0; + if (param->type == TYPE_INT32 || param->type == TYPE_INT) { + if (param->iptr == NULL) { + fprintf(stderr, "[CONFIG] config_check_intval: %s: NULL iptr\n", param->optname); + return -1; } + const int v = *param->iptr; + for (int i = 0; i < param->chkPptr->s1.num_okintval; i++) { + if (v == param->chkPptr->s1.okintval[i]) + return 0; + } + fprintf(stderr, "[CONFIG] config_check_intval: %s: %i invalid value, authorized values:\n ", param->optname, v); + for (int i = 0; i < param->chkPptr->s1.num_okintval; i++) { + fprintf(stderr, " %i", param->chkPptr->s1.okintval[i]); + } + fprintf(stderr, " \n"); + return -1; + } else { + if (param->uptr == NULL) { + fprintf(stderr, "[CONFIG] config_check_intval: %s: NULL uptr\n", param->optname); + return -1; + } + for (int i = 0; i < param->chkPptr->s1.num_okintval; i++) { + if (*(param->uptr) == (uint32_t)param->chkPptr->s1.okintval[i]) { + return 0; + } + } + print_intvalueerror(param, "config_check_intval", param->chkPptr->s1.okintval, param->chkPptr->s1.num_okintval); + return -1; } - - print_intvalueerror(param,"config_check_intval", param->chkPptr->s1.okintval,param->chkPptr->s1.num_okintval); - return -1; } int config_check_modify_integer(configmodule_interface_t *cfg, paramdef_t *param) @@ -211,7 +232,7 @@ int config_check_modify_integer(configmodule_interface_t *cfg, paramdef_t *param return -1; } -int config_check_intrange(configmodule_interface_t *cfg, paramdef_t *param) +int config_check_intrange(const configmodule_interface_t *cfg, const paramdef_t *param) { UNUSED(cfg); if( *(param->iptr) >= param->chkPptr->s2.okintrange[0] && *(param->iptr) <= param->chkPptr->s2.okintrange[1] ) { @@ -227,6 +248,25 @@ int config_check_intrange(configmodule_interface_t *cfg, paramdef_t *param) return -1; } +int config_check_uintrange(const configmodule_interface_t *cfg, const paramdef_t *param) +{ + (void)cfg; + const uint32_t *v = param->uptr; + const int *range = param->chkPptr->s2.okintrange; + + if (*v >= (uint32_t)range[0] && *v <= (uint32_t)range[1]) { + return 0; + } + + fprintf(stderr, + "[CONFIG] config_check_uintrange: %s: %u invalid, authorized range: %i %i\n", + param->optname, + *v, + range[0], + range[1]); + return -1; +} + void print_strvalueerror(paramdef_t *param, char *fname, char **okval, int numokval) { fprintf(stderr,"[CONFIG] %s: %s: %s invalid value, authorized values:\n ", fname,param->optname, *param->strptr); diff --git a/common/config/config_userapi.h b/common/config/config_userapi.h index fafbd81019..b959cb57fe 100644 --- a/common/config/config_userapi.h +++ b/common/config/config_userapi.h @@ -51,7 +51,8 @@ int config_get_processedint(configmodule_interface_t *cfg, paramdef_t *cfgoption /* functions to be used in parameters definition, to check parameters values */ int config_check_intval(configmodule_interface_t *cfg, paramdef_t *param); int config_check_modify_integer(configmodule_interface_t *cfg, paramdef_t *param); -int config_check_intrange(configmodule_interface_t *cfg, paramdef_t *param); +int config_check_intrange(const configmodule_interface_t *cfg, const paramdef_t *param); +int config_check_uintrange(const configmodule_interface_t *cfg, const paramdef_t *param); int config_check_strval(configmodule_interface_t *cfg, paramdef_t *param); int config_checkstr_assign_integer(configmodule_interface_t *cfg, paramdef_t *param); const paramdef_t *config_get_paramdef_from_name(const paramdef_t *pd, int num, const char *name);