Skip to content
Snippets Groups Projects
Commit 7f769de4 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Better config (.ini) file read error detection and reporting

It was possibly before for fgets() failures to be pretty hard to diagnose.
parent 7e1189ca
No related branches found
No related tags found
No related merge requests found
Pipeline #8683 failed
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
bool allocerr(char* error, size_t maxerrlen, const char* fname, const char *item, size_t size) bool allocerr(char* error, size_t maxerrlen, const char* fname, const char *item, size_t size)
{ {
safe_snprintf(error, maxerrlen, "%s: allocating %u bytes of memory for %s" snprintf(error, maxerrlen, "%s: allocating %u bytes of memory for %s"
, fname, (uint)size, item); , fname, (uint)size, item);
return false; return false;
} }
...@@ -44,16 +44,23 @@ bool read_node_cfg(scfg_t* cfg, char* error, size_t maxerrlen) ...@@ -44,16 +44,23 @@ bool read_node_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
FILE* fp; FILE* fp;
str_list_t ini; str_list_t ini;
char value[INI_MAX_VALUE_LEN]; char value[INI_MAX_VALUE_LEN];
bool result = false;
const char* fname = "node.ini"; const char* fname = "node.ini";
SAFEPRINTF2(cfg->filename, "%s%s", cfg->node_dir, fname); SAFEPRINTF2(cfg->filename, "%s%s", cfg->node_dir, fname);
if ((fp = fnopen(NULL, cfg->filename, O_RDONLY)) == NULL) { if ((fp = fnopen(NULL, cfg->filename, O_RDONLY)) == NULL) {
safe_snprintf(error, maxerrlen, "%d (%s) opening %s", errno, safe_strerror(errno, errstr, sizeof(errstr)), cfg->filename); snprintf(error, maxerrlen, "ERROR %d (%s) opening %s", errno, safe_strerror(errno, errstr, sizeof(errstr)), cfg->filename);
return false; return false;
} }
ini = iniReadFile(fp); ini = iniReadFile(fp);
fclose(fp); fclose(fp);
if (ini == NULL) {
snprintf(error, maxerrlen, "Read no contents from %s", cfg->filename);
result = false;
} else
result = true;
SAFECOPY(cfg->node_phone, iniGetString(ini, ROOT_SECTION, "phone", "", value)); SAFECOPY(cfg->node_phone, iniGetString(ini, ROOT_SECTION, "phone", "", value));
SAFECOPY(cfg->node_daily.cmd, iniGetString(ini, ROOT_SECTION, "daily", "", value)); SAFECOPY(cfg->node_daily.cmd, iniGetString(ini, ROOT_SECTION, "daily", "", value));
cfg->node_daily.misc = iniGetUInteger(ini, ROOT_SECTION, "daily_settings", 0); cfg->node_daily.misc = iniGetUInteger(ini, ROOT_SECTION, "daily_settings", 0);
...@@ -66,7 +73,7 @@ bool read_node_cfg(scfg_t* cfg, char* error, size_t maxerrlen) ...@@ -66,7 +73,7 @@ bool read_node_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
iniFreeStringList(ini); iniFreeStringList(ini);
return true; return result;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -84,11 +91,15 @@ bool read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen) ...@@ -84,11 +91,15 @@ bool read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
const char* fname = "main.ini"; const char* fname = "main.ini";
SAFEPRINTF2(cfg->filename, "%s%s", cfg->ctrl_dir, fname); SAFEPRINTF2(cfg->filename, "%s%s", cfg->ctrl_dir, fname);
if ((fp = fnopen(NULL, cfg->filename, O_RDONLY)) == NULL) { if ((fp = fnopen(NULL, cfg->filename, O_RDONLY)) == NULL) {
safe_snprintf(error, maxerrlen, "%d (%s) opening %s", errno, safe_strerror(errno, errstr, sizeof(errstr)), cfg->filename); snprintf(error, maxerrlen, "ERROR %d (%s) opening %s", errno, safe_strerror(errno, errstr, sizeof(errstr)), cfg->filename);
} else { } else {
ini = iniReadFile(fp); ini = iniReadFile(fp);
fclose(fp); fclose(fp);
result = true; if (ini == NULL) {
snprintf(error, maxerrlen, "No contents read from %s", cfg->filename);
result = false;
} else
result = true;
} }
SAFECOPY(cfg->sys_name, iniGetString(ini, ROOT_SECTION, "name", "", value)); SAFECOPY(cfg->sys_name, iniGetString(ini, ROOT_SECTION, "name", "", value));
...@@ -348,16 +359,23 @@ bool read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) ...@@ -348,16 +359,23 @@ bool read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
FILE* fp; FILE* fp;
str_list_t ini; str_list_t ini;
char value[INI_MAX_VALUE_LEN]; char value[INI_MAX_VALUE_LEN];
bool result = false;
const char* fname = "msgs.ini"; const char* fname = "msgs.ini";
SAFEPRINTF2(cfg->filename, "%s%s", cfg->ctrl_dir, fname); SAFEPRINTF2(cfg->filename, "%s%s", cfg->ctrl_dir, fname);
if ((fp = fnopen(NULL, cfg->filename, O_RDONLY)) == NULL) { if ((fp = fnopen(NULL, cfg->filename, O_RDONLY)) == NULL) {
safe_snprintf(error, maxerrlen, "%d (%s) opening %s", errno, safe_strerror(errno, errstr, sizeof(errstr)), cfg->filename); snprintf(error, maxerrlen, "ERROR %d (%s) opening %s", errno, safe_strerror(errno, errstr, sizeof(errstr)), cfg->filename);
return false; return false;
} }
ini = iniReadFile(fp); ini = iniReadFile(fp);
fclose(fp); fclose(fp);
if (ini == NULL) {
snprintf(error, maxerrlen, "Read no contents from %s", cfg->filename);
result = false;
} else
result = true;
/*************************/ /*************************/
/* General Message Stuff */ /* General Message Stuff */
/*************************/ /*************************/
...@@ -471,7 +489,7 @@ bool read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) ...@@ -471,7 +489,7 @@ bool read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
#ifdef SBBS #ifdef SBBS
for (uint j = 0; j < i; j++) for (uint j = 0; j < i; j++)
if (cfg->sub[i]->ptridx == cfg->sub[j]->ptridx) { if (cfg->sub[i]->ptridx == cfg->sub[j]->ptridx) {
safe_snprintf(error, maxerrlen, "%s: Duplicate pointer index for subs %s and %s" snprintf(error, maxerrlen, "%s: Duplicate pointer index for subs %s and %s"
, fname , fname
, cfg->sub[i]->code_suffix, cfg->sub[j]->code_suffix); , cfg->sub[i]->code_suffix, cfg->sub[j]->code_suffix);
return false; return false;
...@@ -589,7 +607,7 @@ bool read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) ...@@ -589,7 +607,7 @@ bool read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
iniFreeStringList(ini); iniFreeStringList(ini);
iniFreeParsedSections(sections); iniFreeParsedSections(sections);
return true; return result;
} }
void free_node_cfg(scfg_t* cfg) void free_node_cfg(scfg_t* cfg)
...@@ -1009,7 +1027,7 @@ char* dir_vpath(scfg_t* cfg, dir_t* dir, char* path, size_t size) ...@@ -1009,7 +1027,7 @@ char* dir_vpath(scfg_t* cfg, dir_t* dir, char* path, size_t size)
if (dir->vshortcut[0] != '\0') if (dir->vshortcut[0] != '\0')
return dir->vshortcut; return dir->vshortcut;
else else
safe_snprintf(path, size, "%s/%s" snprintf(path, size, "%s/%s"
, cfg->lib[dir->lib]->vdir, dir->vdir); , cfg->lib[dir->lib]->vdir, dir->vdir);
return path; return path;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment