summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-07-21 15:31:47 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-02-29 17:00:32 +1000
commit5f454a13394efa9b824230dce61c6e6e4509a5a8 (patch)
tree85fd12d61355fa1c5fd687f3b28827798d2f64d1
parent703c5339e407ca13376b16cbc1bfd8d4402cb4b5 (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.c11
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;
}