diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2011-07-21 15:31:47 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2012-02-29 17:00:32 +1000 |
commit | 5f454a13394efa9b824230dce61c6e6e4509a5a8 (patch) | |
tree | 85fd12d61355fa1c5fd687f3b28827798d2f64d1 | |
parent | 703c5339e407ca13376b16cbc1bfd8d4402cb4b5 (diff) |
If UI_SET_PROPBIT always fails, assume success anyway
Older kernels don't support this ioctl value. Keep setting all propbits and
if all of them fail just assume that the kernel was too old and report
success anyway.
Once one of the succeeds, fail if another one does.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | src/evemu.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/evemu.c b/src/evemu.c index ebcab2c..aca7586 100644 --- a/src/evemu.c +++ b/src/evemu.c @@ -491,12 +491,19 @@ static int set_prop(const struct evemu_device *dev, int fd) { int bits = 8 * dev->pbytes; int ret, i; + int success = 0; for (i = 0; i < bits; i++) { if (!evemu_has_prop(dev, i)) continue; ret = set_prop_bit(fd, i); - if (ret < 0) - return ret; + /* Older kernels aways return errors on UI_SET_PROPBIT. + Assume that if we only get failures, it may be an older + kernel and report success anyway. */ + if (ret < 0) { + if (success) + return ret; + } else if (!success) + success = 1; } return 0; } |