diff --git a/rootston/desktop.c b/rootston/desktop.c index bf556131..70767f92 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -202,11 +202,18 @@ struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly, struct roots_desktop *desktop_create(struct roots_server *server, struct roots_config *config) { - struct roots_desktop *desktop = calloc(1, sizeof(struct roots_desktop)); - assert(desktop); wlr_log(L_DEBUG, "Initializing roots desktop"); - assert(desktop->views = list_create()); + struct roots_desktop *desktop = calloc(1, sizeof(struct roots_desktop)); + if (desktop == NULL) { + return NULL; + } + + desktop->views = list_create(); + if (desktop->views == NULL) { + free(desktop); + return NULL; + } wl_list_init(&desktop->outputs); desktop->output_add.notify = output_add_notify; diff --git a/rootston/input.c b/rootston/input.c index 28af67a6..5dc7d16d 100644 --- a/rootston/input.c +++ b/rootston/input.c @@ -74,15 +74,34 @@ struct roots_input *input_create(struct roots_server *server, assert(server->desktop); struct roots_input *input = calloc(1, sizeof(struct roots_input)); - assert(input); + if (input == NULL) { + return NULL; + } input->config = config; input->server = server; - assert(input->theme = wlr_xcursor_theme_load("default", 16)); - assert(input->xcursor = wlr_xcursor_theme_get_cursor(input->theme, "left_ptr")); + input->theme = wlr_xcursor_theme_load("default", 16); + if (input->theme == NULL) { + wlr_log(L_ERROR, "Cannot load xcursor theme"); + free(input); + return NULL; + } + input->xcursor = wlr_xcursor_theme_get_cursor(input->theme, "left_ptr"); + if (input->xcursor == NULL) { + wlr_log(L_ERROR, "Cannot load xcursor from theme"); + wlr_xcursor_theme_destroy(input->theme); + free(input); + return NULL; + } - assert(input->wl_seat = wlr_seat_create(server->wl_display, "seat0")); + input->wl_seat = wlr_seat_create(server->wl_display, "seat0"); + if (input->wl_seat == NULL) { + wlr_log(L_ERROR, "Cannot create seat"); + wlr_xcursor_theme_destroy(input->theme); + free(input); + return NULL; + } wlr_seat_set_capabilities(input->wl_seat, WL_SEAT_CAPABILITY_KEYBOARD | WL_SEAT_CAPABILITY_POINTER | WL_SEAT_CAPABILITY_TOUCH); diff --git a/rootston/keyboard.c b/rootston/keyboard.c index f2075d26..61604da0 100644 --- a/rootston/keyboard.c +++ b/rootston/keyboard.c @@ -127,6 +127,9 @@ static void keyboard_key_notify(struct wl_listener *listener, void *data) { void keyboard_add(struct wlr_input_device *device, struct roots_input *input) { struct roots_keyboard *keyboard = calloc(sizeof(struct roots_keyboard), 1); + if (keyboard == NULL) { + return; + } device->data = keyboard; keyboard->device = device; keyboard->input = input; @@ -141,11 +144,15 @@ void keyboard_add(struct wlr_input_device *device, struct roots_input *input) { rules.layout = getenv("XKB_DEFAULT_LAYOUT"); rules.variant = getenv("XKB_DEFAULT_VARIANT"); rules.options = getenv("XKB_DEFAULT_OPTIONS"); - struct xkb_context *context; - assert(context = xkb_context_new(XKB_CONTEXT_NO_FLAGS)); + struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + if (context == NULL) { + wlr_log(L_ERROR, "Cannot create XKB context"); + return; + } wlr_keyboard_set_keymap(device->keyboard, xkb_map_new_from_names(context, - &rules, XKB_KEYMAP_COMPILE_NO_FLAGS)); + &rules, XKB_KEYMAP_COMPILE_NO_FLAGS)); xkb_context_unref(context); + wlr_seat_attach_keyboard(input->wl_seat, device); }