X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ferror.c;h=1841ce4047379dc46db6cdb958f144ee64e6a11a;hp=6dc6995706dc20f23d67e59240bbf1fe5b01e252;hb=HEAD;hpb=5dd6771b28c257af405d7248639ed0e3bcdce38b diff --git a/sbr/error.c b/sbr/error.c index 6dc6995..1841ce4 100644 --- a/sbr/error.c +++ b/sbr/error.c @@ -1,142 +1,95 @@ - /* - * error.c -- main error handling routines - * - * This code is Copyright (c) 2002, by the authors of nmh. See the - * COPYRIGHT file in the root directory of the nmh distribution for - * complete copyright information. - */ +** error.c -- main error handling routines +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include - -#ifdef HAVE_WRITEV -# include -# include -#endif - #include +#include /* - * print out error message - */ +** print out error message +*/ void -advise (char *what, char *fmt, ...) +advise(char *what, char *fmt, ...) { - va_list ap; + va_list ap; - va_start(ap, fmt); - advertise (what, NULL, fmt, ap); - va_end(ap); + va_start(ap, fmt); + advertise(what, NULL, fmt, ap); + va_end(ap); } /* - * print out error message and exit - */ +** print out error message and exit +*/ void -adios (char *what, char *fmt, ...) +adios(int status, char *what, char *fmt, ...) { - va_list ap; + va_list ap; - va_start(ap, fmt); - advertise (what, NULL, fmt, ap); - va_end(ap); - done (1); + va_start(ap, fmt); + advertise(what, NULL, fmt, ap); + va_end(ap); + exit(status); } /* - * admonish the user - */ +** admonish the user +*/ void -admonish (char *what, char *fmt, ...) +admonish(char *what, char *fmt, ...) { - va_list ap; + va_list ap; - va_start(ap, fmt); - advertise (what, "continuing...", fmt, ap); - va_end(ap); + va_start(ap, fmt); + advertise(what, "continuing...", fmt, ap); + va_end(ap); } /* - * main routine for printing error messages. - * - * Use writev() if available, for slightly better performance. - * Why? Well, there are a couple of reasons. Primarily, it - * gives a smoother output... More importantly though, it's a - * sexy syscall()... - */ +** main routine for printing error messages. +** +** Until 2011-11-01, this routine used writev(). In order to remove +** ``sexy'' syscalls, in favor for mainstream programming, I removed +** it. But I want to preserve the following comment: +** +** Use writev() if available, for slightly better performance. +** Why? Well, there are a couple of reasons. Primarily, it +** gives a smoother output... More importantly though, it's a +** sexy syscall()... +** +** advertise() does *not* use writev() anymore, and that's good so. +** -- meillo@marmaro.de +*/ void -advertise (char *what, char *tail, char *fmt, va_list ap) +advertise(char *what, char *tail, char *fmt, va_list ap) { - int eindex = errno; - -#ifdef HAVE_WRITEV - char buffer[BUFSIZ], err[BUFSIZ]; - struct iovec iob[20], *iov; -#endif - - fflush (stdout); - -#ifdef HAVE_WRITEV - fflush (stderr); - iov = iob; - - if (invo_name && *invo_name) { - iov->iov_len = strlen (iov->iov_base = invo_name); - iov++; - iov->iov_len = strlen (iov->iov_base = ": "); - iov++; - } - - vsnprintf (buffer, sizeof(buffer), fmt, ap); - iov->iov_len = strlen (iov->iov_base = buffer); - iov++; - if (what) { - if (*what) { - iov->iov_len = strlen (iov->iov_base = " "); - iov++; - iov->iov_len = strlen (iov->iov_base = what); - iov++; - iov->iov_len = strlen (iov->iov_base = ": "); - iov++; - } - if (!(iov->iov_base = strerror (eindex))) { - /* this shouldn't happen, but we'll test for it just in case */ - snprintf (err, sizeof(err), "Error %d", eindex); - iov->iov_base = err; + int eindex = errno; + + fflush(stdout); + if (invo_name && *invo_name) + fprintf(stderr, "%s: ", invo_name); + vfprintf(stderr, fmt, ap); + + if (what) { + char *s; + + if (*what) + fprintf(stderr, " %s: ", what); + if ((s = strerror(eindex))) + fprintf(stderr, "%s", s); + else + fprintf(stderr, "Error %d", eindex); } - iov->iov_len = strlen (iov->iov_base); - iov++; - } - if (tail && *tail) { - iov->iov_len = strlen (iov->iov_base = ", "); - iov++; - iov->iov_len = strlen (iov->iov_base = tail); - iov++; - } - iov->iov_len = strlen (iov->iov_base = "\n"); - iov++; - writev (fileno (stderr), iob, iov - iob); -#else - if (invo_name && *invo_name) - fprintf (stderr, "%s: ", invo_name); - vfprintf (stderr, fmt, ap); - - if (what) { - char *s; - - if (*what) - fprintf (stderr, " %s: ", what); - if ((s = strerror(eindex))) - fprintf (stderr, "%s", s); - else - fprintf (stderr, "Error %d", eindex); - } - if (tail) - fprintf (stderr, ", %s", tail); - fputc ('\n', stderr); -#endif + if (tail) + fprintf(stderr, ", %s", tail); + fputc('\n', stderr); }