1 /* SPDX-License-Identifier: Apache-2.0 */
2
3 #ifndef CPER_LOG_H
4 #define CPER_LOG_H
5
6 #include <stdarg.h>
7
8 #ifndef CPER_NO_STDIO
9 #include <stdio.h>
10 #endif
11
12 enum {
13 CPER_LOG_NONE,
14 CPER_LOG_STDIO,
15 CPER_LOG_CUSTOM,
16 } log_type = CPER_LOG_STDIO;
17
18 static void (*log_custom_fn)(const char *, va_list);
19
cper_print_log(const char * fmt,...)20 void cper_print_log(const char *fmt, ...)
21 {
22 va_list ap;
23
24 va_start(ap, fmt);
25
26 switch (log_type) {
27 case CPER_LOG_NONE:
28 break;
29 case CPER_LOG_STDIO:
30 #ifndef CPER_NO_STDIO
31 vfprintf(stderr, fmt, ap);
32 fputs("\n", stderr);
33 #endif
34 break;
35 case CPER_LOG_CUSTOM:
36 log_custom_fn(fmt, ap);
37 break;
38 }
39
40 va_end(ap);
41 }
42
cper_set_log_stdio(void)43 void cper_set_log_stdio(void)
44 {
45 log_type = CPER_LOG_STDIO;
46 }
47
cper_set_log_custom(void (* fn)(const char *,va_list))48 void cper_set_log_custom(void (*fn)(const char *, va_list))
49 {
50 log_type = CPER_LOG_CUSTOM;
51 log_custom_fn = fn;
52 }
53
54 #endif /* CPER_LOG_H */
55