diff --git a/menu/drivers/xui.cpp b/menu/drivers/xui.cpp index ae2c27cb6d..1da440c27c 100644 --- a/menu/drivers/xui.cpp +++ b/menu/drivers/xui.cpp @@ -592,7 +592,7 @@ static void xui_render(void *data, bool is_idle) for (i = 0; i < end; i++) { menu_entry_t entry; - char entry_path[PATH_MAX_LENGTH] = {0}; + char *entry_path = NULL; char entry_value[PATH_MAX_LENGTH] = {0}; wchar_t msg_right[PATH_MAX_LENGTH] = {0}; wchar_t msg_left[PATH_MAX_LENGTH] = {0}; @@ -601,13 +601,15 @@ static void xui_render(void *data, bool is_idle) menu_entry_get(&entry, 0, i, NULL, true); menu_entry_get_value(&entry, entry_value, sizeof(entry_value)); - menu_entry_get_path(&entry, entry_path, sizeof(entry_path)); + entry_path = menu_entry_get_path(&entry); mbstowcs(msg_left, entry_path, sizeof(msg_left) / sizeof(wchar_t)); mbstowcs(msg_right, entry_value, sizeof(msg_right) / sizeof(wchar_t)); xui_set_list_text(i, msg_left, msg_right); menu_entry_free(&entry); + if (entry_path && !string_is_empty(entry_path)) + free(entry_path); } selection = menu_navigation_get_selection(); diff --git a/menu/widgets/menu_entry.c b/menu/widgets/menu_entry.c index 4f59f771b4..f49f7ddeee 100644 --- a/menu/widgets/menu_entry.c +++ b/menu/widgets/menu_entry.c @@ -105,11 +105,11 @@ void menu_entry_init(menu_entry_t *entry) entry->spacing = 0; } -void menu_entry_get_path(menu_entry_t *entry, char *s, size_t len) +char *menu_entry_get_path(menu_entry_t *entry) { - if (!entry) - return; - strlcpy(s, entry->path, len); + if (!entry || string_is_empty(entry->path)) + return NULL; + return strdup(entry->path); } char *menu_entry_get_rich_label(menu_entry_t *entry) diff --git a/menu/widgets/menu_entry.h b/menu/widgets/menu_entry.h index bec3a67674..b32ec148ee 100644 --- a/menu/widgets/menu_entry.h +++ b/menu/widgets/menu_entry.h @@ -59,7 +59,7 @@ typedef struct menu_entry enum menu_entry_type menu_entry_get_type(uint32_t i); -void menu_entry_get_path(menu_entry_t *entry, char *s, size_t len); +char *menu_entry_get_path(menu_entry_t *entry); void menu_entry_get_label(menu_entry_t *entry, char *s, size_t len); diff --git a/ui/drivers/cocoa/cocoatouch_menu.m b/ui/drivers/cocoa/cocoatouch_menu.m index 22626fdacb..1f098ebd2f 100644 --- a/ui/drivers/cocoa/cocoatouch_menu.m +++ b/ui/drivers/cocoa/cocoatouch_menu.m @@ -113,7 +113,7 @@ static void RunActionSheet(const char* title, const struct string_list* items, { menu_entry_t entry; char buffer[PATH_MAX_LENGTH]; - char label[PATH_MAX_LENGTH]; + char *label = NULL; static NSString* const cell_id = @"text"; self.parentTable = tableView; @@ -125,17 +125,22 @@ static void RunActionSheet(const char* title, const struct string_list* items, menu_entry_init(&entry); menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - menu_entry_get_path(&entry, label, sizeof(label)); + label = menu_entry_get_path(&entry); menu_entry_get_value(&entry, buffer, sizeof(buffer)); - result.textLabel.text = BOXSTRING(label); - if (string_is_empty(label)) strlcpy(buffer, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), sizeof(buffer)); + + if (label && !string_is_empty(label)) + result.textLabel.text = BOXSTRING(label); result.detailTextLabel.text = BOXSTRING(buffer); + menu_entry_free(&entry); + if (label && !string_is_empty(label)) + free(label); + return result; } @@ -153,7 +158,7 @@ static void RunActionSheet(const char* title, const struct string_list* items, - (UITableViewCell*)cellForTableView:(UITableView*)tableView { menu_entry_t entry; - char label[PATH_MAX_LENGTH]; + char *label = NULL; static NSString* const cell_id = @"boolean_setting"; UITableViewCell* result = @@ -169,9 +174,12 @@ static void RunActionSheet(const char* title, const struct string_list* items, menu_entry_init(&entry); menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - menu_entry_get_path(&entry, label, sizeof(label)); - result.textLabel.text = BOXSTRING(label); + label = menu_entry_get_path(&entry); + + if (label && !string_is_empty(label)) + result.textLabel.text = BOXSTRING(label); + [(id)result.accessoryView removeTarget:nil action:NULL forControlEvents:UIControlEventValueChanged]; @@ -180,6 +188,8 @@ static void RunActionSheet(const char* title, const struct string_list* items, forControlEvents:UIControlEventValueChanged]; [(id)result.accessoryView setOn:(menu_entry_get_bool_value(self.i))]; menu_entry_free(&entry); + if (label && !string_is_empty(label)) + free(label); return result; } @@ -215,16 +225,18 @@ static void RunActionSheet(const char* title, const struct string_list* items, ofController:(UIViewController*)controller { menu_entry_t entry; - struct string_list* items; - char label[PATH_MAX_LENGTH]; + struct string_list* items = NULL; + char *label = NULL; RAMenuItemEnum __weak* weakSelf = self; menu_entry_init(&entry); menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - menu_entry_get_path(&entry, label, sizeof(label)); + label = menu_entry_get_path(&entry); items = menu_entry_enum_values(self.i); - RunActionSheet(label, items, self.parentTable, + if (label && !string_is_empty(label)) + { + RunActionSheet(label, items, self.parentTable, ^(UIActionSheet* actionSheet, NSInteger buttonIndex) { if (buttonIndex == actionSheet.cancelButtonIndex) @@ -234,8 +246,11 @@ static void RunActionSheet(const char* title, const struct string_list* items, (self.i, [[actionSheet buttonTitleAtIndex:buttonIndex] UTF8String]); [weakSelf.parentTable reloadData]; }); + } string_list_free(items); menu_entry_free(&entry); + if (label && !string_is_empty(label)) + free(label); } @end @@ -250,13 +265,14 @@ static void RunActionSheet(const char* title, const struct string_list* items, ofController:(UIViewController *)controller { menu_entry_t entry; - char label[PATH_MAX_LENGTH]; + char *label = NULL; menu_entry_init(&entry); menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - menu_entry_get_path(&entry, label, sizeof(label)); + label = menu_entry_get_path(&entry); self.alert = [[UIAlertView alloc] + initWithTitle:BOXSTRING("RetroArch") message:BOXSTRING(label) delegate:self @@ -275,6 +291,8 @@ static void RunActionSheet(const char* title, const struct string_list* items, userInfo:nil repeats:YES]; menu_entry_free(&entry); + if (label && !string_is_empty(label)) + free(label); } - (void)finishWithClickedButton:(bool)clicked @@ -426,14 +444,14 @@ replacementString:(NSString *)string { menu_entry_t entry; char buffer[PATH_MAX_LENGTH]; - char label[PATH_MAX_LENGTH]; + char *label = NULL; UIAlertView *alertView = NULL; UITextField *field = NULL; NSString *desc = NULL; menu_entry_init(&entry); menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - menu_entry_get_path(&entry, label, sizeof(label)); + label = menu_entry_get_path(&entry); desc = BOXSTRING(label); @@ -458,6 +476,9 @@ replacementString:(NSString *)string menu_entry_free(&entry); + if (label && !string_is_empty(label)) + free(label); + [alertView show]; }