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