X-Git-Url: https://code.delx.au/refind/blobdiff_plain/e0512caf0f64bab257084087d6a1f871f9787e44..224ffad523048df8ad5f14038de21b7afe6a3b6a:/refind/main.c diff --git a/refind/main.c b/refind/main.c index ae35fa3..dcbb1fd 100644 --- a/refind/main.c +++ b/refind/main.c @@ -49,6 +49,7 @@ #include "icns.h" #include "menu.h" #include "mok.h" +#include "gpt.h" #include "security_policy.h" #include "../include/Handle.h" #include "../include/refit_call_wrapper.h" @@ -143,6 +144,8 @@ REFIT_CONFIG GlobalConfig = { FALSE, FALSE, 0, 0, 0, DONT_CHANGE_TEXT_MODE, 20, EFI_GUID GlobalGuid = EFI_GLOBAL_VARIABLE; +GPT_DATA *gPartitions = NULL; + // Structure used to hold boot loader filenames and time stamps in // a linked list; used to sort entries within a directory. struct LOADER_LIST { @@ -157,9 +160,11 @@ struct LOADER_LIST { static VOID AboutrEFInd(VOID) { + CHAR16 *FirmwareVendor; + if (AboutMenu.EntryCount == 0) { AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT); - AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.7.9.1"); + AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.7.9.5"); AddMenuInfoLine(&AboutMenu, L""); AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer"); AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012-2014 Roderick W. Smith"); @@ -176,7 +181,9 @@ static VOID AboutrEFInd(VOID) #else AddMenuInfoLine(&AboutMenu, L" Platform: unknown"); #endif - AddMenuInfoLine(&AboutMenu, PoolPrint(L" Firmware: %s %d.%02d", ST->FirmwareVendor, ST->FirmwareRevision >> 16, + FirmwareVendor = StrDuplicate(ST->FirmwareVendor); + LimitStringLength(FirmwareVendor, 65); // More than ~65 causes empty info page on 800x600 display + AddMenuInfoLine(&AboutMenu, PoolPrint(L" Firmware: %s %d.%02d", FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & ((1 << 16) - 1))); AddMenuInfoLine(&AboutMenu, PoolPrint(L" Screen Output: %s", egScreenDescription())); AddMenuInfoLine(&AboutMenu, L""); @@ -1091,7 +1098,7 @@ static BOOLEAN ShouldScan(REFIT_VOLUME *Volume, CHAR16 *Path) { UINTN i = 0; BOOLEAN ScanIt = TRUE; - if (IsIn(Volume->VolName, GlobalConfig.DontScanVolumes)) + if ((IsIn(Volume->VolName, GlobalConfig.DontScanVolumes)) || (IsIn(Volume->PartName, GlobalConfig.DontScanVolumes))) return FALSE; if ((StriCmp(Path, SelfDirPath) == 0) && (Volume->DeviceHandle == SelfVolume->DeviceHandle)) @@ -1329,11 +1336,11 @@ static VOID ScanEfiFiles(REFIT_VOLUME *Volume) { BOOLEAN ScanFallbackLoader = TRUE; BOOLEAN FoundBRBackup = FALSE; - MatchPatterns = StrDuplicate(LOADER_MATCH_PATTERNS); - if (GlobalConfig.ScanAllLinux) - MergeStrings(&MatchPatterns, LINUX_MATCH_PATTERNS, L','); - if ((Volume->RootDir != NULL) && (Volume->VolName != NULL) && (Volume->IsReadable)) { + MatchPatterns = StrDuplicate(LOADER_MATCH_PATTERNS); + if (GlobalConfig.ScanAllLinux) + MergeStrings(&MatchPatterns, LINUX_MATCH_PATTERNS, L','); + // check for Mac OS X boot loader if (ShouldScan(Volume, L"System\\Library\\CoreServices")) { StrCpy(FileName, MACOSX_LOADER_PATH); @@ -2188,7 +2195,7 @@ static VOID ScanForBootloaders(VOID) { // PauseForKey(); // } - ScanVolumes(); +// ScanVolumes(); // scan for loaders and tools, add them to the menu for (i = 0; i < NUM_SCAN_OPTIONS; i++) { @@ -2509,7 +2516,7 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) CopyMem(GlobalConfig.ScanFor, "ihebocm ", NUM_SCAN_OPTIONS); SetConfigFilename(ImageHandle); ReadConfig(GlobalConfig.ConfigFilename); - ScanVolumes(); +// ScanVolumes(); InitScreen(); WarnIfLegacyProblems(); @@ -2521,6 +2528,7 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) // further bootstrap (now with config available) MokProtocol = SecureBootSetup(); LoadDrivers(); + ScanVolumes(); ScanForBootloaders(); ScanForTools(); SetupScreen();