Home | History | Annotate | Line # | Download | only in openbsd-compat
      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