1 #include <err.h>
2 #include <stdio.h>
3 #include <stdarg.h>
4 #include <stdlib.h>
5
6 extern char *__progname;
7
vwarn(const char * fmt,va_list ap)8 void vwarn(const char *fmt, va_list ap)
9 {
10 fprintf (stderr, "%s: ", __progname);
11 if (fmt) {
12 vfprintf(stderr, fmt, ap);
13 fputs (": ", stderr);
14 }
15 perror(0);
16 }
17
vwarnx(const char * fmt,va_list ap)18 void vwarnx(const char *fmt, va_list ap)
19 {
20 fprintf (stderr, "%s: ", __progname);
21 if (fmt) vfprintf(stderr, fmt, ap);
22 putc('\n', stderr);
23 }
24
verr(int status,const char * fmt,va_list ap)25 _Noreturn void verr(int status, const char *fmt, va_list ap)
26 {
27 vwarn(fmt, ap);
28 exit(status);
29 }
30
verrx(int status,const char * fmt,va_list ap)31 _Noreturn void verrx(int status, const char *fmt, va_list ap)
32 {
33 vwarnx(fmt, ap);
34 exit(status);
35 }
36
warn(const char * fmt,...)37 void warn(const char *fmt, ...)
38 {
39 va_list ap;
40 va_start(ap, fmt);
41 vwarn(fmt, ap);
42 va_end(ap);
43 }
44
warnx(const char * fmt,...)45 void warnx(const char *fmt, ...)
46 {
47 va_list ap;
48 va_start(ap, fmt);
49 vwarnx(fmt, ap);
50 va_end(ap);
51 }
52
err(int status,const char * fmt,...)53 _Noreturn void err(int status, const char *fmt, ...)
54 {
55 va_list ap;
56 va_start(ap, fmt);
57 verr(status, fmt, ap);
58 va_end(ap);
59 }
60
errx(int status,const char * fmt,...)61 _Noreturn void errx(int status, const char *fmt, ...)
62 {
63 va_list ap;
64 va_start(ap, fmt);
65 verrx(status, fmt, ap);
66 va_end(ap);
67 }
68