]> Pileus Git - ~andy/fetchmail/blobdiff - report.c
Better skip handling.
[~andy/fetchmail] / report.c
index 2e3d0b347621435ea771ec897aac3855203e5d56..3947eb235cac3ef05c42f8371243b02bee1f5765 100644 (file)
--- a/report.c
+++ b/report.c
@@ -77,9 +77,6 @@ static unsigned int use_syslog;
 /* This variable is incremented each time `error' is called.  */
 unsigned int error_message_count;
 
-/* for now, send all error messages to stderr */
-#define errfp  stderr
-
 #ifdef _LIBC
 /* In the GNU C library, there is a predefined variable for this.  */
 
@@ -108,17 +105,14 @@ char *strerror (errnum)
 
 /* Print the program name and error message MESSAGE, which is a printf-style
    format string with optional args.
-   If ERRNUM is nonzero, print its corresponding system error message.
-   Exit with status STATUS if it is nonzero.  */
+   If ERRNUM is nonzero, print its corresponding system error message. */
 /* VARARGS */
 
 void
 #ifdef HAVE_STDARG_H
-error (int status, int errnum, const char *message, ...)
+report (FILE *errfp, const char *message, ...)
 #else
-error (status, errnum, message, va_alist)
-     int status;
-     int errnum;
+report (FILE *errfp, message, va_alist)
      const char *message;
      va_dcl
 #endif
@@ -131,7 +125,7 @@ error (status, errnum, message, va_alist)
   if (partial_message_size_used != 0)
     {
       partial_message_size_used = 0;
-      error (0, 0, _("%s (log message incomplete)"), partial_message);
+      report (errfp, 0, _("%s (log message incomplete)"), partial_message);
     }
 
 #if defined(HAVE_SYSLOG)
@@ -142,40 +136,12 @@ error (status, errnum, message, va_alist)
 #ifdef VA_START
       VA_START (args, message);
 #endif
-      priority = status? LOG_ALERT : errnum? LOG_ERR : LOG_INFO;
-
-      if (errnum > 0)
-        {
-         char *msg;
-         
-         xalloca(msg, char *, strlen (message) + 5);
+      priority = (errfp == stderr) ? LOG_ERR : LOG_INFO;
 
-         strcpy (msg, message);
-         strcat (msg, ": %m");
-
-         errno = errnum;
-#ifdef HAVE_VSYSLOG
-         vsyslog (priority, msg, args);
-#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
-       }
-      else
-        {
 #ifdef HAVE_VSYSLOG
-         vsyslog (priority, message, args);
+      vsyslog (priority, message, args);
 #else
-         {
+      {
          char *a1 = va_arg(args, char *);
          char *a2 = va_arg(args, char *);
          char *a3 = va_arg(args, char *);
@@ -185,9 +151,8 @@ error (status, errnum, message, va_alist)
          char *a7 = va_arg(args, char *);
          char *a8 = va_arg(args, char *);
          syslog (priority, message, a1, a2, a3, a4, a5, a6, a7, a8);
-         }
+      }
 #endif
-       }
 
 #ifdef VA_START
       va_end(args);
@@ -220,30 +185,17 @@ error (status, errnum, message, va_alist)
 #else
       fprintf (errfp, message, a1, a2, a3, a4, a5, a6, a7, a8);
 #endif
-
-      if (errnum && errnum != -1) {
-       char *tmps = strerror(errnum);
-       if (tmps) {
-         fprintf (errfp, ": %s", tmps);
-       }
-       else {
-         fprintf (errfp, _(": Error %d"), errnum);
-       }
-      }
-      putc ('\n', errfp);
       fflush (errfp);
     }
   ++error_message_count;
-  if (status)
-    exit (status);
 }
 \f
 /*
- * Calling error_init(1) causes error_build and error_complete to write
+ * Calling report_init(1) causes error_build and error_complete to write
  * to errfp without buffering.  This is needed for the ticker dots to
  * work correctly.
  */
-void error_init(int mode)
+void report_init(int mode)
 {
     switch(mode)
     {
@@ -271,17 +223,17 @@ void error_init(int mode)
    format string with optional args, to the existing error message (which may
    be empty.)  The completed error message is finally printed (and reset to
    empty) by calling error_complete().
-   If an intervening call to error() occurs when a partially constructed
+   If an intervening call to report() occurs when a partially constructed
    message exists, then, in an attempt to keep the messages in their proper
    sequence, the partial message will be printed as-is (with a trailing 
-   newline) before error() prints its message. */
+   newline) before report() prints its message. */
 /* VARARGS */
 
 void
 #ifdef HAVE_STDARG_H
-error_build (const char *message, ...)
+report_build (FILE *errfp, const char *message, ...)
 #else
-error_build (message, va_alist)
+report_build (FILE *errfp, message, va_alist)
      const char *message;
      va_dcl
 #endif
@@ -331,7 +283,7 @@ error_build (message, va_alist)
   if (partial_message_size_used >= partial_message_size)
     {
       partial_message_size_used = 0;
-      error (PS_UNDEFINED, 0, _("partial error message buffer overflow"));
+      report (stderr, _("partial error message buffer overflow"));
     }
 #endif
   va_end (args);
@@ -359,7 +311,7 @@ error_build (message, va_alist)
   if ((partial_message_size_used = strlen (partial_message)) >= partial_message_size)
     {
       partial_message_size_used = 0;
-      error (PS_UNDEFINED, 0, _("partial error message buffer overflow"));
+      report (stderr, _("partial error message buffer overflow"));
     }
 #endif
 #endif
@@ -379,11 +331,9 @@ error_build (message, va_alist)
 
 void
 #ifdef HAVE_STDARG_H
-error_complete (int status, int errnum, const char *message, ...)
+report_complete (FILE *errfp, const char *message, ...)
 #else
-error_complete (status, errnum, message, va_alist)
-     int status;
-     int errnum;
+report_complete (FILE *errfp, message, va_alist)
      const char *message;
      va_dcl
 #endif
@@ -433,7 +383,7 @@ error_complete (status, errnum, message, va_alist)
   if (partial_message_size_used >= partial_message_size)
     {
       partial_message_size_used = 0;
-      error (PS_UNDEFINED, 0, _("partial error message buffer overflow"));
+      report (stderr, _("partial error message buffer overflow"));
     }
 #endif
   va_end (args);
@@ -461,7 +411,7 @@ error_complete (status, errnum, message, va_alist)
   if ((partial_message_size_used = strlen (partial_message)) >= partial_message_size)
     {
       partial_message_size_used = 0;
-      error (PS_UNDEFINED, 0, _("partial error message buffer overflow"));
+      report (stderr, _("partial error message buffer overflow"));
     }
 #endif
 #endif
@@ -472,20 +422,12 @@ error_complete (status, errnum, message, va_alist)
   if (use_stderr)
     {
       fputs(partial_message, errfp);
-
-      if (errnum)
-       fprintf (errfp, ": %s", strerror (errnum));
-
-      putc ('\n', errfp);
       fflush (errfp);
 
       ++error_message_count;
-
-      if (status)
-         exit(status);
     }
   else
-    error (status, errnum, "%s", partial_message);
+    report(errfp, "%s", partial_message);
 }
 \f
 /* Sometimes we want to have at most one error per line.  This
@@ -494,11 +436,10 @@ int error_one_per_line;
 
 void
 #ifdef HAVE_STDARG_H
-error_at_line (int status, int errnum, const char *file_name,
+report_at_line (FILE *errfp, int errnum, const char *file_name,
               unsigned int line_number, const char *message, ...)
 #else
-error_at_line (status, errnum, file_name, line_number, message, va_alist)
-     int status;
+report_at_line (FILE *errfp, errnum, file_name, line_number, message, va_alist)
      int errnum;
      const char *file_name;
      unsigned int line_number;
@@ -557,6 +498,4 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist)
     fprintf (errfp, ": %s", strerror (errnum));
   putc ('\n', errfp);
   fflush (errfp);
-  if (status)
-    exit (status);
 }