2004-05-09 Michael Poole <mdpoole@troilus.org>
[ircu2.10.12-pk.git] / ircd / s_conf.c
index 1bbab6682299f10a5a672118f290d648372312e0..7733c9f8e26cfc01e277db2ade0bcf73311db099 100644 (file)
@@ -71,6 +71,7 @@
 
 struct ConfItem  *GlobalConfList  = 0;
 int              GlobalConfCount = 0;
+struct s_map     *GlobalServiceMapList = 0;
 struct qline     *GlobalQuarantineList = 0;
 
 void yyparse(void);
@@ -971,11 +972,14 @@ void clear_quarantines(void)
 
 #define MAXCONFLINKS 150
 
+static int conf_error;
+static int conf_already_read;
 extern FILE *yyin;
 void init_lexer(void);
 
 int read_configuration_file(void)
 {
+  conf_error = 0;
   feature_unmark(); /* unmark all features for resetting later */
   /* Now just open an fd. The buffering isn't really needed... */
   init_lexer();
@@ -983,6 +987,7 @@ int read_configuration_file(void)
   fclose(yyin);
   yyin = NULL;
   feature_mark(); /* reset unmarked features */
+  conf_already_read = 1;
   return 1;
 }
 
@@ -993,6 +998,9 @@ yyerror(const char *msg)
                       lineno, msg);
  log_write(LS_CONFIG, L_ERROR, 0, "Config file parse error line %d: %s",
            lineno, msg);
+ if (!conf_already_read)
+   fprintf(stderr, "Config file parse error line %d: %s\n", lineno, msg);
+ conf_error = 1;
 }
 
 /*
@@ -1121,6 +1129,8 @@ int init_conf(void)
      */
     if (0 == localConf.name || 0 == localConf.numeric)
       return 0;
+    if (conf_error)
+      return 0;
 
     if (0 == localConf.location1)
       DupString(localConf.location1, "");
@@ -1128,7 +1138,7 @@ int init_conf(void)
       DupString(localConf.location2, "");
     if (0 == localConf.contact)
       DupString(localConf.contact, "");
-    
+
     return 1;
   }
   return 0;