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, ...)
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,
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
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,
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
#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);
}
\f
/* Sometimes we want to have at most one error per line. This