Initial import from FreeBSD RELENG_4:
[dragonfly.git] / usr.bin / tconv / quit.c
1 /*
2  * quit.c
3  *
4  * By Ross Ridge
5  * Public Domain
6  * 92/02/01 07:30:14
7  *
8  * quit with a diagnostic message printed on stderr
9  *
10  */
11
12 #define NOTLIB
13 #include "defs.h"
14
15 #ifdef USE_SCCS_IDS
16 static const char SCCSid[] = "@(#) mytinfo quit.c 3.2 92/02/01 public domain, By Ross Ridge";
17 #endif
18
19 char *prg_name;
20
21 #if defined(USE_PROTOTYPES) && !defined(lint)
22 void (*cleanup)(int);
23 #else
24 void (*cleanup)();
25 #endif
26
27 /* PRINTFLIKE2 */
28 noreturn
29 #ifdef USE_STDARG
30 #ifdef USE_PROTOTYPES
31 void
32 quit(int e, char *fmt, ...)
33 #else
34 void quit(e, fmt)
35 int e;
36 char *fmt;
37 #endif
38 #else
39 void quit(va_alist)
40 va_dcl
41 #endif
42 {
43 #ifndef USE_STDARG
44         int e;
45         char *fmt;
46 #endif
47         va_list ap;
48
49 #ifdef USE_STDARG
50         va_start(ap, fmt);
51 #else
52         va_start(ap);
53         e = va_arg(ap, int);
54         fmt = va_arg(ap, char *);
55 #endif
56
57         (*cleanup)(e);
58
59         if (e != 0)
60                 fprintf(stderr, "%s: ", prg_name);
61 #ifdef USE_DOPRNT
62         _doprnt(fmt, ap, stderr);
63 #else
64         vfprintf(stderr, fmt, ap);
65 #endif
66         putc('\n', stderr);
67         if (e > 0 && e < sys_nerr) {
68                 fprintf(stderr, "%d - %s\n", e, sys_errlist[e]);
69         }
70         fflush(stderr);
71         exit(e);
72 }