Don't forget to flush
[public/pyceo-broken.git] / src / util.h
1 #ifndef CEO_UTIL_H
2 #define CEO_UTIL_H
3
4 #include <stdlib.h>
5 #include <string.h>
6 #include <stdarg.h>
7
8 #ifdef __GNUC__
9 #define NORETURN __attribute__((__noreturn__))
10 #else
11 #define NORETURN
12 #endif
13
14 #ifndef LOG_AUTHPRIV
15 #define LOG_AUTHPRIV LOG_AUTH
16 #endif
17
18 int spawnv(const char *path, char *const *argv);
19 void init_log(const char *ident, int option, int facility);
20
21 NORETURN void fatal(const char *, ...);
22 NORETURN void fatalpe(const char *, ...);
23 NORETURN void badconf(const char *, ...);
24 NORETURN void deny(const char *, ...);
25 void error(const char *, ...);
26 void warn(const char *, ...);
27 void notice(const char *, ...);
28 void errorpe(const char *, ...);
29 void warnpe(const char *, ...);
30 void logmsg(int, 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
60 static inline char *xstrdup(const char *s) {
61     char *dup = strdup(s);
62
63     if (dup == NULL)
64         fatal("out of memory");
65
66     return dup;
67 }
68
69 #endif