summaryrefslogtreecommitdiff
path: root/libevdev/libevdev.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-08-26 13:24:26 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-09-03 16:58:54 +1000
commit55d67a340b058da84b7a5f135192fe126e5cbe0d (patch)
tree1a80b57ac06f491eb00a6fcdd662201385f05f4f /libevdev/libevdev.c
parent37d37cdaea9c010c5f7f0ab878617c8239d14d15 (diff)
downloadlibevdev-55d67a340b058da84b7a5f135192fe126e5cbe0d.tar.gz
Drop per-device logging function, use per-library one instead
There's no need to have separate logging function for each device created. More likely, libevdev will be hooked up once into the logging system and expected to deal with it. Plus, this allows us to log from the uinput code where we don't have the context anyway. Requires a rename to libevdev_set_log_function to avoid ABI breaks, and while we're breaking the ABI make the logging function more sophisticated to log line, number, etc. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Diffstat (limited to 'libevdev/libevdev.c')
-rw-r--r--libevdev/libevdev.c56
1 files changed, 45 insertions, 11 deletions
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c
index 867e008..ff1fd07 100644
--- a/libevdev/libevdev.c
+++ b/libevdev/libevdev.c
@@ -49,20 +49,35 @@ init_event_queue(struct libevdev *dev)
}
static void
-_libevdev_log(struct libevdev *dev, const char *format, ...)
+libevdev_noop_log_func(enum libevdev_log_priority priority,
+ void *data,
+ const char *file, int line, const char *func,
+ const char *format, va_list args)
+{
+}
+
+/*
+ * Global logging settings.
+ */
+struct logdata log_data = {
+ LIBEVDEV_LOG_INFO,
+ libevdev_noop_log_func,
+ NULL,
+};
+
+void
+log_msg(enum libevdev_log_priority priority,
+ void *data,
+ const char *file, int line, const char *func,
+ const char *format, ...)
{
va_list args;
va_start(args, format);
- dev->log(format, args);
+ log_data.handler(priority, data, file, line, func, format, args);
va_end(args);
}
-static void
-libevdev_noop_log_func(const char *format, va_list args)
-{
-}
-
LIBEVDEV_EXPORT struct libevdev*
libevdev_new(void)
{
@@ -74,7 +89,6 @@ libevdev_new(void)
dev->fd = -1;
dev->num_slots = -1;
dev->current_slot = -1;
- dev->log = libevdev_noop_log_func;
dev->grabbed = LIBEVDEV_UNGRAB;
dev->sync_state = SYNC_NONE;
@@ -112,13 +126,33 @@ libevdev_free(struct libevdev *dev)
free(dev);
}
+/* DEPRECATED */
LIBEVDEV_EXPORT void
libevdev_set_log_handler(struct libevdev *dev, libevdev_log_func_t logfunc)
{
- if (dev == NULL)
- return;
+ /* Can't be backwards compatible to this yet, so don't even try */
+ fprintf(stderr, "libevdev: ABI change. Log function will not be honored.\n");
+}
+
+LIBEVDEV_EXPORT void
+libevdev_set_log_function(libevdev_log_func_t logfunc, void *data)
+{
+ log_data.handler = logfunc ? logfunc : libevdev_noop_log_func;
+ log_data.userdata = data;
+}
- dev->log = logfunc ? logfunc : libevdev_noop_log_func;
+LIBEVDEV_EXPORT void
+libevdev_set_log_priority(enum libevdev_log_priority priority)
+{
+ if (priority > LIBEVDEV_LOG_DEBUG)
+ priority = LIBEVDEV_LOG_DEBUG;
+ log_data.priority = priority;
+}
+
+LIBEVDEV_EXPORT enum libevdev_log_priority
+libevdev_get_log_priority(void)
+{
+ return log_data.priority;
}
LIBEVDEV_EXPORT int