]> diplodocus.org Git - nmh/blobdiff - sbr/error.c
Try to fix Encoded parameter value test on FreeBSD10 buildbot.
[nmh] / sbr / error.c
index 5dc84e87a438ca15b8570fa64fb6a3d4ff208605..1796736c0fc76ec0a8c41108af78af57aa7bd5ec 100644 (file)
@@ -29,9 +29,7 @@ advise (const char *what, const char *fmt, ...)
 /* adios calls advertise() with no tail to print fmt, and perhaps what,
  * to stderr, and "ends" the program with an error exit status.  The
  * route to exit is via the done function pointer and may not be
- * straightforward.
- * FIXME: Document if this function can ever return.  If not, perhaps an
- * abort(3) at the end of the routine would make that more clear. */
+ * straightforward. */
 void
 adios (const char *what, const char *fmt, ...)
 {
@@ -40,6 +38,8 @@ adios (const char *what, const char *fmt, ...)
     va_start(ap, fmt);
     advertise (what, NULL, fmt, ap);
     va_end(ap);
+    /* done(), by default, calls exit(). So this function, with that
+       default, will never return. */
     done (1);
 }
 
@@ -69,8 +69,9 @@ void
 advertise (const char *what, char *tail, const char *fmt, va_list ap)
 {
     int        eindex = errno;
-    char buffer[BUFSIZ], errbuf[BUFSIZ], *err;
-    struct iovec iob[20], *iov;
+    char buffer[NMH_BUFSIZ], errbuf[NMH_BUFSIZ], *err;
+    struct iovec iob[10], *iov;
+    size_t niov;
 
     iov = iob;
 
@@ -112,9 +113,12 @@ advertise (const char *what, char *tail, const char *fmt, va_list ap)
 #undef ADD_LITERAL
 #undef ADD_VAR
 
+    niov = iov - iob;
+    assert(niov <= DIM(iob));
+
     fflush (stdout);
     fflush (stderr);
-    if (writev (fileno (stderr), iob, iov - iob) < 0) {
+    if (writev(fileno(stderr), iob, niov) == -1) {
         snprintf(buffer, sizeof buffer, "%s: write stderr failed: %d\n",
             invo_name && *invo_name ? invo_name : "nmh", errno);
         if (write(2, buffer, strlen(buffer)) == -1) {