Display broken packages when depedencies are unsolvable
[mspang/inapt.git] / util.cc
1 #include <unistd.h>
2 #include <sys/wait.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <stdarg.h>
6 #include <fcntl.h>
7 #include <syslog.h>
8 #include <errno.h>
9 #include <grp.h>
10 #include <pwd.h>
11
12 #include "util.h"
13
14 bool debug_enabled = false;
15
16 static void errmsg(int prio, const char *prefix, const char *fmt, va_list args) {
17     fprintf(stderr, "%s: ", prefix);
18     vfprintf(stderr, fmt, args);
19     fprintf(stderr, "\n");
20 }
21
22 static void errmsgpe(int prio, const char *prefix, const char *fmt, va_list args) {
23     fprintf(stderr, "%s: ", prefix);
24     vfprintf(stderr, fmt, args);
25     fprintf(stderr, ": %s\n", strerror(errno));
26 }
27
28 NORETURN static void die(int prio, const char *prefix, const char *msg, va_list args) {
29     errmsg(prio, prefix, msg, args);
30     exit(1);
31 }
32
33 NORETURN static void diepe(int prio, const char *prefix, const char *msg, va_list args) {
34     errmsgpe(prio, prefix, msg, args);
35     exit(1);
36 }
37
38 NORETURN void fatal(const char *msg, ...) {
39     va_list args;
40     va_start(args, msg);
41     die(LOG_CRIT, "fatal", msg, args);
42     va_end(args);
43 }
44
45 void error(const char *msg, ...) {
46     va_list args;
47     va_start(args, msg);
48     errmsg(LOG_ERR, "error", msg, args);
49     va_end(args);
50 }
51
52 void warn(const char *msg, ...) {
53     va_list args;
54     va_start(args, msg);
55     errmsg(LOG_WARNING, "warning", msg, args);
56     va_end(args);
57 }
58
59 void notice(const char *msg, ...) {
60     va_list args;
61     va_start(args, msg);
62     errmsg(LOG_NOTICE, "notice", msg, args);
63     va_end(args);
64 }
65
66 void debug(const char *msg, ...) {
67     va_list args;
68     va_start(args, msg);
69     if (debug_enabled)
70         errmsg(LOG_DEBUG, "debug", msg, args);
71     va_end(args);
72 }
73
74 NORETURN void deny(const char *msg, ...) {
75     va_list args;
76     va_start(args, msg);
77     die(LOG_ERR, "denied", msg, args);
78     va_end(args);
79 }
80
81 NORETURN void badconf(const char *msg, ...) {
82     va_list args;
83     va_start(args, msg);
84     die(LOG_CRIT, "configuration error", msg, args);
85     va_end(args);
86 }
87
88 NORETURN void fatalpe(const char *msg, ...) {
89     va_list args;
90     va_start(args, msg);
91     diepe(LOG_CRIT, "fatal", msg, args);
92     va_end(args);
93 }
94
95 void errorpe(const char *msg, ...) {
96     va_list args;
97     va_start(args, msg);
98     errmsgpe(LOG_ERR, "error", msg, args);
99     va_end(args);
100 }
101
102 void warnpe(const char *msg, ...) {
103     va_list args;
104     va_start(args, msg);
105     errmsgpe(LOG_WARNING, "warning", msg, args);
106     va_end(args);
107 }