From dea3f1ca1f53dec9639b72355472905b920b1a45 Mon Sep 17 00:00:00 2001
From: AndresSM <andres.430@gmail.com>
Date: Mon, 3 Mar 2014 01:57:18 -0500
Subject: [PATCH] change code to match old info file structure to avoid crashes
 with old info files if firmware is numbered from 1, one entry will be missing

---
 frontend/info/core_info.c   | 19 +++++++++++--------
 frontend/menu/menu_common.c |  7 +++++--
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/frontend/info/core_info.c b/frontend/info/core_info.c
index 2c6252f5d2..5db7667c2d 100644
--- a/frontend/info/core_info.c
+++ b/frontend/info/core_info.c
@@ -57,6 +57,8 @@ static void core_info_list_resolve_all_firmware(core_info_list_t *core_info_list
 {
    size_t i;
    unsigned c;
+   
+   
    for (i = 0; i < core_info_list->count; i++)
    {
       core_info_t *info = &core_info_list->list[i];
@@ -71,7 +73,8 @@ static void core_info_list_resolve_all_firmware(core_info_list_t *core_info_list
       info->firmware = (core_info_firmware_t*)calloc(count, sizeof(*info->firmware));
       if (!info->firmware)
          continue;
-
+	  
+	  
       for (c = 0; c < count; c++)
       {
          char path_key[64], desc_key[64];
@@ -81,6 +84,7 @@ static void core_info_list_resolve_all_firmware(core_info_list_t *core_info_list
          config_get_string(info->data, path_key, &info->firmware[c].path);
          config_get_string(info->data, desc_key, &info->firmware[c].desc);
       }
+	  
    }
 }
 
@@ -359,18 +363,17 @@ void core_info_list_update_missing_firmware(core_info_list_t *core_info_list,
    size_t i;
    char path[PATH_MAX];
 
-   core_info_firmware_t *firmware = NULL;
-
    core_info_t *info = find_core_info(core_info_list, core);
    if (!info)
       return;
 
-   firmware = info->firmware;
-
    for (i = 0; i < info->firmware_count; i++)
    {
-      fill_pathname_join(path, systemdir, info->firmware[i].path, sizeof(path));
-      info->firmware[i].missing = !path_file_exists(path);
+	  if(info->firmware[i].path)
+	  {
+		fill_pathname_join(path, systemdir, info->firmware[i].path, sizeof(path));
+		info->firmware[i].missing = !path_file_exists(path);
+	  }
    }
 
 }
@@ -391,7 +394,7 @@ void core_info_list_get_missing_firmware(core_info_list_t *core_info_list,
 
    *firmware = info->firmware;
 
-   for (i = 0; i < info->firmware_count; i++)
+   for (i = 1; i < info->firmware_count; i++)
    {
       fill_pathname_join(path, systemdir, info->firmware[i].path, sizeof(path));
       info->firmware[i].missing = !path_file_exists(path);
diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c
index db21420244..228d38d019 100644
--- a/frontend/menu/menu_common.c
+++ b/frontend/menu/menu_common.c
@@ -1949,8 +1949,11 @@ void menu_populate_entries(void *data, unsigned menu_type)
 				file_list_push(rgui->selection_buf, "Required firmware:", RGUI_SETTINGS_CORE_INFO_NONE, 0);
 				for(i=0;i<rgui->core_info_current.firmware_count;i++)
 				{
-					snprintf(tmp, sizeof(tmp), "	Name: %s, %s", rgui->core_info_current.firmware[i].desc ? rgui->core_info_current.firmware[i].desc : "",rgui->core_info_current.firmware[i].missing ? "missing" : "present");
-					file_list_push(rgui->selection_buf, tmp, RGUI_SETTINGS_CORE_INFO_NONE, 0);			
+					if(rgui->core_info_current.firmware[i].desc)
+					{
+						snprintf(tmp, sizeof(tmp), "	Name: %s, %s", rgui->core_info_current.firmware[i].desc ? rgui->core_info_current.firmware[i].desc : "",rgui->core_info_current.firmware[i].missing ? "missing" : "present");
+						file_list_push(rgui->selection_buf, tmp, RGUI_SETTINGS_CORE_INFO_NONE, 0);			
+					}
 				}
 			}
 			if(rgui->core_info_current.notes)