]> Pileus Git - ~andy/fetchmail/blobdiff - report.c
Caseblind comparison of names, more explicitness about Kerberos.
[~andy/fetchmail] / report.c
index ee7d75940cdd99040e5cfe41d5fb2d349fbdf6e0..f5c2110de1298905c2a282bd8971e196fa9728bd 100644 (file)
--- a/report.c
+++ b/report.c
@@ -117,27 +117,6 @@ private_strerror (errnum)
    Exit with status STATUS if it is nonzero.  */
 /* VARARGS */
 
-#if !defined(HAVE_VSYSLOG) && !defined(VA_START)
-int vsyslog(priority, message, va_alist)
-int priority;
-char *message;
-va_dcl
-{
-    va_list args;
-  
-    char *string;
-  
-    string = (char *)malloc(LINELEN);
-    va_start(args);
-    vsprintf(string, message, args);
-    va_end(args);
-    syslog(priority, string);
-    free(string);
-}
-#endif
-
 void
 #if defined(VA_START) && __STDC__
 error (int status, int errnum, const char *message, ...)
@@ -165,12 +144,12 @@ error (status, errnum, message, va_alist)
     {
       int priority;
 
-# ifdef VA_START
+#ifdef VA_START
       VA_START (args, message);
-# endif
+#endif
       priority = status? LOG_ALERT : errnum? LOG_ERR : LOG_INFO;
 
-      if (errnum)
+      if (errnum > 0)
         {
          char *msg = alloca (strlen (message) + 5);
 
@@ -178,22 +157,44 @@ error (status, errnum, message, va_alist)
          strcat (msg, ": %m");
 
          errno = errnum;
-# ifdef VA_START
+#ifdef HAVE_VSYSLOG
          vsyslog (priority, msg, args);
-         va_end (args);
-# else
+#else
+         {
+         char *a1 = va_arg(args, char *);
+         char *a2 = va_arg(args, char *);
+         char *a3 = va_arg(args, char *);
+         char *a4 = va_arg(args, char *);
+         char *a5 = va_arg(args, char *);
+         char *a6 = va_arg(args, char *);
+         char *a7 = va_arg(args, char *);
+         char *a8 = va_arg(args, char *);
          syslog (priority, msg, a1, a2, a3, a4, a5, a6, a7, a8);
-# endif
+         }
+#endif
        }
       else
         {
-# ifdef VA_START
+#ifdef HAVE_VSYSLOG
          vsyslog (priority, message, args);
-         va_end (args);
-# else
+#else
+         {
+         char *a1 = va_arg(args, char *);
+         char *a2 = va_arg(args, char *);
+         char *a3 = va_arg(args, char *);
+         char *a4 = va_arg(args, char *);
+         char *a5 = va_arg(args, char *);
+         char *a6 = va_arg(args, char *);
+         char *a7 = va_arg(args, char *);
+         char *a8 = va_arg(args, char *);
          syslog (priority, message, a1, a2, a3, a4, a5, a6, a7, a8);
-# endif
+         }
+#endif
        }
+
+#ifdef VA_START
+      va_end(args);
+#endif
     }
   else
 #endif
@@ -223,8 +224,15 @@ error (status, errnum, message, va_alist)
       fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
 #endif
 
-      if (errnum)
-       fprintf (stderr, ": %s", strerror (errnum));
+      if (errnum) {
+       char *tmps = strerror(errnum);
+       if (tmps) {
+         fprintf (stderr, ": %s", tmps);
+       }
+       else {
+         fprintf (stderr, ": Error %d", errnum);
+       }
+      }
       putc ('\n', stderr);
       fflush (stderr);
     }