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