keyrouter: Fix wrong return value
[platform/core/uifw/libds-tizen.git] / src / libds / log.c
1 #include <error.h>
2 #include <stdarg.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <unistd.h>
7
8 #include <wayland-server.h>
9
10 #include "libds/log.h"
11
12 static bool colored = true;
13 static enum ds_log_level log_level = DS_ERR;
14
15 static const char *level_colors[] = {
16     [DS_SILENT] = "",
17     [DS_ERR] = "\x1B[1;31m",
18     [DS_INF] = "\x1B[1;34m",
19     [DS_DBG] = "\x1B[1;90m",
20 };
21
22 static const char *level_headers[] = {
23     [DS_SILENT] = "",
24     [DS_ERR] = "[ERROR]",
25     [DS_INF] = "[INFO]",
26     [DS_DBG] = "[DEBUG]",
27 };
28
29 static void log_stderr(enum ds_log_level level, const char *fmt, va_list args);
30 static void log_wl(const char *fmt, va_list args);
31
32 static ds_log_func_t log_callback = log_stderr;
33
34 WL_EXPORT void
35 ds_log_init(enum ds_log_level level, ds_log_func_t callback)
36 {
37     if (level < DS_LOG_LEVEL_LAST)
38         log_level = level;
39     if (callback)
40         log_callback = callback;
41
42     wl_log_set_handler_server(log_wl);
43 }
44
45 WL_EXPORT void
46 _ds_vlog(enum ds_log_level level, const char *fmt, va_list args)
47 {
48     log_callback(level, fmt, args);
49 }
50
51 WL_EXPORT void
52 _ds_log(enum ds_log_level level, const char *fmt, ...)
53 {
54     va_list args;
55
56     va_start(args, fmt);
57     log_callback(level, fmt, args);
58     va_end(args);
59 }
60
61 enum ds_log_level
62 ds_log_get_level(void)
63 {
64     return log_level;
65 }
66
67 static void
68 log_stderr(enum ds_log_level level, const char *fmt, va_list args)
69 {
70     bool colored_tty = false;
71     unsigned c;
72
73     if (level > log_level)
74         return;
75
76     c = (level < DS_LOG_LEVEL_LAST) ? level : DS_LOG_LEVEL_LAST - 1;
77
78     colored_tty = colored && isatty(STDERR_FILENO);
79     if (colored_tty)
80         fprintf(stderr, "%s", level_colors[c]);
81     else
82         fprintf(stderr, "%s ", level_headers[c]);
83
84     vfprintf(stderr, fmt, args);
85
86     if (colored_tty)
87         fprintf(stderr, "\x1B[0m");
88     fprintf(stderr, "\n");
89 }
90
91 static void
92 log_wl(const char *fmt, va_list args)
93 {
94     static char ds_fmt[1024];
95     int n;
96
97     n = snprintf(ds_fmt, sizeof(ds_fmt), "[wayland] %s", fmt);
98     if (n > 0 && ds_fmt[n - 1] == '\n')
99         ds_fmt[n - 1] = '\0';
100     _ds_vlog(DS_INF, ds_fmt, args);
101 }