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.

Reply via email to