From: Seunghun Lee Date: Mon, 5 Sep 2022 02:06:46 +0000 (+0900) Subject: input: Add null checks X-Git-Tag: submit/tizen/20220906.003456~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F64%2F280764%2F1;p=platform%2Fcore%2Fuifw%2Fheadless-server.git input: Add null checks This adds null checks for xkb_context and xkb_keymap, also makes a function for setting keymap for ds_keyboard. Change-Id: If20e115c20491cf27e1a21a7fa77f15b97176a55 --- diff --git a/src/input/input.c b/src/input/input.c index bdc8a3f..43f3652 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -82,6 +82,7 @@ static void handle_top_view_destroy(struct wl_listener *listener, void *data); static headless_keyboard_t *create_keyboard(headless_input_t *input, struct ds_input_device *dev); static void keyboard_destroy(headless_keyboard_t *keyboard); +static bool keyboard_set_keymap(headless_keyboard_t *keyboard); static void keyboard_handle_destroy(struct wl_listener *listener, void *data); static void keyboard_handle_key(struct wl_listener *listener, void *data); static void devicemgr_set_keymap(struct ds_tizen_input_devicemgr *devicemgr); @@ -256,9 +257,6 @@ static headless_keyboard_t * create_keyboard(headless_input_t *input, struct ds_input_device *dev) { headless_keyboard_t *keyboard; - struct ds_keyboard *ds_keyboard; - struct xkb_context *context; - struct xkb_keymap *keymap; keyboard = calloc(1, sizeof *keyboard); if (!keyboard) { @@ -269,21 +267,18 @@ create_keyboard(headless_input_t *input, struct ds_input_device *dev) keyboard->input = input; keyboard->dev = dev; + if (!keyboard_set_keymap(keyboard)) { + ds_err("Could not set keymap for ds_keyboard"); + free(keyboard); + return NULL; + } + keyboard->device_destroy.notify = keyboard_handle_destroy; ds_input_device_add_destroy_listener(dev, &keyboard->device_destroy); - ds_keyboard = ds_input_device_get_keyboard(dev); - keyboard->key.notify = keyboard_handle_key; - ds_keyboard_add_key_listener(ds_keyboard, &keyboard->key); - - context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); - keymap = xkb_keymap_new_from_names(context, NULL, - XKB_KEYMAP_COMPILE_NO_FLAGS); - - ds_keyboard_set_keymap(ds_keyboard, keymap); - xkb_keymap_unref(keymap); - xkb_context_unref(context); + ds_keyboard_add_key_listener(ds_input_device_get_keyboard(dev), + &keyboard->key); ds_inf("Input(%p): New keyboard(%p)", input, keyboard); @@ -300,6 +295,34 @@ keyboard_destroy(headless_keyboard_t *keyboard) free(keyboard); } +static bool +keyboard_set_keymap(headless_keyboard_t *keyboard) +{ + struct xkb_context *context; + struct xkb_keymap *keymap; + + context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + if (!context) { + ds_err("Could not create xkb_context"); + return false; + } + + keymap = xkb_keymap_new_from_names(context, NULL, + XKB_KEYMAP_COMPILE_NO_FLAGS); + if (!keymap) { + ds_err("Could not create xkb_keymap"); + xkb_context_unref(context); + return false; + } + ds_keyboard_set_keymap(ds_input_device_get_keyboard(keyboard->dev), + keymap); + + xkb_keymap_unref(keymap); + xkb_context_unref(context); + + return true; +} + static void keyboard_handle_destroy(struct wl_listener *listener, void *data) {