Add debian directory
[mspang/inapt.git] / util.h
1 #ifndef CEO_UTIL_H
2 #define CEO_UTIL_H
3
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <stdarg.h>
8 #include <syslog.h>
9 #include <sys/types.h>
10 #include <dirent.h>
11
12 #ifdef __GNUC__
13 #define NORETURN __attribute__((__noreturn__))
14 #define PRINTF_LIKE(extra) __attribute__((format(printf, extra+1, extra+2)))
15 #else
16 #define NORETURN
17 #define PRINTF_LIKE(extra)
18 #endif
19
20 PRINTF_LIKE(0) NORETURN void fatal(const char *, ...);
21 PRINTF_LIKE(0) NORETURN void fatalpe(const char *, ...);
22 PRINTF_LIKE(0) NORETURN void badconf(const char *, ...);
23 PRINTF_LIKE(0) NORETURN void deny(const char *, ...);
24 PRINTF_LIKE(0) void error(const char *, ...);
25 PRINTF_LIKE(0) void warn(const char *, ...);
26 PRINTF_LIKE(0) void notice(const char *, ...);
27 PRINTF_LIKE(0) void debug(const char *, ...);
28 PRINTF_LIKE(1) void debugn(int level, const char *, ...);
29 PRINTF_LIKE(0) void errorpe(const char *, ...);
30 PRINTF_LIKE(0) void warnpe(const char *, ...);
31
32 static inline void *xmalloc(size_t size) {
33     void *alloc = malloc(size);
34
35     if (alloc == NULL)
36         fatal("out of memory");
37
38     return alloc;
39 }
40
41 static inline void *xrealloc(void *ptr, size_t size) {
42     void *alloc = realloc(ptr, size);
43
44     if (alloc == NULL)
45         fatal("out of memory");
46
47     return alloc;
48 }
49
50 static inline void *xcalloc(size_t nmemb, size_t size) {
51     void *alloc = calloc(nmemb, size);
52
53     if (alloc == NULL)
54         fatal("out of memory");
55
56     return alloc;
57 }
58
59 static inline char *xstrdup(const char *s) {
60     char *dup = strdup(s);
61
62     if (dup == NULL)
63         fatal("out of memory");
64
65     return dup;
66 }
67
68 static inline char *xstrndup(const char *s, size_t n) {
69     char *dup = strndup(s, n);
70
71     if (dup == NULL)
72         fatal("out of memory");
73
74     return dup;
75 }
76
77 extern int debug_level;
78
79 #endif