Input: return correct value when setting up absolute device via uinipt.
authorIan Campbell <icampbell@arcom.com>
Wed, 1 Jun 2005 07:39:25 +0000 (02:39 -0500)
committerDmitry Torokhov <dtor_core@ameritech.net>
Wed, 1 Jun 2005 07:39:25 +0000 (02:39 -0500)
uinput_alloc_device() is supposed to return the number of bytes read,
the value is returned to uinput_write() and from there to userspace. If
EV_ABS is set then it returns the value from uinput_validate_absbits()
instead, which is zero when everything is ok instead of the count.

Signed-off-by: Ian Campbell <icampbell@arcom.com>
Acked-by: Aristeu Rozanski <aris@cathedrallabs.org>
Signed-off-by: Vojtech Pavlik <vojtech@suse.cz>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/misc/uinput.c

index 158c8e8..9871099 100644 (file)
@@ -298,9 +298,11 @@ static int uinput_alloc_device(struct file *file, const char __user *buffer, siz
        /* check if absmin/absmax/absfuzz/absflat are filled as
         * told in Documentation/input/input-programming.txt */
        if (test_bit(EV_ABS, dev->evbit)) {
-               retval = uinput_validate_absbits(dev);
-               if (retval < 0)
+               int err = uinput_validate_absbits(dev);
+               if (err < 0) {
+                       retval = err;
                        kfree(dev->name);
+               }
        }
 
 exit: