} RECDB_OUT;
#ifdef HAVE_MMAP
-static int mmap_error=0;
+static int mmap_error;
#endif
#define EOL '\n'
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 *
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 */