From 08fadaaf8c00ce396cfd406028fe2f573ca29890 Mon Sep 17 00:00:00 2001 From: AndresSM Date: Mon, 3 Mar 2014 01:02:29 -0500 Subject: [PATCH] check if BIOS is present --- frontend/info/core_info.c | 22 ++++++++++++++++++++++ frontend/info/core_info.h | 3 +++ frontend/menu/menu_common.c | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/frontend/info/core_info.c b/frontend/info/core_info.c index 6af5fc0e85..2c6252f5d2 100644 --- a/frontend/info/core_info.c +++ b/frontend/info/core_info.c @@ -353,6 +353,28 @@ static int core_info_firmware_cmp(const void *a_, const void *b_) return strcasecmp(a->path, b->path); } +void core_info_list_update_missing_firmware(core_info_list_t *core_info_list, + const char *core, const char *systemdir) +{ + 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); + } + +} + void core_info_list_get_missing_firmware(core_info_list_t *core_info_list, const char *core, const char *systemdir, const core_info_firmware_t **firmware, size_t *num_firmware) diff --git a/frontend/info/core_info.h b/frontend/info/core_info.h index 12da74609d..886493e914 100644 --- a/frontend/info/core_info.h +++ b/frontend/info/core_info.h @@ -73,6 +73,9 @@ void core_info_list_get_missing_firmware(core_info_list_t *core_info_list, const char *core, const char *systemdir, const core_info_firmware_t **firmware, size_t *num_firmware); +void core_info_list_update_missing_firmware(core_info_list_t *core_info_list, + const char *core, const char *systemdir); + // Shallow-copies internal state. Data in *info is invalidated when the core_info_list is freed. bool core_info_list_get_info(core_info_list_t *core_info_list, core_info_t *info, const char *path); diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index 2ad2862e96..db21420244 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -1930,6 +1930,7 @@ void menu_populate_entries(void *data, unsigned menu_type) if(rgui->core_info_current.data) { + file_list_clear(rgui->selection_buf); snprintf(tmp, sizeof(tmp), "Core name: %s", rgui->core_info_current.display_name ? rgui->core_info_current.display_name : ""); file_list_push(rgui->selection_buf, tmp, RGUI_SETTINGS_CORE_INFO_NONE, 0); @@ -1942,6 +1943,9 @@ void menu_populate_entries(void *data, unsigned menu_type) if(rgui->core_info_current.firmware_count>0) { + + core_info_list_update_missing_firmware(rgui->core_info, rgui->core_info_current.path, g_settings.system_directory); + file_list_push(rgui->selection_buf, "Required firmware:", RGUI_SETTINGS_CORE_INFO_NONE, 0); for(i=0;icore_info_current.firmware_count;i++) {