diff --git a/src/evdev.c b/src/evdev.c index 5d01e3bc..ba7c8b34 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -715,8 +715,12 @@ err: int evdev_device_get_keys(struct evdev_device *device, char *keys, size_t size) { + int len; + memset(keys, 0, size); - return ioctl(device->fd, EVIOCGKEY(size), keys); + len = ioctl(device->fd, EVIOCGKEY(size), keys); + + return (len == -1) ? -errno : len; } const char * diff --git a/src/libinput.h b/src/libinput.h index 9a9cd8c4..d6bf9f86 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -1169,6 +1169,8 @@ libinput_device_led_update(struct libinput_device *device, * @param device A current input device * @param keys An array filled with the bitmask for the keys * @param size Size of the keys array + * + * @return The number of valid bytes in keys, or a negative errno on failure */ int libinput_device_get_keys(struct libinput_device *device,