Fix: vargs must be va_copy'ed when used multiple times
authorChristian Thaeter <ct@pipapo.org>
Sat, 15 Mar 2008 06:03:36 +0000 (06:03 +0000)
committerChristian Thaeter <ct@pipapo.org>
Sat, 15 Mar 2008 06:03:36 +0000 (06:03 +0000)
src/rxpd_base.c

index cedcdb7..28ed51c 100644 (file)
@@ -71,7 +71,12 @@ rxpd_log (struct rxpd_base* self, int level, const char* fmt, ...)
   if (level <= (self?self->verbosity:LOG_DEBUG))
     {
       if (!self || self->daemonize)
-        vsyslog (level, fmt, ap);
+        {
+          va_list as;
+          va_copy (as, ap);
+          vsyslog (level, fmt, as);
+          va_end (as);
+        }
       vfprintf (stderr, fmt, ap);
     }
   va_end (ap);
@@ -83,7 +88,12 @@ rxpd_fail (struct rxpd_base* self, const char* fmt, ...)
   va_list ap;
   va_start (ap, fmt);
   if (!self || self->daemonize)
-    vsyslog (LOG_ALERT, fmt, ap);
+    {
+      va_list as;
+      va_copy (as, ap);
+      vsyslog (LOG_ALERT, fmt, as);
+      va_end (as);
+    }
   vfprintf (stderr, fmt, ap);
   va_end (ap);
   exit (EXIT_FAILURE);
@@ -92,10 +102,12 @@ rxpd_fail (struct rxpd_base* self, const char* fmt, ...)
 void
 rxpd_die (const char* fmt, ...)
 {
-  va_list ap;
+  va_list ap, as;
   va_start(ap, fmt);
+  va_copy (as, ap);
   vsyslog (LOG_EMERG, fmt, ap);
   vfprintf (stderr, fmt, ap);
+  va_end (as);
   va_end (ap);
   abort ();
 }