1#include <err.h>
2#include <stdio.h>
3#include <stdarg.h>
4#include <stdlib.h>
5
6extern char *__progname;
7
8void 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
18void 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
25_Noreturn void verr(int status, const char *fmt, va_list ap)
26{
27	vwarn(fmt, ap);
28	exit(status);
29}
30
31_Noreturn void verrx(int status, const char *fmt, va_list ap)
32{
33	vwarnx(fmt, ap);
34	exit(status);
35}
36
37void warn(const char *fmt, ...)
38{
39	va_list ap;
40	va_start(ap, fmt);
41	vwarn(fmt, ap);
42	va_end(ap);
43}
44
45void warnx(const char *fmt, ...)
46{
47	va_list ap;
48	va_start(ap, fmt);
49	vwarnx(fmt, ap);
50	va_end(ap);
51}
52
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
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