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