Commit d88b7249 authored by frtabu's avatar frtabu

remove getopt call in configuration module, it changes the argv order. Fix...

remove getopt call in configuration module, it changes the argv order. Fix configuration module bugs (command line arguments sometimes not properly processed
parent b5a36dd9
...@@ -41,12 +41,14 @@ char *tmpval = value; ...@@ -41,12 +41,14 @@ char *tmpval = value;
int optisset=0; int optisset=0;
char defbool[2]="1"; char defbool[2]="1";
if ( ((cfgoptions->paramflags &PARAMFLAG_BOOL) == 0) && value == NULL ) { /* not a boolean, argument required */ if ( value == NULL) {
if( (cfgoptions->paramflags &PARAMFLAG_BOOL) == 0 ) { /* not a boolean, argument required */
fprintf(stderr,"[CONFIG] command line, option %s requires an argument\n",cfgoptions->optname); fprintf(stderr,"[CONFIG] command line, option %s requires an argument\n",cfgoptions->optname);
return 0; return 0;
} else { /* boolean value option without argument, set value to true*/ } else { /* boolean value option without argument, set value to true*/
tmpval = defbool; tmpval = defbool;
} }
}
switch(cfgoptions->type) switch(cfgoptions->type)
{ {
case TYPE_STRING: case TYPE_STRING:
...@@ -124,8 +126,8 @@ char *cfgpath; ...@@ -124,8 +126,8 @@ char *cfgpath;
if (strcmp(*p, "-h") == 0 || strcmp(*p, "--help") == 0 ) { if (strcmp(*p, "-h") == 0 || strcmp(*p, "--help") == 0 ) {
config_printhelp(cfgoptions,numoptions); config_printhelp(cfgoptions,numoptions);
} }
if (*p[0] == '-') {
if (*p[0] == '-') {
for(int i=0;i<numoptions;i++) { for(int i=0;i<numoptions;i++) {
if ( ( cfgoptions[i].paramflags & PARAMFLAG_DISABLECMDLINE) != 0) { if ( ( cfgoptions[i].paramflags & PARAMFLAG_DISABLECMDLINE) != 0) {
continue; continue;
...@@ -135,17 +137,17 @@ char *cfgpath; ...@@ -135,17 +137,17 @@ char *cfgpath;
} else { } else {
sprintf(cfgpath,"%s",cfgoptions[i].optname); sprintf(cfgpath,"%s",cfgoptions[i].optname);
} }
if ( ((strlen(*p) == 2) && (strcmp(*p + 1,cfgpath) == 0)) || if ( ((strlen(*p) == 2) && (strcmp(*p + 1,cfgpath) == 0)) ||
((strlen(*p) > 2) && (strcmp(*p + 2,cfgpath ) == 0 )) ) { ((strlen(*p) > 2) && (strcmp(*p + 2,cfgpath ) == 0 )) ) {
pp = *(p+1); pp = *(p+1);
if ( ( pp != NULL ) && (pp[0]!= '-') ) { if ( ( pp != NULL ) && (c>1) && (pp[0]!= '-') ) {
p++;
c--;
j += processoption(&(cfgoptions[i]), pp); j += processoption(&(cfgoptions[i]), pp);
} else { } else {
j += processoption(&(cfgoptions[i]), NULL); j += processoption(&(cfgoptions[i]), NULL);
} }
break;
} }
} /* for */ } /* for */
} /* if (*p[0] == '-') */ } /* if (*p[0] == '-') */
......
...@@ -109,14 +109,14 @@ char *atoken; ...@@ -109,14 +109,14 @@ char *atoken;
uint32_t tmpflags=0; uint32_t tmpflags=0;
int i; int i;
/* first parse the command line to look for the -O option */ /* first parse the command line to look for the -O option */
opterr=0; opterr=0;
while ((i = getopt(argc, argv, "O:h")) != -1) { for (i = 0;i<argc;i++) {
if ( i == 'O' ) { if (strlen(argv[i]) < 2) continue;
cfgparam = optarg; if ( argv[i][1] == 'O' && i < (argc -1)) {
cfgparam = argv[i+1];
} }
if ( i == 'h' ) { if ( argv[i][1] == 'h' ) {
tmpflags = CONFIG_HELP; tmpflags = CONFIG_HELP;
} }
} }
......
...@@ -123,6 +123,11 @@ void config_printhelp(paramdef_t *params,int numparams) ...@@ -123,6 +123,11 @@ void config_printhelp(paramdef_t *params,int numparams)
int config_get(paramdef_t *params,int numparams, char *prefix) int config_get(paramdef_t *params,int numparams, char *prefix)
{ {
int ret= -1; int ret= -1;
if (CONFIG_ISFLAGSET(CONFIG_ABORT)) {
fprintf(stderr,"[CONFIG] config_get skipped, config module not properly initialized\n");
return ret;
}
configmodule_interface_t *cfgif = config_get_if(); configmodule_interface_t *cfgif = config_get_if();
if (cfgif != NULL) { if (cfgif != NULL) {
ret = config_get_if()->get(params, numparams,prefix); ret = config_get_if()->get(params, numparams,prefix);
......
...@@ -113,7 +113,11 @@ void log_getconfig(log_t *g_log) { ...@@ -113,7 +113,11 @@ void log_getconfig(log_t *g_log) {
paramdef_t logparams_verbosity[MAX_LOG_COMPONENTS]; paramdef_t logparams_verbosity[MAX_LOG_COMPONENTS];
paramdef_t logparams_logfile[MAX_LOG_COMPONENTS]; paramdef_t logparams_logfile[MAX_LOG_COMPONENTS];
config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX); int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX);
if (ret <0) {
fprintf(stderr,"[LOG] init aborted, configuration couldn't be performed");
return;
}
memset(logparams_level, 0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS); memset(logparams_level, 0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS);
memset(logparams_verbosity,0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS); memset(logparams_verbosity,0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS);
memset(logparams_logfile, 0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS); memset(logparams_logfile, 0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS);
......
...@@ -584,7 +584,7 @@ static void get_options(void) { ...@@ -584,7 +584,7 @@ static void get_options(void) {
if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) { if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) {
set_glog(glog_level, -1); set_glog(glog_level, -1);
} }
if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) { if(config_isparamset(cmdline_logparams,CMDLINE_GLOGVERBO_IDX)) {
set_glog(-1, glog_verbosity); set_glog(-1, glog_verbosity);
} }
if (start_telnetsrv) { if (start_telnetsrv) {
...@@ -890,7 +890,6 @@ int main( int argc, char **argv ) ...@@ -890,7 +890,6 @@ int main( int argc, char **argv )
exit_fun("[SOFTMODEM] Error, configuration module init failed\n"); exit_fun("[SOFTMODEM] Error, configuration module init failed\n");
} }
#ifdef DEBUG_CONSOLE #ifdef DEBUG_CONSOLE
setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0);
...@@ -920,7 +919,6 @@ int main( int argc, char **argv ) ...@@ -920,7 +919,6 @@ int main( int argc, char **argv )
} }
#if T_TRACER #if T_TRACER
T_init(T_port, T_wait, T_dont_fork); T_init(T_port, T_wait, T_dont_fork);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment