1#include <err.h> 2#include <stdio.h> 3#include <stdarg.h> 4#include <stdlib.h> 5 6extern char *__progname; 7 8void vwarn(const char *fmt, va_list ap) 9{ 10 fprintf (stderr, "%s: ", __progname); 11 if (fmt) { 12 vfprintf(stderr, fmt, ap); 13 fputs (": ", stderr); 14 } 15 perror(0); 16} 17 18void vwarnx(const char *fmt, va_list ap) 19{ 20 fprintf (stderr, "%s: ", __progname); 21 if (fmt) vfprintf(stderr, fmt, ap); 22 putc('\n', stderr); 23} 24 25_Noreturn void verr(int status, const char *fmt, va_list ap) 26{ 27 vwarn(fmt, ap); 28 exit(status); 29} 30 31_Noreturn void verrx(int status, const char *fmt, va_list ap) 32{ 33 vwarnx(fmt, ap); 34 exit(status); 35} 36 37void warn(const char *fmt, ...) 38{ 39 va_list ap; 40 va_start(ap, fmt); 41 vwarn(fmt, ap); 42 va_end(ap); 43} 44 45void warnx(const char *fmt, ...) 46{ 47 va_list ap; 48 va_start(ap, fmt); 49 vwarnx(fmt, ap); 50 va_end(ap); 51} 52 53_Noreturn void err(int status, const char *fmt, ...) 54{ 55 va_list ap; 56 va_start(ap, fmt); 57 verr(status, fmt, ap); 58 va_end(ap); 59} 60 61_Noreturn void errx(int status, const char *fmt, ...) 62{ 63 va_list ap; 64 va_start(ap, fmt); 65 verrx(status, fmt, ap); 66 va_end(ap); 67} 68