X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/d0f04f713ca0b689f745842fcc9e61d24610f11a..1ef37f9e521eaa2673d792badff62c25681a009e:/src/recdb.c diff --git a/src/recdb.c b/src/recdb.c index 7565c61..4fc9e3c 100644 --- a/src/recdb.c +++ b/src/recdb.c @@ -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 */