From c3267a360860de225fa0af666d99f60d03266249 Mon Sep 17 00:00:00 2001 From: gramanas Date: Thu, 25 Oct 2018 19:06:34 +0300 Subject: Fix config parser bug --- src/ck.c | 3 +-- src/confparser.c | 27 +++++++++++++-------------- 2 files changed, 14 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/ck.c b/src/ck.c index 96ddeae..f35cc95 100644 --- a/src/ck.c +++ b/src/ck.c @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) { goto error; } /* Finally parse the config file and exit on error */ - if (!config_file_parse(&conf, &opt)) { + if (config_file_parse(&conf, &opt)) { goto error; } } @@ -73,7 +73,6 @@ int main(int argc, char *argv[]) { error: free_user_opt(&opt); free_conf(&conf); - close: report_errlog(); return 0; } diff --git a/src/confparser.c b/src/confparser.c index 95c8704..4599a84 100644 --- a/src/confparser.c +++ b/src/confparser.c @@ -17,8 +17,10 @@ ERRLOG(configfile); const char * const CONFIG_NAME = "/ckrc"; void conf_values_initialize(Conf *c) { - c->scrt_dir = NULL; - c->vc_dir = NULL; +#define X(var, str, name) \ + c->var = NULL; + CONFIG_VARIABLES_TABLE +#undef X } int remove_newline(char buff[]) { @@ -67,6 +69,7 @@ ConfigParserResult parse(Conf *conf, UserOpt *opt) { char confName[STR_L]; make_config_name(confName, opt->confDir); if ((confPtr = fopen(confName, "r")) == NULL) { + ERR("%s is not readable, check the permissions.", confName) return CPR_NO_CONFIG_FILE; } int flag = 1; @@ -97,17 +100,14 @@ ConfigParserResult parse(Conf *conf, UserOpt *opt) { else { ERR("Config error in line: %s", line); } + flag = 0; } } -#define X(var, str) \ - if (conf->var == NULL) { \ - flag = 0; \ - CONFIG_VARIABLES_TABLE -#undef X + if (flag) { return CPR_OK; } - return CPR_NO_CONFIG_FILE; + return CPR_WRONG_CONFIG; } int config_file_parse(Conf *conf, UserOpt *opt) { @@ -116,18 +116,17 @@ int config_file_parse(Conf *conf, UserOpt *opt) { #define X(var,str,name) \ case CPR_WRONG_##var: \ ERR("%s %s defined in config doesn't exist", name, conf->var); \ - return 0; \ + return -1; \ break; CONFIG_VARIABLES_TABLE #undef X - case CPR_NO_CONFIG_FILE: - ERR("The config file specified could not be found"); + case CPR_OK: return 0; + case CPR_NO_CONFIG_FILE: case CPR_WRONG_CONFIG: - ERR("Config help\n"); - case CPR_OK: - return 1; + break; } + return -1; } void free_conf(Conf *conf) { -- cgit v1.2.3