#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"
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 {
static VOID AboutrEFInd(VOID)
{
+ CHAR16 *FirmwareVendor;
+
if (AboutMenu.EntryCount == 0) {
AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
- AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.7.8.6");
+ 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");
#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"");
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))
VolName = NULL;
// See if Volume is in GlobalConfig.DontScanDirs....
- while ((DontScanDir = FindCommaDelimited(GlobalConfig.DontScanDirs, i++)) && ScanIt) {
+ while (ScanIt && (DontScanDir = FindCommaDelimited(GlobalConfig.DontScanDirs, i++))) {
SplitVolumeAndFilename(&DontScanDir, &VolName);
CleanUpPathNameSlashes(DontScanDir);
VolumeNumberToName(Volume, &VolName);
MyFreePool(DontScanDir);
MyFreePool(VolName);
DontScanDir = NULL;
+ VolName = NULL;
} // while()
return ScanIt;
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);
// check for Microsoft boot loader/menu
if (ShouldScan(Volume, L"EFI\\Microsoft\\Boot")) {
StrCpy(FileName, L"EFI\\Microsoft\\Boot\\bkpbootmgfw.efi");
- if (FileExists(Volume->RootDir, FileName) && !FilenameIn(Volume, Directory, L"bkpbootmgfw.efi", GlobalConfig.DontScanFiles)) {
+ if (FileExists(Volume->RootDir, FileName) && !FilenameIn(Volume, Directory, L"bkpbootmgfw.efi",
+ GlobalConfig.DontScanFiles)) {
AddLoaderEntry(FileName, L"Microsoft EFI boot (Boot Repair backup)", Volume);
FoundBRBackup = TRUE;
if (DuplicatesFallback(Volume, FileName))
// PauseForKey();
// }
- ScanVolumes();
+// ScanVolumes();
// scan for loaders and tools, add them to the menu
for (i = 0; i < NUM_SCAN_OPTIONS; i++) {
CopyMem(GlobalConfig.ScanFor, "ihebocm ", NUM_SCAN_OPTIONS);
SetConfigFilename(ImageHandle);
ReadConfig(GlobalConfig.ConfigFilename);
- ScanVolumes();
+// ScanVolumes();
InitScreen();
WarnIfLegacyProblems();
// further bootstrap (now with config available)
MokProtocol = SecureBootSetup();
LoadDrivers();
+ ScanVolumes();
ScanForBootloaders();
ScanForTools();
SetupScreen();