/*
// Full copyright information is available in the file ../doc/CREDITS
//
// Procedures to handle logging and fatal errors.
*/
#include "defs.h"
#include <sys/types.h>
#include <stdarg.h>
#include "cache.h"
#include "util.h"
void panic(char * s, ...) {
va_list vargs;
static Bool panic_state = NO;
va_start(vargs,s);
fprintf(errfile, "[%s] %s: ", timestamp(NULL),
(panic_state ? "RECURSIVE PANIC" : "PANIC"));
vfprintf(errfile,s,vargs);
va_end(vargs);
fputc('\n',errfile);
if (!panic_state) {
panic_state = YES;
fprintf(errfile, "[%s] doing binary dump...", timestamp(NULL));
cache_sync();
fputs("Done\n", errfile);
}
exit(1);
}
void abort(void) {
panic("Aborted");
exit(1); /* Never reached. Avoids warnings on some compilers, tho */
}
void fail_to_start(char *s) {
fprintf(errfile, "[%s] FAILED TO START: %s\n", timestamp(NULL), s);
exit(1);
}
void write_log(char *fmt, ...) {
va_list arg;
cStr *str;
va_start(arg, fmt);
str = vformat(fmt, arg);
fputs(string_chars(str), logfile);
fputc('\n', logfile);
fflush(logfile);
string_discard(str);
va_end(arg);
}
void write_err(char *fmt, ...) {
va_list arg;
cStr *str;
va_start(arg, fmt);
str = vformat(fmt, arg);
va_end(arg);
fprintf(errfile, "[%s] %s\n", timestamp(NULL), string_chars(str));
fflush(errfile);
string_discard(str);
}