From 72087d17493f6ac6b2bbdc3c51fd0e1bab5dc4cc Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 28 Sep 2017 02:30:31 +0200 Subject: [PATCH] Rewrite path_b and path_c --- menu/cbs/menu_cbs_deferred_push.c | 39 ++++++++++++++++++++++++------- menu/menu_displaylist.c | 16 ++++++------- menu/menu_displaylist.h | 4 ++-- menu/widgets/menu_dialog.c | 20 ++-------------- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 54b255e574..967a750fb6 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -282,8 +282,13 @@ static int deferred_push_core_collection_list_deferred( static int deferred_push_database_manager_list_deferred( menu_displaylist_info_t *info) { - strlcpy(info->path_b, info->path, sizeof(info->path_b)); - info->path_c[0] = '\0'; + if (info->path_b && !string_is_empty(info->path_b)) + free(info->path_b); + if (info->path_c && !string_is_empty(info->path_c)) + free(info->path_c); + + info->path_b = strdup(info->path); + info->path_c = NULL; return deferred_push_dlist(info, DISPLAYLIST_DATABASE_QUERY); } @@ -458,9 +463,15 @@ static int deferred_push_cursor_manager_list_deferred( settings->paths.path_content_database, rdb, sizeof(rdb_path)); - strlcpy(info->path_b, info->path, sizeof(info->path_b)); + if (info->path_b && !string_is_empty(info->path_b)) + free(info->path_b); + if (info->path_c && !string_is_empty(info->path_c)) + free(info->path_c); + + info->path_b = strdup(info->path); + info->path_c = strdup(query); + strlcpy(info->path, rdb_path, sizeof(info->path)); - strlcpy(info->path_c, query, sizeof(info->path_c)); ret = deferred_push_dlist(info, DISPLAYLIST_DATABASE_QUERY); @@ -488,9 +499,15 @@ static int deferred_push_cursor_manager_list_generic( if (string_is_empty(query)) goto end; + if (info->path_b && !string_is_empty(info->path_b)) + free(info->path_b); + if (info->path_c && !string_is_empty(info->path_c)) + free(info->path_c); + strlcpy(info->path, str_list->elems[1].data, sizeof(info->path)); - strlcpy(info->path_b, str_list->elems[0].data, sizeof(info->path_b)); - strlcpy(info->path_c, query, sizeof(info->path_c)); + + info->path_b = strdup(str_list->elems[0].data); + info->path_c = strdup(query); ret = deferred_push_dlist(info, DISPLAYLIST_DATABASE_QUERY); @@ -614,8 +631,14 @@ static int deferred_push_cursor_manager_list_deferred_query_subsearch( goto end; strlcpy(info->path, str_list->elems[1].data, sizeof(info->path)); - strlcpy(info->path_b, str_list->elems[0].data, sizeof(info->path_b)); - strlcpy(info->path_c, query, sizeof(info->path_c)); + + if (info->path_b && !string_is_empty(info->path_b)) + free(info->path_b); + info->path_b = strdup(str_list->elems[0].data); + + if (info->path_c && !string_is_empty(info->path_c)) + free(info->path_c); + info->path_c = strdup(query); ret = deferred_push_dlist(info, DISPLAYLIST_DATABASE_QUERY); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 12bf58dd6c..abc3be0e43 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -4313,19 +4313,19 @@ void menu_displaylist_info_free(menu_displaylist_info_t *info) return; if (info->exts) free(info->exts); - info->exts = NULL; -#if 0 - if (info->path) - free(info->path); if (info->path_b) free(info->path_b); if (info->path_c) free(info->path_c); + info->exts = NULL; + info->path_b = NULL; + info->path_c = NULL; +#if 0 + if (info->path) + free(info->path); if (info->label) free(info->label); info->path = NULL; - info->path_b = NULL; - info->path_c = NULL; info->label = NULL; #endif } @@ -4345,14 +4345,14 @@ void menu_displaylist_info_init(menu_displaylist_info_t *info) info->download_core = false; info->need_navigation_clear = false; info->path[0] = '\0'; - info->path_b[0] = '\0'; - info->path_c[0] = '\0'; info->label[0] = '\0'; info->type = 0; info->type_default = 0; info->flags = 0; info->label_hash = 0; info->directory_ptr = 0; + info->path_b = NULL; + info->path_c = NULL; info->exts = NULL; info->list = NULL; info->menu_list = NULL; diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 62063a2ced..4dcfc0c411 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -185,8 +185,8 @@ typedef struct menu_displaylist_info bool need_navigation_clear; char path[PATH_MAX_LENGTH]; - char path_b[PATH_MAX_LENGTH]; - char path_c[PATH_MAX_LENGTH]; + char *path_b; + char *path_c; char *exts; char label[255]; unsigned type; diff --git a/menu/widgets/menu_dialog.c b/menu/widgets/menu_dialog.c index d39e813dab..b0710b5673 100644 --- a/menu/widgets/menu_dialog.c +++ b/menu/widgets/menu_dialog.c @@ -259,26 +259,10 @@ void menu_dialog_push(void) if (!menu_dialog_is_push_pending()) return; - info.need_sort = false; - info.need_refresh = false; - info.need_entries_refresh = false; - info.need_push = false; - info.need_clear = false; - info.need_navigation_clear= false; + menu_displaylist_info_init(&info); + info.list = menu_entries_get_menu_stack_ptr(0); - info.menu_list = NULL; - info.path[0] = '\0'; - info.path_b[0] = '\0'; - info.path_c[0] = '\0'; - info.label[0] = '\0'; - info.label_hash = 0; - info.exts = NULL; - info.type = 0; - info.type_default = 0; - info.directory_ptr = 0; - info.flags = 0; info.enum_idx = MENU_ENUM_LABEL_HELP; - info.setting = NULL; strlcpy(info.label, msg_hash_to_str(MENU_ENUM_LABEL_HELP),