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
22 static inline void
err(int eval,const char * fmt,...)23 err(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
43 static inline void
errx(int eval,const char * fmt,...)44 errx(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
56 static inline void
warn(const char * fmt,...)57 warn(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
71 static inline void
warnx(const char * fmt,...)72 warnx(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