]>
diplodocus.org Git - nmh/blob - sbr/error.c
3 * error.c -- main error handling routines
5 * This code is Copyright (c) 2002, by the authors of nmh. See the
6 * COPYRIGHT file in the root directory of the nmh distribution for
7 * complete copyright information.
12 #include <sys/types.h>
17 * print out error message
20 advise (char *what
, char *fmt
, ...)
25 advertise (what
, NULL
, fmt
, ap
);
31 * print out error message and exit
34 adios (char *what
, char *fmt
, ...)
39 advertise (what
, NULL
, fmt
, ap
);
49 admonish (char *what
, char *fmt
, ...)
54 advertise (what
, "continuing...", fmt
, ap
);
60 * main routine for printing error messages.
63 advertise (char *what
, char *tail
, char *fmt
, va_list ap
)
66 char buffer
[BUFSIZ
], err
[BUFSIZ
];
67 struct iovec iob
[20], *iov
;
74 if (invo_name
&& *invo_name
) {
75 iov
->iov_len
= strlen (iov
->iov_base
= invo_name
);
77 iov
->iov_len
= strlen (iov
->iov_base
= ": ");
81 vsnprintf (buffer
, sizeof(buffer
), fmt
, ap
);
82 iov
->iov_len
= strlen (iov
->iov_base
= buffer
);
86 iov
->iov_len
= strlen (iov
->iov_base
= " ");
88 iov
->iov_len
= strlen (iov
->iov_base
= what
);
90 iov
->iov_len
= strlen (iov
->iov_base
= ": ");
93 if (!(iov
->iov_base
= strerror (eindex
))) {
94 /* this shouldn't happen, but we'll test for it just in case */
95 snprintf (err
, sizeof(err
), "Error %d", eindex
);
98 iov
->iov_len
= strlen (iov
->iov_base
);
102 iov
->iov_len
= strlen (iov
->iov_base
= ", ");
104 iov
->iov_len
= strlen (iov
->iov_base
= tail
);
107 iov
->iov_len
= strlen (iov
->iov_base
= "\n");
109 writev (fileno (stderr
), iob
, iov
- iob
);