]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/recdb.c
Couple of srvx updates.
[irc/evilnet/x3.git] / src / recdb.c
index 7565c61400c4e8e9c04216bcf42891529ba8a399..4fc9e3c2c9e1f59e7c9f91e6470d654fae97125a 100644 (file)
@@ -5,7 +5,7 @@
  *
  * x3 is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -93,7 +93,7 @@ typedef struct recdb_outfile {
 } RECDB_OUT;
 
 #ifdef HAVE_MMAP
-static int mmap_error=0;
+static int mmap_error;
 #endif
 
 #define EOL '\n'
@@ -572,9 +572,16 @@ failure_reason(int code)
 void
 explain_failure(RECDB *recdb, int code)
 {
-    log_module(MAIN_LOG, LOG_ERROR, "%s (got '%c') at %s line %d column %d.",
-               failure_reason(code), code & 255,
-               recdb->source, recdb->ctx.line, recdb->ctx.col);
+    static char msg[1024];
+    snprintf(msg, sizeof(msg), "%s (got '%c') at %s line %d column %d.",
+             failure_reason(code), code & 255,
+             recdb->source, recdb->ctx.line, recdb->ctx.col);
+    if (MAIN_LOG == NULL) {
+        fputs(msg, stderr);
+        fputc('\n', stderr);
+        fflush(stderr);
+    } else
+        log_module(MAIN_LOG, LOG_ERROR, "%s", msg);
 }
 
 const char *
@@ -617,9 +624,13 @@ parse_database(const char *filename)
 
     if (fstat(fileno(recdb.f), &statinfo)) {
         log_module(MAIN_LOG, LOG_ERROR, "Unable to fstat database file '%s': %s", filename, strerror(errno));
+        fclose(recdb.f);
         return NULL;
     }
     recdb.length = (size_t)statinfo.st_size;
+    if (recdb.length == 0) {
+        return alloc_database();
+    }
 
 #ifdef HAVE_MMAP
     /* Try mmap */