| /* See LICENSE file for copyright and license details. */ |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "../util.h" |
| |
| char *argv0; |
| |
| static void xvprintf(const char *, va_list); |
| |
| void |
| eprintf(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| xvprintf(fmt, ap); |
| va_end(ap); |
| |
| exit(1); |
| } |
| |
| void |
| enprintf(int status, const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| xvprintf(fmt, ap); |
| va_end(ap); |
| |
| exit(status); |
| } |
| |
| void |
| weprintf(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| xvprintf(fmt, ap); |
| va_end(ap); |
| } |
| |
| void |
| xvprintf(const char *fmt, va_list ap) |
| { |
| if (argv0 && strncmp(fmt, "usage", strlen("usage"))) |
| fprintf(stderr, "%s: ", argv0); |
| |
| vfprintf(stderr, fmt, ap); |
| |
| if (fmt[0] && fmt[strlen(fmt)-1] == ':') { |
| fputc(' ', stderr); |
| perror(NULL); |
| } |
| } |