diff --git a/compositor/evdev.c b/compositor/evdev.c index b63500e3..a432204a 100644 --- a/compositor/evdev.c +++ b/compositor/evdev.c @@ -293,7 +293,7 @@ evdev_input_device_create(struct evdev_input *master, return NULL; ec = (struct wlsc_compositor *) master->base.input_device.compositor; - device->output = + device->output = container_of(ec->output_list.next, struct wlsc_output, link); device->tool = 1; @@ -302,33 +302,29 @@ evdev_input_device_create(struct evdev_input *master, device->devnode = strdup(path); device->fd = open(path, O_RDONLY); - if (device->fd < 0) { - free(device->devnode); - free(device); - fprintf(stderr, "couldn't create pointer for %s: %m\n", path); - return NULL; - } + if (device->fd < 0) + goto err0; - if (evdev_configure_device(device) == -1) { - close(device->fd); - free(device->devnode); - free(device); - return NULL; - } + if (evdev_configure_device(device) == -1) + goto err1; loop = wl_display_get_event_loop(display); device->source = wl_event_loop_add_fd(loop, device->fd, WL_EVENT_READABLE, evdev_input_device_data, device); - if (device->source == NULL) { - close(device->fd); - free(device->devnode); - free(device); - return NULL; - } + if (device->source == NULL) + goto err1; wl_list_insert(master->devices_list.prev, &device->link); + return device; + +err1: + close(device->fd); +err0: + free(device->devnode); + free(device); + return NULL; } static const char default_seat[] = "seat0";