diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/gnunet_common.h | 62 |
1 files changed, 59 insertions, 3 deletions
diff --git a/src/include/gnunet_common.h b/src/include/gnunet_common.h index f4844821c..6b3ffe2af 100644 --- a/src/include/gnunet_common.h +++ b/src/include/gnunet_common.h | |||
@@ -138,6 +138,7 @@ typedef int (*GNUNET_FileNameCallback) (void *cls, const char *filename); | |||
138 | */ | 138 | */ |
139 | enum GNUNET_ErrorType | 139 | enum GNUNET_ErrorType |
140 | { | 140 | { |
141 | GNUNET_ERROR_TYPE_UNSPECIFIED = -1, | ||
141 | GNUNET_ERROR_TYPE_NONE = 0, | 142 | GNUNET_ERROR_TYPE_NONE = 0, |
142 | GNUNET_ERROR_TYPE_ERROR = 1, | 143 | GNUNET_ERROR_TYPE_ERROR = 1, |
143 | GNUNET_ERROR_TYPE_WARNING = 2, | 144 | GNUNET_ERROR_TYPE_WARNING = 2, |
@@ -161,6 +162,15 @@ typedef void (*GNUNET_Logger) (void *cls, enum GNUNET_ErrorType kind, | |||
161 | const char *component, const char *date, | 162 | const char *component, const char *date, |
162 | const char *message); | 163 | const char *message); |
163 | 164 | ||
165 | |||
166 | /** | ||
167 | * Number of log calls to ignore. | ||
168 | */ | ||
169 | extern unsigned int skip_log; | ||
170 | #if !defined(GNUNET_CULL_LOGGING) | ||
171 | int | ||
172 | GNUNET_get_log_call_status (int caller_level, const char *comp, const char *file, const char *function, int line); | ||
173 | #endif | ||
164 | /** | 174 | /** |
165 | * Main log function. | 175 | * Main log function. |
166 | * | 176 | * |
@@ -169,9 +179,29 @@ typedef void (*GNUNET_Logger) (void *cls, enum GNUNET_ErrorType kind, | |||
169 | * @param ... arguments for format string | 179 | * @param ... arguments for format string |
170 | */ | 180 | */ |
171 | void | 181 | void |
172 | GNUNET_log (enum GNUNET_ErrorType kind, const char *message, ...); | 182 | GNUNET_log_nocheck (enum GNUNET_ErrorType kind, const char *message, ...); |
173 | 183 | ||
184 | /* from glib */ | ||
185 | #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) | ||
186 | #define _GNUNET_BOOLEAN_EXPR(expr) \ | ||
187 | __extension__ ({ \ | ||
188 | int _gnunet_boolean_var_; \ | ||
189 | if (expr) \ | ||
190 | _gnunet_boolean_var_ = 1; \ | ||
191 | else \ | ||
192 | _gnunet_boolean_var_ = 0; \ | ||
193 | _gnunet_boolean_var_; \ | ||
194 | }) | ||
195 | #define GN_LIKELY(expr) (__builtin_expect (_GNUNET_BOOLEAN_EXPR(expr), 1)) | ||
196 | #define GN_UNLIKELY(expr) (__builtin_expect (_GNUNET_BOOLEAN_EXPR(expr), 0)) | ||
197 | #else | ||
198 | #define GN_LIKELY(expr) (expr) | ||
199 | #define GN_UNLIKELY(expr) (expr) | ||
200 | #endif | ||
174 | 201 | ||
202 | #if !defined(GNUNET_LOG_CALL_STATUS) | ||
203 | #define GNUNET_LOG_CALL_STATUS -1 | ||
204 | #endif | ||
175 | 205 | ||
176 | /** | 206 | /** |
177 | * Log function that specifies an alternative component. | 207 | * Log function that specifies an alternative component. |
@@ -183,9 +213,35 @@ GNUNET_log (enum GNUNET_ErrorType kind, const char *message, ...); | |||
183 | * @param ... arguments for format string | 213 | * @param ... arguments for format string |
184 | */ | 214 | */ |
185 | void | 215 | void |
186 | GNUNET_log_from (enum GNUNET_ErrorType kind, const char *comp, | 216 | GNUNET_log_from_nocheck (enum GNUNET_ErrorType kind, const char *comp, |
187 | const char *message, ...); | 217 | const char *message, ...); |
188 | 218 | ||
219 | #if !defined(GNUNET_CULL_LOGGING) | ||
220 | #define GNUNET_log_from(kind,comp,...) do { int log_line = __LINE__;\ | ||
221 | static int log_call_enabled = GNUNET_LOG_CALL_STATUS;\ | ||
222 | if (GN_UNLIKELY(log_call_enabled == -1))\ | ||
223 | log_call_enabled = GNUNET_get_log_call_status ((kind) & (~GNUNET_ERROR_TYPE_BULK), comp, __FILE__, __FUNCTION__, log_line);\ | ||
224 | if (GN_UNLIKELY(skip_log > 0)) {skip_log--;}\ | ||
225 | else {\ | ||
226 | if (GN_UNLIKELY(log_call_enabled))\ | ||
227 | GNUNET_log_from_nocheck (kind, comp, __VA_ARGS__);\ | ||
228 | }\ | ||
229 | } while (0) | ||
230 | |||
231 | #define GNUNET_log(kind,...) do { int log_line = __LINE__;\ | ||
232 | static int log_call_enabled = GNUNET_LOG_CALL_STATUS;\ | ||
233 | if (GN_UNLIKELY(log_call_enabled == -1))\ | ||
234 | log_call_enabled = GNUNET_get_log_call_status ((kind) & (~GNUNET_ERROR_TYPE_BULK), NULL, __FILE__, __FUNCTION__, log_line);\ | ||
235 | if (GN_UNLIKELY(skip_log > 0)) {skip_log--;}\ | ||
236 | else {\ | ||
237 | if (GN_UNLIKELY(log_call_enabled))\ | ||
238 | GNUNET_log_nocheck (kind, __VA_ARGS__);\ | ||
239 | }\ | ||
240 | } while (0) | ||
241 | #else | ||
242 | #define GNUNET_log(...) | ||
243 | #define GNUNET_log_from(...) | ||
244 | #endif | ||
189 | 245 | ||
190 | /** | 246 | /** |
191 | * Ignore the next n calls to the log function. | 247 | * Ignore the next n calls to the log function. |