/* 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
/* 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, e.g. longjmp(3), but it must not return to adios().
+ * If it does then it's a bug and adios() will abort(3) as callers do
+ * not expect execution to continue. */
advertise (what, NULL, fmt, ap);
va_end(ap);
done (1);
advertise (what, NULL, fmt, ap);
va_end(ap);
done (1);
advertise (const char *what, char *tail, const char *fmt, va_list ap)
{
int eindex = errno;
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;
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) {
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) {