X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=report.c;h=86950dfdc6076af513ed99eccb101b5f32873b13;hb=9ff30b595fcce9126cb44c155449aa218fdcefc7;hp=0dbfdf6ee4d24102984fac0bffac436fbe350c5c;hpb=f7b666e1d4d1afd76f0696324f3d60e7de10de19;p=~andy%2Ffetchmail diff --git a/report.c b/report.c index 0dbfdf6e..86950dfd 100644 --- a/report.c +++ b/report.c @@ -114,6 +114,27 @@ 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, ...) @@ -258,8 +279,9 @@ error_build (message, va_alist) partial_message = xrealloc (partial_message, partial_message_size); } -#if defined(VA_START) && (HAVE_VSNPRINTF || _LIBC) +#if defined(VA_START) VA_START (args, message); +#if HAVE_VSNPRINTF || _LIBC for ( ; ; ) { n = vsnprintf (partial_message + partial_message_size_used, @@ -275,6 +297,16 @@ error_build (message, va_alist) partial_message_size += 512; partial_message = xrealloc (partial_message, partial_message_size); } +#else + partial_message_size_used += vsprintf (partial_message + partial_message_size_used, message, args); + + /* Attempt to catch memory overwrites... */ + if (partial_message_size_used >= partial_message_size) + { + partial_message_size_used = 0; + error (PS_UNDEFINED, 0, "partial error message buffer overflow"); + } +#endif va_end (args); #else #if HAVE_SNPRINTF @@ -348,8 +380,9 @@ error_complete (status, errnum, message, va_alist) partial_message = xrealloc (partial_message, partial_message_size); } -#if defined(VA_START) && (HAVE_VSNPRINTF || _LIBC) +#if defined(VA_START) VA_START (args, message); +#if HAVE_VSNPRINTF || _LIBC for ( ; ; ) { n = vsnprintf (partial_message + partial_message_size_used, @@ -365,6 +398,16 @@ error_complete (status, errnum, message, va_alist) partial_message_size += 512; partial_message = xrealloc (partial_message, partial_message_size); } +#else + partial_message_size_used += vsprintf (partial_message + partial_message_size_used, message, args); + + /* Attempt to catch memory overwrites... */ + if (partial_message_size_used >= partial_message_size) + { + partial_message_size_used = 0; + error (PS_UNDEFINED, 0, "partial error message buffer overflow"); + } +#endif va_end (args); #else #if HAVE_SNPRINTF @@ -396,23 +439,25 @@ error_complete (status, errnum, message, va_alist) #endif /* Finally... print it. */ - if (partial_message_size_used != 0) + partial_message_size_used = 0; + + if (use_stderr) { - partial_message_size_used = 0; - if (use_stderr) - { - fputs(partial_message, stderr); - if (errnum) - fprintf (stderr, ": %s", strerror (errnum)); - putc ('\n', stderr); - fflush (stderr); - ++error_message_count; - if (status) - exit(status); - } - else - error (status, errnum, "%s", partial_message); + fputs(partial_message, stderr); + + if (errnum) + fprintf (stderr, ": %s", strerror (errnum)); + + putc ('\n', stderr); + fflush (stderr); + + ++error_message_count; + + if (status) + exit(status); } + else + error (status, errnum, "%s", partial_message); } /* Sometimes we want to have at most one error per line. This