X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ferror.c;h=1841ce4047379dc46db6cdb958f144ee64e6a11a;hp=7db8d18c790a89bdbed7d9406ba30a8607ee2da3;hb=HEAD;hpb=714b5c530ece27ea2835a313013f5b770163403c diff --git a/sbr/error.c b/sbr/error.c index 7db8d18..1841ce4 100644 --- a/sbr/error.c +++ b/sbr/error.c @@ -7,13 +7,8 @@ */ #include - -#ifdef HAVE_WRITEV -# include -# include -#endif - #include +#include /* @@ -34,14 +29,14 @@ advise(char *what, char *fmt, ...) ** print out error message and exit */ void -adios(char *what, char *fmt, ...) +adios(int status, char *what, char *fmt, ...) { va_list ap; va_start(ap, fmt); advertise(what, NULL, fmt, ap); va_end(ap); - done(1); + exit(status); } @@ -62,64 +57,24 @@ admonish(char *what, char *fmt, ...) /* ** 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()... +** 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) { 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; - } - 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); @@ -137,5 +92,4 @@ advertise(char *what, char *tail, char *fmt, va_list ap) if (tail) fprintf(stderr, ", %s", tail); fputc('\n', stderr); -#endif }