diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c index c5461610a1c2716d3f22fdd393b02d4f69160db7..6c91e71e52ed9ab8b96e972fa28e43583ef87e42 100644 --- a/common/config/config_cmdline.c +++ b/common/config/config_cmdline.c @@ -37,27 +37,32 @@ int processoption(paramdef_t *cfgoptions, char *value) { -int optisset=0; -int noarg=0; - if ((cfgoptions->paramflags &PARAMFLAG_BOOL) == 0) { - if (value == NULL) { - noarg=1; - } else if ( value[0] == '-') { - noarg = 1; - } - if (noarg == 1) { +int argok=1; +char *tmpval = value; +int ret =0; +int optisset; + + if (value == NULL) { + argok=0; + } else if ( value[0] == '-') { + argok = 0; + } + if ((cfgoptions->paramflags &PARAMFLAG_BOOL) == 0) { /* not a boolean, argument required */ + if (argok == 0) { fprintf(stderr,"[CONFIG] command line, option %s requires an argument\n",cfgoptions->optname); return 0; - } + } else { /* boolean value */ + tmpval = "1"; + } } switch(cfgoptions->type) { case TYPE_STRING: config_check_valptr(cfgoptions, (char **)(cfgoptions->strptr), sizeof(char *)); - config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(value+1)); - sprintf(*(cfgoptions->strptr), "%s",value); - printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, value); + config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval+1)); + sprintf(*(cfgoptions->strptr), "%s",tmpval); + printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, tmpval); optisset=1; break; @@ -70,13 +75,13 @@ int noarg=0; case TYPE_UINT8: case TYPE_INT8: config_check_valptr(cfgoptions, (char **)&(cfgoptions->iptr),sizeof(int32_t)); - config_assign_int(cfgoptions,cfgoptions->optname,(int32_t)strtol(value,NULL,0)); + config_assign_int(cfgoptions,cfgoptions->optname,(int32_t)strtol(tmpval,NULL,0)); optisset=1; break; case TYPE_UINT64: case TYPE_INT64: config_check_valptr(cfgoptions, (char **)&(cfgoptions->i64ptr),sizeof(uint64_t)); - *(cfgoptions->i64ptr)=strtoll(value,NULL,0); + *(cfgoptions->i64ptr)=strtoll(tmpval,NULL,0); printf_cmdl("[CONFIG] %s set to %lli from command line\n", cfgoptions->optname, (long long)*(cfgoptions->i64ptr)); optisset=1; break; @@ -86,7 +91,7 @@ int noarg=0; break; case TYPE_DOUBLE: config_check_valptr(cfgoptions, (char **)&(cfgoptions->dblptr),sizeof(double)); - *(cfgoptions->dblptr) = strtof(value,NULL); + *(cfgoptions->dblptr) = strtof(tmpval,NULL); printf_cmdl("[CONFIG] %s set to %lf from command line\n", cfgoptions->optname, *(cfgoptions->dblptr)); optisset=1; break; @@ -103,7 +108,7 @@ int noarg=0; cfgoptions->paramflags = cfgoptions->paramflags | PARAMFLAG_PARAMSET; } - return optisset; + return argok; } int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) @@ -139,8 +144,12 @@ char *cfgpath; if ( ((strlen(*p) == 2) && (strcmp(*p + 1,cfgpath) == 0)) || ((strlen(*p) > 2) && (strcmp(*p + 2,cfgpath ) == 0 )) ) { p++; - j =+ processoption(&(cfgoptions[i]), *p); c--; + j = processoption(&(cfgoptions[i]), *p); + if ( j== 0) { + c++; + p--; + } } } p++;