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 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 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 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 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