From c3267a360860de225fa0af666d99f60d03266249 Mon Sep 17 00:00:00 2001
From: gramanas <anastasis.gramm2@gmail.com>
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