typedef struct managed_evdev managed_evdev;
struct idev_evdev {
- struct idev_element element;
+ idev_element element;
struct libevdev *evdev;
int fd;
sd_event_source *fd_src;
};
struct unmanaged_evdev {
- struct idev_evdev evdev;
+ idev_evdev evdev;
char *devnode;
};
struct managed_evdev {
- struct idev_evdev evdev;
+ idev_evdev evdev;
dev_t devnum;
sd_bus_slot *slot_pause_device;
error:
idev_evdev_hup(evdev);
- return r;
+ return 0; /* idev_evdev_hup() handles the error so discard it */
}
static int idev_evdev_event_fn(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
flags = fcntl(fd, F_GETFL, 0);
if (flags < 0)
- return r;
+ return -errno;
flags &= O_ACCMODE;
if (flags == O_WRONLY)
return -EACCES;
evdev->element.readable = true;
- evdev->element.writable = true;
- if (flags == O_RDONLY)
- evdev->element.writable = false;
- else if (flags == O_WRONLY)
- evdev->element.readable = false;
+ evdev->element.writable = !(flags & O_RDONLY);
/*
* TODO: We *MUST* re-sync the device so we get a delta of the changed
int r;
assert_return(s, -EINVAL);
- assert_return(s->context->sysbus, -EINVAL);
assert_return(s->managed, -EINVAL);
assert_return(s->context->sysbus, -EINVAL);
assert_return(ud, -EINVAL);