=================================================================== RCS file: /cvs/cvs/blind/log.c,v retrieving revision 1.1 retrieving revision 1.7 diff -u -p -r1.1 -r1.7 --- blind/log.c 2022/03/17 09:09:26 1.1 +++ blind/log.c 2022/03/19 06:16:18 1.7 @@ -14,20 +14,29 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include +#include #include #include +#include +#include #include +static int log_background; static int log_verbose; const char *log_procname; -void log_init(int, int); -void log_setv(int); -int log_getv(void); -void log_info(const char *, ...) +void log_init(int, int); +void log_setv(int); +int log_getv(void); +void log_send(const char *, va_list) + __attribute__((__format__ (printf, 1, 0))); +void log_info(const char *, ...) __attribute__((__format__ (printf, 1, 2))); -void log_debug(const char *, ...) +void log_debug(const char *, ...) __attribute__((__format__ (printf, 1, 2))); +__dead void log_fatal(const char *, ...) + __attribute__((__format__ (printf, 1, 2))); void log_init(int background, int facility) @@ -37,7 +46,8 @@ log_init(int background, int facility) if (__progname != NULL) log_procname = __progname; - if (background) + log_background = background; + if (log_background) openlog(log_procname, LOG_PID | LOG_NDELAY, facility); tzset(); @@ -56,12 +66,25 @@ log_getv(void) } void +log_send(const char *info, va_list ap) +{ + if (info != NULL) { + if (log_background) + vsyslog(LOG_INFO, info, ap); + else { + vfprintf(stderr, info, ap); + fprintf(stderr, "\n"); + } + } +} + +void log_info(const char *info, ...) { va_list ap; va_start(ap, info); - vsyslog(LOG_INFO, info, ap); + log_send(info, ap); va_end(ap); } @@ -72,7 +95,19 @@ log_debug(const char *info, ...) if (log_verbose) { va_start(ap, info); - vsyslog(LOG_INFO, info, ap); + log_send(info, ap); va_end(ap); } +} + +void +log_fatal(const char *info, ...) +{ + va_list ap; + + va_start(ap, info); + log_send(info, ap); + va_end(ap); + log_info("%s", strerror(errno)); + exit(1); }