from bgpd. OK?
benno, is this the right way to do it? I kinda lost track on your log merging efforts... diff --git log.c log.c index 357ef35b79c..08afcebcac0 100644 --- log.c +++ log.c @@ -135,26 +135,44 @@ log_debug(const char *emsg, ...) } } -void -fatal(const char *emsg) +static void +vfatalc(int code, const char *emsg, va_list ap) { - if (emsg == NULL) - logit(LOG_CRIT, "fatal in %s: %s", log_procname, - strerror(errno)); + static char s[BUFSIZ]; + const char *sep; + + if (emsg != NULL) { + (void)vsnprintf(s, sizeof(s), emsg, ap); + sep = ": "; + } else { + s[0] = '\0'; + sep = ""; + } + if (code) + logit(LOG_CRIT, "fatal in %s: %s%s%s", + log_procname, s, sep, strerror(code)); else - if (errno) - logit(LOG_CRIT, "fatal in %s: %s: %s", - log_procname, emsg, strerror(errno)); - else - logit(LOG_CRIT, "fatal in %s: %s", - log_procname, emsg); + logit(LOG_CRIT, "fatal in %s%s%s", log_procname, sep, s); +} + +void +fatal(const char *emsg, ...) +{ + va_list ap; + va_start(ap, emsg); + vfatalc(errno, emsg, ap); + va_end(ap); exit(1); } void -fatalx(const char *emsg) +fatalx(const char *emsg, ...) { - errno = 0; - fatal(emsg); + va_list ap; + + va_start(ap, emsg); + vfatalc(0, emsg, ap); + va_end(ap); + exit(1); } diff --git log.h log.h index 479c21f34ed..660c3e89735 100644 --- log.h +++ log.h @@ -37,9 +37,9 @@ void log_info(const char *, ...) __attribute__((__format__ (printf, 1, 2))); void log_debug(const char *, ...) __attribute__((__format__ (printf, 1, 2))); -void fatal(const char *) __dead - __attribute__((__format__ (printf, 1, 0))); -void fatalx(const char *) __dead - __attribute__((__format__ (printf, 1, 0))); +__dead void fatal(const char *, ...) + __attribute__((__format__ (printf, 1, 2))); +__dead void fatalx(const char *, ...) + __attribute__((__format__ (printf, 1, 2))); #endif /* LOG_H */ -- I'm not entirely sure you are real.