From b55ae6aa0856201a673bdbbf91aa005a059035df Mon Sep 17 00:00:00 2001
From: twinaphex <libretro@gmail.com>
Date: Tue, 12 May 2015 15:41:38 +0200
Subject: [PATCH] Move history list parsing to menu_displaylist.c

---
 menu/menu_displaylist.c               | 45 +++++++++++++++++++++++++++
 menu/menu_displaylist.h               |  1 +
 menu/menu_entries_cbs_deferred_push.c | 43 +++++--------------------
 3 files changed, 53 insertions(+), 36 deletions(-)

diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c
index a5713e029c..bbdc33b298 100644
--- a/menu/menu_displaylist.c
+++ b/menu/menu_displaylist.c
@@ -454,6 +454,43 @@ static int menu_entries_push_horizontal_menu_list(
    return 0;
 }
 
+static int menu_displaylist_parse_historylist(menu_displaylist_info_t *info)
+{
+   unsigned i;
+   size_t list_size = content_playlist_size(g_defaults.history);
+
+   for (i = 0; i < list_size; i++)
+   {
+      char fill_buf[PATH_MAX_LENGTH];
+      char path_copy[PATH_MAX_LENGTH];
+      const char *core_name = NULL;
+      const char *path      = NULL;
+      
+      strlcpy(path_copy, info->path, sizeof(path_copy));
+
+      path = path_copy;
+
+      content_playlist_get_index(g_defaults.history, i,
+            &path, NULL, &core_name);
+      strlcpy(fill_buf, core_name, sizeof(fill_buf));
+
+      if (path)
+      {
+         char path_short[PATH_MAX_LENGTH];
+
+         fill_short_pathname_representation(path_short, path,
+               sizeof(path_short));
+         snprintf(fill_buf,sizeof(fill_buf),"%s (%s)",
+               path_short, core_name);
+      }
+
+      menu_list_push(info->list, fill_buf, "",
+            MENU_FILE_PLAYLIST_ENTRY, 0);
+   }
+
+   return 0;
+}
+
 int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
 {
    int ret = 0;
@@ -500,6 +537,14 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
          if (ret == 0)
             menu_driver_populate_entries(info->path, info->label, info->type);
          break;
+      case DISPLAYLIST_HISTORY:
+         menu_list_clear(info->list);
+
+         ret = menu_displaylist_parse_historylist(info);
+
+         if (ret == 0)
+            menu_list_populate_generic(info->list, info->path, info->label, info->type);
+         break;
       case DISPLAYLIST_DATABASE_QUERY:
          menu_list_clear(info->list);
          menu_database_populate_query(info->list, info->path, (info->path_c[0] == '\0') ? NULL : info->path_c);
diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h
index 64cd7be0cf..5b8b5a3f03 100644
--- a/menu/menu_displaylist.h
+++ b/menu/menu_displaylist.h
@@ -32,6 +32,7 @@ enum
    DISPLAYLIST_MAIN_MENU,
    DISPLAYLIST_SETTINGS,
    DISPLAYLIST_HORIZONTAL,
+   DISPLAYLIST_HISTORY,
    DISPLAYLIST_DEFAULT,
    DISPLAYLIST_CORES,
    DISPLAYLIST_CORES_DETECTED,
diff --git a/menu/menu_entries_cbs_deferred_push.c b/menu/menu_entries_cbs_deferred_push.c
index a95a76c98f..4d4df53b45 100644
--- a/menu/menu_entries_cbs_deferred_push.c
+++ b/menu/menu_entries_cbs_deferred_push.c
@@ -1822,47 +1822,18 @@ static int deferred_push_core_updater_list(void *data, void *userdata,
 }
 #endif
 
-
-
 static int deferred_push_history_list(void *data, void *userdata,
       const char *path, const char *label, unsigned type)
 {
-   unsigned i;
-   size_t list_size = 0;
-   file_list_t *list      = (file_list_t*)data;
+   menu_displaylist_info_t info = {0};
 
-   if (!list)
-      return -1;
+   info.list         = (file_list_t*)data;
+   info.menu_list    = (file_list_t*)userdata;
+   info.type         = type;
+   strlcpy(info.path, path, sizeof(info.path));
+   strlcpy(info.label, label, sizeof(info.label));
 
-   (void)userdata;
-
-   menu_list_clear(list);
-   list_size = content_playlist_size(g_defaults.history);
-
-   for (i = 0; i < list_size; i++)
-   {
-      char fill_buf[PATH_MAX_LENGTH];
-      const char *core_name = NULL;
-
-      content_playlist_get_index(g_defaults.history, i,
-            &path, NULL, &core_name);
-      strlcpy(fill_buf, core_name, sizeof(fill_buf));
-
-      if (path)
-      {
-         char path_short[PATH_MAX_LENGTH];
-         fill_short_pathname_representation(path_short,path,sizeof(path_short));
-         snprintf(fill_buf,sizeof(fill_buf),"%s (%s)",
-               path_short,core_name);
-      }
-
-      menu_list_push(list, fill_buf, "",
-            MENU_FILE_PLAYLIST_ENTRY, 0);
-   }
-
-   menu_list_populate_generic(list, path, label, type);
-
-   return 0;
+   return menu_displaylist_push_list(&info, DISPLAYLIST_HISTORY);
 }
 
 static int deferred_push_content_actions(void *data, void *userdata,