diff options
author | Martin Minarik <minarik11@student.fiit.stuba.sk> | 2012-05-29 17:37:02 +0200 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2012-05-31 13:57:15 -0400 |
commit | 8e2a7867038ee6f536a56a0600d9e9bc777e2c31 (patch) | |
tree | 1d36bbb6ce6b82d927dc375217afeecaeb117dda /src | |
parent | b858a1b87b6301dcad48025dcb54fc931664e068 (diff) |
Wayland: logging
The core libwayland libraries should not handle logging, only passing
the error messages to subscribed functions.
An application linked to libwayland-server or libwayland-client
will be able to set own functions (one per library) to handle error
messages.
Change in this series: make the wl_log return int, because
of compatibility with printf. It will return the number of bytes logged.
Diffstat (limited to 'src')
-rw-r--r-- | src/wayland-client.c | 6 | ||||
-rw-r--r-- | src/wayland-client.h | 2 | ||||
-rw-r--r-- | src/wayland-private.h | 4 | ||||
-rw-r--r-- | src/wayland-server.c | 6 | ||||
-rw-r--r-- | src/wayland-server.h | 2 | ||||
-rw-r--r-- | src/wayland-util.c | 18 | ||||
-rw-r--r-- | src/wayland-util.h | 3 |
7 files changed, 41 insertions, 0 deletions
diff --git a/src/wayland-client.c b/src/wayland-client.c index 1a24abf..ecedd99 100644 --- a/src/wayland-client.c +++ b/src/wayland-client.c @@ -589,3 +589,9 @@ wl_proxy_get_id(struct wl_proxy *proxy) { return proxy->object.id; } + +WL_EXPORT void +wl_log_set_handler_client(wl_log_func_t handler) +{ + wl_log_handler = handler; +} diff --git a/src/wayland-client.h b/src/wayland-client.h index 5c7fd2f..06dc6fe 100644 --- a/src/wayland-client.h +++ b/src/wayland-client.h @@ -96,6 +96,8 @@ uint32_t wl_display_get_global(struct wl_display *display, const char *interface, uint32_t version); +void wl_log_set_handler_client(wl_log_func_t handler); + #ifdef __cplusplus } #endif diff --git a/src/wayland-private.h b/src/wayland-private.h index 61b07a2..c7af179 100644 --- a/src/wayland-private.h +++ b/src/wayland-private.h @@ -105,4 +105,8 @@ wl_closure_print(struct wl_closure *closure, struct wl_object *target, int send) void wl_closure_destroy(struct wl_closure *closure); +extern wl_log_func_t wl_log_handler; + +void wl_log(const char *fmt, ...); + #endif diff --git a/src/wayland-server.c b/src/wayland-server.c index 6ccc097..9f07b88 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -1178,3 +1178,9 @@ wl_client_new_object(struct wl_client *client, interface, implementation, id, data); } + +WL_EXPORT void +wl_log_set_handler_server(wl_log_func_t handler) +{ + wl_log_handler = handler; +} diff --git a/src/wayland-server.h b/src/wayland-server.h index 731be00..b1962ea 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -418,6 +418,8 @@ wl_buffer_is_shm(struct wl_buffer *buffer); int wl_display_init_shm(struct wl_display *display); +void wl_log_set_handler_server(wl_log_func_t handler); + #ifdef __cplusplus } #endif diff --git a/src/wayland-util.c b/src/wayland-util.c index 7bf8924..eac7801 100644 --- a/src/wayland-util.c +++ b/src/wayland-util.c @@ -24,6 +24,7 @@ #include <stdlib.h> #include <stdint.h> #include <string.h> +#include <stdarg.h> #include "wayland-util.h" #include "wayland-private.h" @@ -270,3 +271,20 @@ wl_map_for_each(struct wl_map *map, wl_iterator_func_t func, void *data) for_each_helper(&map->client_entries, func, data); for_each_helper(&map->server_entries, func, data); } + +static void +wl_log_noop_handler(const char *fmt, va_list arg) +{ +} + +wl_log_func_t wl_log_handler = wl_log_noop_handler; + +void +wl_log(const char *fmt, ...) +{ + va_list argp; + + va_start(argp, fmt); + wl_log_handler(fmt, argp); + va_end(argp); +} diff --git a/src/wayland-util.h b/src/wayland-util.h index fa5c6c5..8447640 100644 --- a/src/wayland-util.h +++ b/src/wayland-util.h @@ -30,6 +30,7 @@ extern "C" { #include <math.h> #include <stddef.h> #include <inttypes.h> +#include <stdarg.h> /* GCC visibility */ #if defined(__GNUC__) && __GNUC__ >= 4 @@ -203,6 +204,8 @@ static inline wl_fixed_t wl_fixed_from_int(int i) return i * 256; } +typedef void (*wl_log_func_t)(const char *, va_list); + #ifdef __cplusplus } #endif |