=================================================================== RCS file: /cvs/cvs/blind/log.c,v retrieving revision 1.9 retrieving revision 1.11 diff -u -p -r1.9 -r1.11 --- blind/log.c 2022/04/03 09:14:25 1.9 +++ blind/log.c 2022/04/03 13:52:00 1.11 @@ -22,9 +22,9 @@ #include #include -static int log_bgnd; -static int log_verb; -const char *log_name; +static int log_bgnd; +static int log_verb; +const char *log_name; void log_init(int, int); void log_set(int); @@ -68,12 +68,20 @@ log_get(void) void log_send(const char *info, va_list ap) { + char *ninf; + if (info != NULL) { if (log_bgnd) vsyslog(LOG_INFO, info, ap); else { - vfprintf(stderr, info, ap); - fprintf(stderr, "\n"); + if (asprintf(&ninf, "%s\n", info) == -1) { + vfprintf(stderr, info, ap); + fprintf(stderr, "\n"); + } else { + vfprintf(stderr, ninf, ap); + free(ninf); + } + fflush(stderr); } } } @@ -103,14 +111,24 @@ log_debug(const char *info, ...) void log_fatal(const char *info, ...) { - extern struct blind *bl; + extern struct blind *bl; + static char s[BUFSIZ]; va_list ap; va_start(ap, info); - log_send(info, ap); + if (info != NULL) + (void)vsnprintf(s, sizeof(s), info, ap); + else + s[0] = '\0'; + va_end(ap); - log_info("%s", strerror(errno)); - if (bl != NULL) - free(bl); + if (errno) + log_info("%s: %s", strerror(errno), s); + else + log_info("Unknown error: %s", s); + + if (bl != NULL) + free(bl); + exit(1); }