diff options
| author | Vojtech Pavlik <vojtech@suse.cz> | 2003-09-18 11:22:06 -0700 |
|---|---|---|
| committer | Vojtech Pavlik <vojtech@kernel.bkbits.net> | 2003-09-18 11:22:06 -0700 |
| commit | 5b48a707bca11ec6bf32875f91d92ccbb25beaae (patch) | |
| tree | c94afa2ef22753136c6b1cd8c4ab85d8ee547f3b | |
| parent | 3ff4090c15ec11d3ac32de8f7a19f7a6b3456afc (diff) | |
input.h, keyboard.c, evdev.c:
Fix the INPUT_KEYCODE macro and its usage.
| -rw-r--r-- | drivers/char/keyboard.c | 2 | ||||
| -rw-r--r-- | drivers/input/evdev.c | 12 | ||||
| -rw-r--r-- | include/linux/input.h | 2 |
3 files changed, 7 insertions, 9 deletions
diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c index 26c5df39f937..32347f8c9369 100644 --- a/drivers/char/keyboard.c +++ b/drivers/char/keyboard.c @@ -205,7 +205,7 @@ int setkeycode(unsigned int scancode, unsigned int keycode) INPUT_KEYCODE(dev, scancode) = keycode; for (i = 0; i < dev->keycodemax; i++) - if(INPUT_KEYCODE(dev, scancode) == oldkey) + if(keycode == oldkey) break; if (i == dev->keycodemax) clear_bit(oldkey, dev->keybit); diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 10a13ac90c48..ca56ac39e2b8 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -208,7 +208,7 @@ static int evdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, struct evdev *evdev = list->evdev; struct input_dev *dev = evdev->handle.dev; struct input_absinfo abs; - int i, t, u; + int i, t, u, v; if (!evdev->exist) return -ENODEV; @@ -239,14 +239,12 @@ static int evdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, case EVIOCSKEYCODE: if (get_user(t, ((int *) arg) + 0)) return -EFAULT; if (t < 0 || t > dev->keycodemax || !dev->keycodesize) return -EINVAL; + if (get_user(v, ((int *) arg) + 1)) return -EFAULT; u = INPUT_KEYCODE(dev, t); - if (get_user(INPUT_KEYCODE(dev, t), ((int *) arg) + 1)) return -EFAULT; - - for (i = 0; i < dev->keycodemax; i++) - if(INPUT_KEYCODE(dev, t) == u) break; + INPUT_KEYCODE(dev, t) = v; + for (i = 0; i < dev->keycodemax; i++) if (v == u) break; if (i == dev->keycodemax) clear_bit(u, dev->keybit); - set_bit(INPUT_KEYCODE(dev, t), dev->keybit); - + set_bit(v, dev->keybit); return 0; case EVIOCSFF: diff --git a/include/linux/input.h b/include/linux/input.h index da49f7ee0f18..c98e6fc575fe 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -751,7 +751,7 @@ struct ff_effect { #define LONG(x) ((x)/BITS_PER_LONG) #define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \ - ((dev->keycodesize == 1) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) + ((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) #define init_input_dev(dev) do { INIT_LIST_HEAD(&((dev)->h_list)); INIT_LIST_HEAD(&((dev)->node)); } while (0) |
