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, ...)
{
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);
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
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);
}