=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/log.c,v retrieving revision 1.9 retrieving revision 1.10 diff -c -r1.9 -r1.10 *** src/usr.bin/tmux/log.c 2014/03/31 21:42:05 1.9 --- src/usr.bin/tmux/log.c 2014/03/31 21:42:45 1.10 *************** *** 1,4 **** ! /* $OpenBSD: log.c,v 1.9 2014/03/31 21:42:05 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: log.c,v 1.10 2014/03/31 21:42:45 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 22,42 **** #include #include #include - #include - #include #include "tmux.h" ! /* Log file, if needed. */ ! FILE *log_file; ! /* Debug level. */ ! int log_level = 0; - void log_event_cb(int, const char *); - void log_vwrite(const char *, va_list); - __dead void log_vfatal(const char *, va_list); - /* Log callback for libevent. */ void log_event_cb(unused int severity, const char *msg) --- 22,35 ---- #include #include #include #include "tmux.h" ! FILE *log_file; ! void log_event_cb(int, const char *); ! void log_vwrite(const char *, va_list); /* Log callback for libevent. */ void log_event_cb(unused int severity, const char *msg) *************** *** 46,57 **** /* Open logging to file. */ void ! log_open(int level, const char *path) { log_file = fopen(path, "w"); if (log_file == NULL) return; - log_level = level; setlinebuf(log_file); event_set_log_callback(log_event_cb); --- 39,49 ---- /* Open logging to file. */ void ! log_open(const char *path) { log_file = fopen(path, "w"); if (log_file == NULL) return; setlinebuf(log_file); event_set_log_callback(log_event_cb); *************** *** 65,70 **** --- 57,63 ---- { if (log_file != NULL) fclose(log_file); + log_file = NULL; event_set_log_callback(NULL); } *************** *** 92,154 **** { va_list ap; ! if (log_level > 0) { ! va_start(ap, msg); ! log_vwrite(msg, ap); ! va_end(ap); ! } } ! /* Log a debug message at level 2. */ ! void printflike1 ! log_debug2(const char *msg, ...) ! { ! va_list ap; ! ! if (log_level > 1) { ! va_start(ap, msg); ! log_vwrite(msg, ap); ! va_end(ap); ! } ! } ! ! /* Log a critical error, with error string if necessary, and die. */ ! __dead void ! log_vfatal(const char *msg, va_list ap) ! { ! char *fmt; ! ! if (errno != 0) { ! if (asprintf(&fmt, "fatal: %s: %s", msg, strerror(errno)) == -1) ! exit(1); ! log_vwrite(fmt, ap); ! } else { ! if (asprintf(&fmt, "fatal: %s", msg) == -1) ! exit(1); ! log_vwrite(fmt, ap); ! } ! free(fmt); ! ! exit(1); ! } ! ! /* Log a critical error, with error string, and die. */ __dead void printflike1 log_fatal(const char *msg, ...) { ! va_list ap; va_start(ap, msg); ! log_vfatal(msg, ap); } /* Log a critical error and die. */ __dead void printflike1 log_fatalx(const char *msg, ...) { ! va_list ap; - errno = 0; va_start(ap, msg); ! log_vfatal(msg, ap); } --- 85,119 ---- { va_list ap; ! va_start(ap, msg); ! log_vwrite(msg, ap); ! va_end(ap); } ! /* Log a critical error with error string and die. */ __dead void printflike1 log_fatal(const char *msg, ...) { ! char *fmt; ! va_list ap; va_start(ap, msg); ! if (asprintf(&fmt, "fatal: %s: %s", msg, strerror(errno)) == -1) ! exit(1); ! log_vwrite(fmt, ap); ! exit(1); } /* Log a critical error and die. */ __dead void printflike1 log_fatalx(const char *msg, ...) { ! char *fmt; ! va_list ap; va_start(ap, msg); ! if (asprintf(&fmt, "fatal: %s", msg) == -1) ! exit(1); ! log_vwrite(fmt, ap); ! exit(1); }