]> Pileus Git - ~andy/fetchmail/blobdiff - report.c
Better skip handling.
[~andy/fetchmail] / report.c
index 837aeb3fdf07b6165f86c2f7be0e22083556b31e..3947eb235cac3ef05c42f8371243b02bee1f5765 100644 (file)
--- a/report.c
+++ b/report.c
@@ -58,7 +58,7 @@ void exit ();
 #define MALLOC(n)      xmalloc(n)      
 #define REALLOC(n,s)   xrealloc(n,s)   
 
-/* If NULL, error will flush stdout, then print on stderr the program
+/* If NULL, error will flush stderr, then print on stderr the program
    name, a colon and a space.  Otherwise, error will call this
    function without parameters instead.  */
 void (*error_print_progname) (
@@ -77,7 +77,6 @@ static unsigned int use_syslog;
 /* This variable is incremented each time `error' is called.  */
 unsigned int error_message_count;
 
-
 #ifdef _LIBC
 /* In the GNU C library, there is a predefined variable for this.  */
 
@@ -106,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
@@ -129,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)
@@ -140,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 *);
@@ -183,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);
@@ -198,60 +165,47 @@ error (status, errnum, message, va_alist)
        (*error_print_progname) ();
       else
        {
-         fflush (stdout);
+         fflush (errfp);
          if ( *message == '\n' )
            {
-             fputc( '\n', stderr );
+             fputc( '\n', errfp );
              ++message;
            }
-         fprintf (stderr, "%s: ", program_name);
+         fprintf (errfp, "%s: ", program_name);
        }
 
 #ifdef VA_START
       VA_START (args, message);
 # if HAVE_VPRINTF || _LIBC
-      vfprintf (stderr, message, args);
+      vfprintf (errfp, message, args);
 # else
-      _doprnt (message, args, stderr);
+      _doprnt (message, args, errfp);
 # endif
       va_end (args);
 #else
-      fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
+      fprintf (errfp, message, a1, a2, a3, a4, a5, a6, a7, a8);
 #endif
-
-      if (errnum && errnum != -1) {
-       char *tmps = strerror(errnum);
-       if (tmps) {
-         fprintf (stderr, ": %s", tmps);
-       }
-       else {
-         fprintf (stderr, _(": Error %d"), errnum);
-       }
-      }
-      putc ('\n', stderr);
-      fflush (stderr);
+      fflush (errfp);
     }
   ++error_message_count;
-  if (status)
-    exit (status);
 }
 \f
 /*
- * Calling error_init(1) causes error_build and error_complete to write
- * to stderr without buffering.  This is needed for the ticker dots to
+ * 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)
     {
-    case 0:                    /* stderr, buffered */
+    case 0:                    /* errfp, buffered */
     default:
        use_stderr = FALSE;
        use_syslog = FALSE;
        break;
 
-    case 1:                    /* stderr, unbuffered */
+    case 1:                    /* errfp, unbuffered */
        use_stderr = TRUE;
        use_syslog = FALSE;
        break;
@@ -269,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
@@ -329,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);
@@ -357,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
@@ -365,7 +319,7 @@ error_build (message, va_alist)
   if (use_stderr && partial_message_size_used != 0)
     {
       partial_message_size_used = 0;
-      fputs(partial_message, stderr);
+      fputs(partial_message, errfp);
     }
 }
 \f
@@ -377,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
@@ -431,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);
@@ -459,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
@@ -469,21 +421,13 @@ error_complete (status, errnum, message, va_alist)
 
   if (use_stderr)
     {
-      fputs(partial_message, stderr);
-
-      if (errnum)
-       fprintf (stderr, ": %s", strerror (errnum));
-
-      putc ('\n', stderr);
-      fflush (stderr);
+      fputs(partial_message, 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
@@ -492,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;
@@ -526,35 +469,33 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist)
     (*error_print_progname) ();
   else
     {
-      fflush (stdout);
+      fflush (errfp);
       if ( *message == '\n' )
        {
-         fputc( '\n', stderr );
+         fputc( '\n', errfp );
          ++message;
        }
-      fprintf (stderr, "%s:", program_name);
+      fprintf (errfp, "%s:", program_name);
     }
 
   if (file_name != NULL)
-    fprintf (stderr, "%s:%d: ", file_name, line_number);
+    fprintf (errfp, "%s:%d: ", file_name, line_number);
 
 #ifdef VA_START
   VA_START (args, message);
 # if HAVE_VPRINTF || _LIBC
-  vfprintf (stderr, message, args);
+  vfprintf (errfp, message, args);
 # else
-  _doprnt (message, args, stderr);
+  _doprnt (message, args, errfp);
 # endif
   va_end (args);
 #else
-  fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
+  fprintf (errfp, message, a1, a2, a3, a4, a5, a6, a7, a8);
 #endif
 
   ++error_message_count;
   if (errnum)
-    fprintf (stderr, ": %s", strerror (errnum));
-  putc ('\n', stderr);
-  fflush (stderr);
-  if (status)
-    exit (status);
+    fprintf (errfp, ": %s", strerror (errnum));
+  putc ('\n', errfp);
+  fflush (errfp);
 }