[PATCH v2 1/2] Wayland: logging

Kristian Høgsberg hoegsberg at gmail.com
Thu May 31 10:31:35 PDT 2012


On Mon, May 28, 2012 at 12:18:25PM +0200, Martin Minarik wrote:
> 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.
> 
> Changes in this version I've removed WL_PRINTF macro. The libwayland
> will use wl_log() to raise messages.

Committed with a small edit to make wl_log return void, as per Pekka's
suggestion.

Kristian

> ---
>  src/wayland-client.c  |    6 ++++++
>  src/wayland-client.h  |    2 ++
>  src/wayland-private.h |    4 ++++
>  src/wayland-server.c  |    6 ++++++
>  src/wayland-server.h  |    2 ++
>  src/wayland-util.c    |   17 +++++++++++++++++
>  src/wayland-util.h    |    3 +++
>  7 files changed, 40 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..37ef13e 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;
> +
> +int 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 31f6fe5..bf46e0a 100644
> --- a/src/wayland-server.h
> +++ b/src/wayland-server.h
> @@ -417,6 +417,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..1992a70 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,19 @@ 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 int
> +wl_log_noop_handler(const char *fmt, va_list arg)
> +{
> +}
> +
> +wl_log_func_t wl_log_handler = wl_log_noop_handler;
> +
> +int
> +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..9b7466d 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 int (*wl_log_func_t)(const char *, va_list);
> +
>  #ifdef  __cplusplus
>  }
>  #endif
> -- 
> 1.7.5.4
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list