summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Minarik <minarik11@student.fiit.stuba.sk>2012-05-29 17:37:02 +0200
committerKristian Høgsberg <krh@bitplanet.net>2012-05-31 13:57:15 -0400
commit8e2a7867038ee6f536a56a0600d9e9bc777e2c31 (patch)
tree1d36bbb6ce6b82d927dc375217afeecaeb117dda /src
parentb858a1b87b6301dcad48025dcb54fc931664e068 (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.c6
-rw-r--r--src/wayland-client.h2
-rw-r--r--src/wayland-private.h4
-rw-r--r--src/wayland-server.c6
-rw-r--r--src/wayland-server.h2
-rw-r--r--src/wayland-util.c18
-rw-r--r--src/wayland-util.h3
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