1570af302Sopenharmony_ci#include <err.h>
2570af302Sopenharmony_ci#include <stdio.h>
3570af302Sopenharmony_ci#include <stdarg.h>
4570af302Sopenharmony_ci#include <stdlib.h>
5570af302Sopenharmony_ci
6570af302Sopenharmony_ciextern char *__progname;
7570af302Sopenharmony_ci
8570af302Sopenharmony_civoid vwarn(const char *fmt, va_list ap)
9570af302Sopenharmony_ci{
10570af302Sopenharmony_ci	fprintf (stderr, "%s: ", __progname);
11570af302Sopenharmony_ci	if (fmt) {
12570af302Sopenharmony_ci		vfprintf(stderr, fmt, ap);
13570af302Sopenharmony_ci		fputs (": ", stderr);
14570af302Sopenharmony_ci	}
15570af302Sopenharmony_ci	perror(0);
16570af302Sopenharmony_ci}
17570af302Sopenharmony_ci
18570af302Sopenharmony_civoid vwarnx(const char *fmt, va_list ap)
19570af302Sopenharmony_ci{
20570af302Sopenharmony_ci	fprintf (stderr, "%s: ", __progname);
21570af302Sopenharmony_ci	if (fmt) vfprintf(stderr, fmt, ap);
22570af302Sopenharmony_ci	putc('\n', stderr);
23570af302Sopenharmony_ci}
24570af302Sopenharmony_ci
25570af302Sopenharmony_ci_Noreturn void verr(int status, const char *fmt, va_list ap)
26570af302Sopenharmony_ci{
27570af302Sopenharmony_ci	vwarn(fmt, ap);
28570af302Sopenharmony_ci	exit(status);
29570af302Sopenharmony_ci}
30570af302Sopenharmony_ci
31570af302Sopenharmony_ci_Noreturn void verrx(int status, const char *fmt, va_list ap)
32570af302Sopenharmony_ci{
33570af302Sopenharmony_ci	vwarnx(fmt, ap);
34570af302Sopenharmony_ci	exit(status);
35570af302Sopenharmony_ci}
36570af302Sopenharmony_ci
37570af302Sopenharmony_civoid warn(const char *fmt, ...)
38570af302Sopenharmony_ci{
39570af302Sopenharmony_ci	va_list ap;
40570af302Sopenharmony_ci	va_start(ap, fmt);
41570af302Sopenharmony_ci	vwarn(fmt, ap);
42570af302Sopenharmony_ci	va_end(ap);
43570af302Sopenharmony_ci}
44570af302Sopenharmony_ci
45570af302Sopenharmony_civoid warnx(const char *fmt, ...)
46570af302Sopenharmony_ci{
47570af302Sopenharmony_ci	va_list ap;
48570af302Sopenharmony_ci	va_start(ap, fmt);
49570af302Sopenharmony_ci	vwarnx(fmt, ap);
50570af302Sopenharmony_ci	va_end(ap);
51570af302Sopenharmony_ci}
52570af302Sopenharmony_ci
53570af302Sopenharmony_ci_Noreturn void err(int status, const char *fmt, ...)
54570af302Sopenharmony_ci{
55570af302Sopenharmony_ci	va_list ap;
56570af302Sopenharmony_ci	va_start(ap, fmt);
57570af302Sopenharmony_ci	verr(status, fmt, ap);
58570af302Sopenharmony_ci	va_end(ap);
59570af302Sopenharmony_ci}
60570af302Sopenharmony_ci
61570af302Sopenharmony_ci_Noreturn void errx(int status, const char *fmt, ...)
62570af302Sopenharmony_ci{
63570af302Sopenharmony_ci	va_list ap;
64570af302Sopenharmony_ci	va_start(ap, fmt);
65570af302Sopenharmony_ci	verrx(status, fmt, ap);
66570af302Sopenharmony_ci	va_end(ap);
67570af302Sopenharmony_ci}
68