err: actually implement replacement versions!
[ccan] / ccan / err / err.c
1 #include "err.h"
2
3 #if !HAVE_ERR_H
4 #include <stdarg.h>
5 #include <stdio.h>
6 #include <errno.h>
7 #include <string.h>
8 #include <stdlib.h>
9
10 static const char *progname = "unknown program";
11
12 void err_set_progname(const char *name)
13 {
14         progname = name;
15 }
16
17 void NORETURN err(int eval, const char *fmt, ...)
18 {
19         int err_errno = errno;
20         va_list ap;
21
22         fprintf(stderr, "%s: ", progname);
23         va_start(ap, fmt);
24         vfprintf(stderr, fmt, ap);
25         va_end(ap);
26         fprintf(stderr, ": %s\n", strerror(err_errno));
27         exit(eval);
28 }
29
30 void NORETURN errx(int eval, const char *fmt, ...)
31 {
32         va_list ap;
33
34         fprintf(stderr, "%s: ", progname);
35         va_start(ap, fmt);
36         vfprintf(stderr, fmt, ap);
37         va_end(ap);
38         fprintf(stderr, "\n");
39         exit(eval);
40 }
41
42 void warn(const char *fmt, ...)
43 {
44         int err_errno = errno;
45         va_list ap;
46
47         fprintf(stderr, "%s: ", progname);
48         va_start(ap, fmt);
49         vfprintf(stderr, fmt, ap);
50         va_end(ap);
51         fprintf(stderr, ": %s\n", strerror(err_errno));
52 }
53
54 void warnx(const char *fmt, ...)
55 {
56         va_list ap;
57
58         fprintf(stderr, "%s: ", progname);
59         va_start(ap, fmt);
60         vfprintf(stderr, fmt, ap);
61         va_end(ap);
62         fprintf(stderr, "\n");
63 }
64 #endif