headless add_input_device: fix leak on error

Found through static analysis
This commit is contained in:
Dominique Martinet 2018-06-30 11:18:42 +09:00
parent 1fef1f88b2
commit 0c2a64df18
1 changed files with 8 additions and 5 deletions

View File

@ -39,7 +39,7 @@ struct wlr_input_device *wlr_headless_add_input_device(
wlr_device->keyboard = calloc(1, sizeof(struct wlr_keyboard)); wlr_device->keyboard = calloc(1, sizeof(struct wlr_keyboard));
if (wlr_device->keyboard == NULL) { if (wlr_device->keyboard == NULL) {
wlr_log(L_ERROR, "Unable to allocate wlr_keyboard"); wlr_log(L_ERROR, "Unable to allocate wlr_keyboard");
return NULL; goto error;
} }
wlr_keyboard_init(wlr_device->keyboard, NULL); wlr_keyboard_init(wlr_device->keyboard, NULL);
break; break;
@ -47,7 +47,7 @@ struct wlr_input_device *wlr_headless_add_input_device(
wlr_device->pointer = calloc(1, sizeof(struct wlr_pointer)); wlr_device->pointer = calloc(1, sizeof(struct wlr_pointer));
if (wlr_device->pointer == NULL) { if (wlr_device->pointer == NULL) {
wlr_log(L_ERROR, "Unable to allocate wlr_pointer"); wlr_log(L_ERROR, "Unable to allocate wlr_pointer");
return NULL; goto error;
} }
wlr_pointer_init(wlr_device->pointer, NULL); wlr_pointer_init(wlr_device->pointer, NULL);
break; break;
@ -55,7 +55,7 @@ struct wlr_input_device *wlr_headless_add_input_device(
wlr_device->touch = calloc(1, sizeof(struct wlr_touch)); wlr_device->touch = calloc(1, sizeof(struct wlr_touch));
if (wlr_device->touch == NULL) { if (wlr_device->touch == NULL) {
wlr_log(L_ERROR, "Unable to allocate wlr_touch"); wlr_log(L_ERROR, "Unable to allocate wlr_touch");
return NULL; goto error;
} }
wlr_touch_init(wlr_device->touch, NULL); wlr_touch_init(wlr_device->touch, NULL);
break; break;
@ -63,7 +63,7 @@ struct wlr_input_device *wlr_headless_add_input_device(
wlr_device->tablet_tool = calloc(1, sizeof(struct wlr_tablet_tool)); wlr_device->tablet_tool = calloc(1, sizeof(struct wlr_tablet_tool));
if (wlr_device->tablet_tool == NULL) { if (wlr_device->tablet_tool == NULL) {
wlr_log(L_ERROR, "Unable to allocate wlr_tablet_tool"); wlr_log(L_ERROR, "Unable to allocate wlr_tablet_tool");
return NULL; goto error;
} }
wlr_tablet_tool_init(wlr_device->tablet_tool, NULL); wlr_tablet_tool_init(wlr_device->tablet_tool, NULL);
break; break;
@ -71,7 +71,7 @@ struct wlr_input_device *wlr_headless_add_input_device(
wlr_device->tablet_pad = calloc(1, sizeof(struct wlr_tablet_pad)); wlr_device->tablet_pad = calloc(1, sizeof(struct wlr_tablet_pad));
if (wlr_device->tablet_pad == NULL) { if (wlr_device->tablet_pad == NULL) {
wlr_log(L_ERROR, "Unable to allocate wlr_tablet_pad"); wlr_log(L_ERROR, "Unable to allocate wlr_tablet_pad");
return NULL; goto error;
} }
wlr_tablet_pad_init(wlr_device->tablet_pad, NULL); wlr_tablet_pad_init(wlr_device->tablet_pad, NULL);
break; break;
@ -84,4 +84,7 @@ struct wlr_input_device *wlr_headless_add_input_device(
} }
return wlr_device; return wlr_device;
error:
free(device);
return NULL;
} }