enprintf.c (960B)
1 #include <stdarg.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 6 #include "../util.h" 7 8 char *argv0; 9 10 static void venprintf(int, const char *, va_list); 11 12 void 13 eprintf(const char *fmt, ...) 14 { 15 va_list ap; 16 17 va_start(ap, fmt); 18 venprintf(1, fmt, ap); 19 va_end(ap); 20 } 21 22 void 23 enprintf(int status, const char *fmt, ...) 24 { 25 va_list ap; 26 27 va_start(ap, fmt); 28 venprintf(status, fmt, ap); 29 va_end(ap); 30 } 31 32 void 33 venprintf(int status, const char *fmt, va_list ap) 34 { 35 if (strncmp(fmt, "usage", strlen("usage"))) 36 fprintf(stderr, "%s: ", argv0); 37 38 vfprintf(stderr, fmt, ap); 39 40 if (fmt[0] && fmt[strlen(fmt)-1] == ':') { 41 fputc(' ', stderr); 42 perror(NULL); 43 } 44 45 exit(status); 46 } 47 48 void 49 weprintf(const char *fmt, ...) 50 { 51 va_list ap; 52 53 if (strncmp(fmt, "usage", strlen("usage"))) 54 fprintf(stderr, "%s: ", argv0); 55 56 va_start(ap, fmt); 57 vfprintf(stderr, fmt, ap); 58 va_end(ap); 59 60 if (fmt[0] && fmt[strlen(fmt)-1] == ':') { 61 fputc(' ', stderr); 62 perror(NULL); 63 } 64 }