From bc285acd9adfc9b42aca12a17c676014e03434f3 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 28 Jun 2013 10:18:35 +1000 Subject: [PATCH] Add a flag for forcing a SYN_DROPPED event uinput doesn't route a SYN_DROPPED, so we neeed to handle fds in a rather complicated manner. For tests, avoid this and instead force the library to sync if a specific flag is given. Signed-off-by: Peter Hutterer --- libevdev/libevdev.c | 9 ++++++++- libevdev/libevdev.h | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 3e2c98a..5dd6bdb 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -530,7 +530,7 @@ int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_e if (dev->fd < 0) return -ENODEV; - if (!(flags & (LIBEVDEV_READ_NORMAL|LIBEVDEV_READ_SYNC))) + if (!(flags & (LIBEVDEV_READ_NORMAL|LIBEVDEV_READ_SYNC|LIBEVDEV_FORCE_SYNC))) return -EINVAL; if (flags & LIBEVDEV_READ_SYNC) { @@ -558,6 +558,13 @@ int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_e if (rc < 0 && rc != -EAGAIN) goto out; + if (flags & LIBEVDEV_FORCE_SYNC) { + dev->need_sync = 1; + rc = 1; + goto out; + } + + if (queue_shift(dev, ev) != 0) return -EAGAIN; diff --git a/libevdev/libevdev.h b/libevdev/libevdev.h index 0cf6295..d9f1daa 100644 --- a/libevdev/libevdev.h +++ b/libevdev/libevdev.h @@ -189,6 +189,9 @@ struct libevdev; enum EvdevReadFlags { LIBEVDEV_READ_SYNC = 1, /**< Process data in sync mode */ LIBEVDEV_READ_NORMAL = 2, /**< Process data in normal mode */ + LIBEVDEV_FORCE_SYNC = 4, /**< Pretend the next event is a SYN_DROPPED. There is + no reason to ever use this except for + automated tests, so don't. */ }; /** -- 2.7.4