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