diff --git a/src/dispatch/bind_define.h b/src/dispatch/bind_define.h index 72ab8fa..f39543f 100644 --- a/src/dispatch/bind_define.h +++ b/src/dispatch/bind_define.h @@ -671,7 +671,7 @@ void switch_keyboard_layout(const Arg *arg) { } // 3. 分配并获取布局缩写 - char **layout_ids = calloc(num_layouts, sizeof(char *)); + const char **layout_ids = calloc(num_layouts, sizeof(char *)); if (!layout_ids) { wlr_log(WLR_ERROR, "Failed to allocate layout IDs"); goto cleanup_context; @@ -743,9 +743,6 @@ void switch_keyboard_layout(const Arg *arg) { xkb_keymap_unref(new_keymap); cleanup_layouts: - for (int i = 0; i < num_layouts; i++) { - free(layout_ids[i]); - } free(layout_ids); cleanup_context: diff --git a/src/fetch/common.h b/src/fetch/common.h index 6f7b076..d913d60 100644 --- a/src/fetch/common.h +++ b/src/fetch/common.h @@ -44,11 +44,11 @@ char *get_autostart_path(char *autostart_path, unsigned int buf_size) { return autostart_path; } -char *get_layout_abbr(const char *full_name) { +const char *get_layout_abbr(const char *full_name) { // 1. 尝试在映射表中查找 for (int i = 0; layout_mappings[i].full_name != NULL; i++) { if (strcmp(full_name, layout_mappings[i].full_name) == 0) { - return strdup(layout_mappings[i].abbr); + return layout_mappings[i].abbr; } } diff --git a/src/mango.c b/src/mango.c index 6545b73..bc1d674 100644 --- a/src/mango.c +++ b/src/mango.c @@ -671,7 +671,7 @@ wlr_scene_tree_snapshot(struct wlr_scene_node *node, struct wlr_scene_tree *parent); static bool is_scroller_layout(Monitor *m); void create_output(struct wlr_backend *backend, void *data); -char *get_layout_abbr(const char *full_name); +static const char *get_layout_abbr(const char *full_name); void apply_named_scratchpad(Client *target_client); Client *get_client_by_id_or_title(const char *arg_id, const char *arg_title); bool switch_scratchpad_client_state(Client *c); @@ -4206,7 +4206,7 @@ void reset_keyboard_layout(void) { } // Get layout abbreviations - char **layout_ids = calloc(num_layouts, sizeof(char *)); + const char **layout_ids = calloc(num_layouts, sizeof(char *)); if (!layout_ids) { wlr_log(WLR_ERROR, "Failed to allocate layout IDs"); goto cleanup_context; @@ -4251,9 +4251,6 @@ void reset_keyboard_layout(void) { xkb_keymap_unref(new_keymap); cleanup_layouts: - for (int i = 0; i < num_layouts; i++) { - free(layout_ids[i]); - } free(layout_ids); cleanup_context: