1/*
2 * Public domain
3 * err.h compatibility shim
4 */
5
6#ifndef _COMPAT_ERR_H
7#define _COMPAT_ERR_H
8
9#if !defined(HAVE_ERR_H)
10
11#include <errno.h>
12#include <stdarg.h>
13#include <stdlib.h>
14#include <stdio.h>
15#include <string.h>
16
17#if defined(_MSC_VER)
18__declspec(noreturn)
19#else
20__attribute__((noreturn))
21#endif
22static inline void
23err(int eval, const char *fmt, ...)
24{
25	int sverrno = errno;
26	va_list ap;
27
28	va_start(ap, fmt);
29	if (fmt != NULL) {
30		vfprintf(stderr, fmt, ap);
31		fprintf(stderr, ": ");
32	}
33	va_end(ap);
34	fprintf(stderr, "%s\n", strerror(sverrno));
35	exit(eval);
36}
37
38#if defined(_MSC_VER)
39__declspec(noreturn)
40#else
41__attribute__((noreturn))
42#endif
43static inline void
44errx(int eval, const char *fmt, ...)
45{
46	va_list ap;
47
48	va_start(ap, fmt);
49	if (fmt != NULL)
50		vfprintf(stderr, fmt, ap);
51	va_end(ap);
52	fprintf(stderr, "\n");
53	exit(eval);
54}
55
56static inline void
57warn(const char *fmt, ...)
58{
59	int sverrno = errno;
60	va_list ap;
61
62	va_start(ap, fmt);
63	if (fmt != NULL) {
64		vfprintf(stderr, fmt, ap);
65		fprintf(stderr, ": ");
66	}
67	va_end(ap);
68	fprintf(stderr, "%s\n", strerror(sverrno));
69}
70
71static inline void
72warnx(const char *fmt, ...)
73{
74	va_list ap;
75
76	va_start(ap, fmt);
77	if (fmt != NULL)
78		vfprintf(stderr, fmt, ap);
79	va_end(ap);
80	fprintf(stderr, "\n");
81}
82
83#endif /* !defined(HAVE_ERR_H) */
84
85#endif /* _COMPAT_ERR_H */
86