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