commit 21b4199

Michael Forney  ·  2014-01-20 23:29:14 +0000 UTC
parent 58da3b4
evdev_device: Fix error handling
1 files changed,  +11, -9
+11, -9
 1@@ -200,25 +200,25 @@ struct swc_evdev_device * swc_evdev_device_new
 2     if (device->fd == -1)
 3     {
 4         ERROR("Failed to open input device at %s\n", path);
 5-        goto error0;
 6+        goto error1;
 7     }
 8 
 9+    if (!(device->path = strdup(path)))
10+        goto error2;
11+
12     if (libevdev_new_from_fd(device->fd, &device->dev) != 0)
13     {
14         ERROR("Failed to create libevdev device\n");
15-        goto error1;
16+        goto error3;
17     }
18 
19-    if (!(device->path = strdup(path)))
20-        goto error2;
21-
22     device->source = wl_event_loop_add_fd
23         (swc.event_loop, device->fd, WL_EVENT_READABLE, handle_data, device);
24 
25     if (!device->source)
26     {
27         ERROR("Failed to add event source\n");
28-        goto error3;
29+        goto error4;
30     }
31 
32     DEBUG("Adding device %s\n", libevdev_get_name(device->dev));
33@@ -245,12 +245,14 @@ struct swc_evdev_device * swc_evdev_device_new
34 
35     return device;
36 
37-  error3:
38+  error4:
39     libevdev_free(device->dev);
40+  error3:
41+    free(device->path);
42   error2:
43-    libevdev_free(device->dev);
44-  error1:
45     close(device->fd);
46+  error1:
47+    free(device);
48   error0:
49     return NULL;
50 }