1 #ifndef VLG_H
2 #define VLG_H 1
3
4 #include <vstr.h>
5 #include <stdarg.h>
6 #include <errno.h>
7
8 #include "date.h"
9
10 #define VLG__TM_SYSLOG_SZ 128
11
12 typedef struct Vlg
13 {
14 struct Vstr_base *out_vstr;
15 struct Vstr_base *sig_out_vstr;
16 const char *prog_name;
17 int syslog_fd;
18
19 time_t tm_time;
20 char tm_data[VLG__TM_SYSLOG_SZ];
21
22 time_t (*tm_get)(void);
23
24 unsigned int syslog_stream : 1;
25 unsigned int log_pid : 1;
26 unsigned int out_dbg : 2;
27 unsigned int daemon_mode : 1;
28 unsigned int log_prefix_console : 1;
29 } Vlg;
30
31 extern void vlg_init(void);
32 extern void vlg_exit(void);
33
34 extern Vlg *vlg_make(void);
35 extern void vlg_free(Vlg *);
36
37 extern void vlg_daemon(Vlg *, const char *);
38 extern void vlg_debug(Vlg *);
39 extern void vlg_undbg(Vlg *);
40
41 extern int vlg_pid_set(Vlg *, int);
42 extern int vlg_prefix_set(Vlg *, int);
43 extern void vlg_time_set(Vlg *vlg, time_t (*func)(void));
44
45 extern void vlg_pid_file(Vlg *, const char *);
46
47 extern int vlg_sc_fmt_add_all(Vstr_conf *);
48 extern void vlg_sc_bind_mount(const char *);
49
50 extern void vlg_vabort(Vlg *, const char *fmt, va_list )
51 VSTR__COMPILE_ATTR_FMT(2, 0);
52 extern void vlg_verr(Vlg *, int, const char *fmt, va_list )
53 VSTR__COMPILE_ATTR_FMT(3, 0);
54 extern void vlg_vwarn(Vlg *, const char *fmt, va_list )
55 VSTR__COMPILE_ATTR_FMT(2, 0);
56 extern void vlg_vinfo(Vlg *, const char *fmt, va_list )
57 VSTR__COMPILE_ATTR_FMT(2, 0);
58 extern void vlg_vdbg1(Vlg *, const char *fmt, va_list )
59 VSTR__COMPILE_ATTR_FMT(2, 0);
60 extern void vlg_vdbg2(Vlg *, const char *fmt, va_list )
61 VSTR__COMPILE_ATTR_FMT(2, 0);
62 extern void vlg_vdbg3(Vlg *, const char *fmt, va_list )
63 VSTR__COMPILE_ATTR_FMT(2, 0);
64
65 extern void vlg_abort(Vlg *, const char *fmt, ... )
66 VSTR__COMPILE_ATTR_FMT(2, 3);
67 extern void vlg_err(Vlg *, int, const char *fmt, ... )
68 VSTR__COMPILE_ATTR_FMT(3, 4);
69 extern void vlg_warn(Vlg *, const char *fmt, ... )
70 VSTR__COMPILE_ATTR_FMT(2, 3);
71 extern void vlg_info(Vlg *, const char *fmt, ... )
72 VSTR__COMPILE_ATTR_FMT(2, 3);
73 extern void vlg_dbg1(Vlg *, const char *fmt, ... )
74 VSTR__COMPILE_ATTR_FMT(2, 3);
75 extern void vlg_dbg2(Vlg *, const char *fmt, ... )
76 VSTR__COMPILE_ATTR_FMT(2, 3);
77 extern void vlg_dbg3(Vlg *, const char *fmt, ... )
78 VSTR__COMPILE_ATTR_FMT(2, 3);
79
80 extern void vlg_sig_abort(Vlg *, const char *fmt, ... )
81 VSTR__COMPILE_ATTR_FMT(2, 3);
82 extern void vlg_sig_err(Vlg *, int, const char *fmt, ... )
83 VSTR__COMPILE_ATTR_FMT(3, 4);
84 extern void vlg_sig_warn(Vlg *, const char *fmt, ... )
85 VSTR__COMPILE_ATTR_FMT(2, 3);
86 extern void vlg_sig_info(Vlg *, const char *fmt, ... )
87 VSTR__COMPILE_ATTR_FMT(2, 3);
88 extern void vlg_sig_dbg1(Vlg *, const char *fmt, ... )
89 VSTR__COMPILE_ATTR_FMT(2, 3);
90 extern void vlg_sig_dbg2(Vlg *, const char *fmt, ... )
91 VSTR__COMPILE_ATTR_FMT(2, 3);
92 extern void vlg_sig_dbg3(Vlg *, const char *fmt, ... )
93 VSTR__COMPILE_ATTR_FMT(2, 3);
94
95 #ifndef VLG_COMPILE_INLINE
96 # ifdef VSTR_AUTOCONF_NDEBUG
97 # define VLG_COMPILE_INLINE 1
98 # else
99 # define VLG_COMPILE_INLINE 0
100 # endif
101 #endif
102
103 #if defined(VSTR_AUTOCONF_HAVE_INLINE) && VLG_COMPILE_INLINE
vlg_dbg1(Vlg * vlg,const char * fmt,...)104 extern inline void vlg_dbg1(Vlg *vlg, const char *fmt, ... )
105 {
106 va_list ap;
107
108 if (vlg->out_dbg < 1)
109 return;
110
111 va_start(ap, fmt);
112 vlg_vdbg1(vlg, fmt, ap);
113 va_end(ap);
114 }
vlg_dbg2(Vlg * vlg,const char * fmt,...)115 extern inline void vlg_dbg2(Vlg *vlg, const char *fmt, ... )
116 {
117 va_list ap;
118
119 if (vlg->out_dbg < 2)
120 return;
121
122 va_start(ap, fmt);
123 vlg_vdbg2(vlg, fmt, ap);
124 va_end(ap);
125 }
vlg_dbg3(Vlg * vlg,const char * fmt,...)126 extern inline void vlg_dbg3(Vlg *vlg, const char *fmt, ... )
127 {
128 va_list ap;
129
130 if (vlg->out_dbg < 3)
131 return;
132
133 va_start(ap, fmt);
134 vlg_vdbg3(vlg, fmt, ap);
135 va_end(ap);
136 }
137 #endif
138
139
140 #define VLG_WARN_GOTO(label, fmt) do { \
141 vlg_warn fmt ; \
142 goto label ; \
143 } while (0)
144 #define VLG_WARN_RET(val, fmt) do { \
145 vlg_warn fmt ; \
146 return val ; \
147 } while (0)
148 #define VLG_WARN_RET_VOID(fmt) do { \
149 vlg_warn fmt ; \
150 return; \
151 } while (0)
152
153 #define VLG_WARNNOMEM_GOTO(label, fmt) do { \
154 errno = ENOMEM; \
155 vlg_warn fmt ; \
156 goto label ; \
157 } while (0)
158 #define VLG_WARNNOMEM_RET(val, fmt) do { \
159 errno = ENOMEM; \
160 vlg_warn fmt ; \
161 return val ; \
162 } while (0)
163
164 #define VLG_ERRNOMEM(fmt) do { \
165 errno = ENOMEM; \
166 vlg_err fmt ; \
167 } while (0)
168
169 #endif
170