config module: print clear error when config file does not exist
Print a clear error if a config file does not exist (unclear previously, when the user would get a confusing, unspecific, "file I/O error" on line 0) I tried to free the memory that had been allocated at that point, and verified that using the address sanitizer. Nevertheless, the function does too much, and is too complicated for refactoring.
This commit is contained in:
@@ -343,9 +343,20 @@ configmodule_interface_t *load_configmodule(int argc,
|
||||
atoken = strtok_r(NULL,":",&strtokctx);
|
||||
}
|
||||
|
||||
printf("[CONFIG] get parameters from %s ", cfgmode);
|
||||
for (i = 0; i < cfgptr->num_cfgP; i++) {
|
||||
printf("%s ", cfgptr->cfgP[i]);
|
||||
/* check if that file actually exists */
|
||||
if (access(cfgptr->cfgP[i], F_OK) != 0) {
|
||||
fprintf(stderr, "error: file %s does not exist\n", cfgptr->cfgP[i]);
|
||||
for (int j = 0; j < cfgptr->num_cfgP; ++j)
|
||||
free(cfgptr->cfgP[j]);
|
||||
free(modeparams);
|
||||
free(cfgptr->cfgmode);
|
||||
free(cfgptr->argv_info);
|
||||
free(cfgptr);
|
||||
if (cfgmode != NULL)
|
||||
free(cfgmode);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (cfgptr->rtflags & CONFIG_PRINTPARAMS) {
|
||||
|
||||
@@ -576,8 +576,10 @@ int config_libconfig_init(configmodule_interface_t *cfg)
|
||||
config_set_auto_convert (&(libconfig_privdata.cfg), CONFIG_TRUE);
|
||||
/* Read the file. If there is an error, report it and exit. */
|
||||
if( config_read_file(&(libconfig_privdata.cfg), libconfig_privdata.configfile) == CONFIG_FALSE) {
|
||||
fprintf(stderr,"[LIBCONFIG] %s %d file %s - line %d: %s\n",__FILE__, __LINE__,
|
||||
libconfig_privdata.configfile, config_error_line(&(libconfig_privdata.cfg)),
|
||||
fprintf(stderr,
|
||||
"[LIBCONFIG] file %s - line %d: %s\n",
|
||||
libconfig_privdata.configfile,
|
||||
config_error_line(&(libconfig_privdata.cfg)),
|
||||
config_error_text(&(libconfig_privdata.cfg)));
|
||||
config_destroy(&(libconfig_privdata.cfg));
|
||||
printf( "\n");
|
||||
|
||||
Reference in New Issue
Block a user