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.