summaryrefslogtreecommitdiff
path: root/libevdev/libevdev.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-05-30 09:00:13 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-05-30 13:25:58 +1000
commite19994c34c4225185860cd9f2d2aab46a04347e6 (patch)
tree9fbb3bc3ab7dd7f2596ce0985480503da772f73b /libevdev/libevdev.c
parent8034fdd0d7f6ca66b9d2e6b2c0a105ae6d373ebb (diff)
downloadlibevdev-e19994c34c4225185860cd9f2d2aab46a04347e6.tar.gz
Add log func handling
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev/libevdev.c')
-rw-r--r--libevdev/libevdev.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c
index 2b9dd17..2e74edd 100644
--- a/libevdev/libevdev.c
+++ b/libevdev/libevdev.c
@@ -25,6 +25,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <stdarg.h>
#include "libevdev.h"
#include "libevdev-int.h"
@@ -134,6 +135,21 @@ init_event_queue(struct libevdev *dev)
return 0;
}
+static void
+_libevdev_log(struct libevdev *dev, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ dev->log(format, args);
+ va_end(args);
+}
+
+static void
+libevdev_noop_log_func(const char *format, va_list args)
+{
+}
+
struct libevdev*
libevdev_new(int fd)
{
@@ -141,6 +157,7 @@ libevdev_new(int fd)
dev = calloc(1, sizeof(*dev));
dev->num_slots = -1;
+ dev->log = libevdev_noop_log_func;
if (fd >= 0)
libevdev_set_fd(dev, fd);
@@ -155,6 +172,12 @@ libevdev_free(struct libevdev *dev)
free(dev);
}
+void
+libevdev_set_log_handler(struct libevdev *dev, libevdev_log_func_t logfunc)
+{
+ dev->log = logfunc ? logfunc : libevdev_noop_log_func;
+}
+
int
libevdev_change_fd(struct libevdev *dev, int fd)
{
@@ -171,6 +194,7 @@ libevdev_set_fd(struct libevdev* dev, int fd)
int i;
if (dev->fd == -1) {
+ libevdev_log_func_t log;
libevdev_callback_proc cb, scb;
void *userdata;
@@ -178,6 +202,7 @@ libevdev_set_fd(struct libevdev* dev, int fd)
cb = dev->callback;
scb = dev->sync_callback;
userdata = dev->userdata;
+ log = dev->log;
memset(dev, 0, sizeof(*dev));
@@ -185,6 +210,7 @@ libevdev_set_fd(struct libevdev* dev, int fd)
dev->callback = cb;
dev->sync_callback = scb;
dev->userdata = userdata;
+ dev->log = log;
}
rc = ioctl(fd, EVIOCGBIT(0, sizeof(dev->bits)), dev->bits);