if (AboutMenu.EntryCount == 0) {
AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
- AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.6.12.1");
+ AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.7.1.2");
AddMenuInfoLine(&AboutMenu, L"");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012-2013 Roderick W. Smith");
refit_call4_wrapper(RT->ResetSystem, EfiResetCold, EFI_SUCCESS, 0, NULL);
Print(L"Error calling ResetSystem: %r", err);
PauseForKey();
-// uefi_call_wrapper(BS->Stall, 1, 3 * 1000 * 1000);
return err;
}
Entry->UseGraphicsMode = GlobalConfig.GraphicsFor & GRAPHICS_FOR_GRUB;
} else if (StriCmp(FileName, L"cdboot.efi") == 0 ||
StriCmp(FileName, L"bootmgr.efi") == 0 ||
- StriCmp(FileName, L"bootmgfw.efi") == 0) {
+ StriCmp(FileName, L"bootmgfw.efi") == 0 ||
+ StriCmp(FileName, L"bkpbootmgfw.efi") == 0) {
MergeStrings(&OSIconName, L"win", L',');
Entry->OSType = 'W';
ShortcutLetter = 'W';
// Returns TRUE if none of these conditions is met -- that is, if the path is
// eligible for scanning.
static BOOLEAN ShouldScan(REFIT_VOLUME *Volume, CHAR16 *Path) {
- CHAR16 *VolName = NULL, *DontScanDir;
+ CHAR16 *VolName = NULL, *DontScanDir, *PathCopy = NULL;
UINTN i = 0, VolNum;
BOOLEAN ScanIt = TRUE;
if ((StriCmp(Path, SelfDirPath) == 0) && (Volume->DeviceHandle == SelfVolume->DeviceHandle))
return FALSE;
+ // See if Path includes an explicit volume declaration that's NOT Volume....
+ PathCopy = StrDuplicate(Path);
+ if (SplitVolumeAndFilename(&PathCopy, &VolName)) {
+ if (StriCmp(VolName, Volume->VolName) != 0) {
+ if ((StrLen(VolName) > 2) && (VolName[0] == L'f') && (VolName[1] == L's') && (VolName[2] >= L'0') && (VolName[2] <= L'9')) {
+ VolNum = Atoi(VolName + 2);
+ if (VolNum != Volume->VolNumber) {
+ ScanIt = FALSE;
+ }
+ } else {
+ ScanIt = FALSE;
+ }
+ } // if
+ } // if Path includes volume specification
+ MyFreePool(PathCopy);
+ MyFreePool(VolName);
+ VolName = NULL;
+
+ // See if Volume is in GlobalConfig.DontScanDirs....
while ((DontScanDir = FindCommaDelimited(GlobalConfig.DontScanDirs, i++)) && ScanIt) {
SplitVolumeAndFilename(&DontScanDir, &VolName);
CleanUpPathNameSlashes(DontScanDir);
ScanIt = FALSE;
}
MyFreePool(DontScanDir);
+ MyFreePool(VolName);
DontScanDir = NULL;
- }
+ } // while()
+
return ScanIt;
} // BOOLEAN ShouldScan()
SPrint(FileName, 255, L"\\%s", DirEntry->FileName);
CleanUpPathNameSlashes(FileName);
- if( /* (!StriSubCmp(L"vmlinuz", DirEntry->FileName) ||
- !StriSubCmp(L"bzImage", DirEntry->FileName)) && */
- !IsValidLoader(Volume, FileName))
+ if(!IsValidLoader(Volume, FileName))
continue;
NewLoader = AllocateZeroPool(sizeof(struct LOADER_LIST));
CHAR16 FileName[256], *Directory, *MatchPatterns, *VolName = NULL, *SelfPath;
UINTN i, Length;
BOOLEAN ScanFallbackLoader = TRUE;
+ BOOLEAN FoundBRBackup = FALSE;
MatchPatterns = StrDuplicate(LOADER_MATCH_PATTERNS);
if (GlobalConfig.ScanAllLinux)
} // if should scan Mac directory
// check for Microsoft boot loader/menu
- StrCpy(FileName, L"EFI\\Microsoft\\Boot\\bootmgfw.efi");
- if (FileExists(Volume->RootDir, FileName) && ShouldScan(Volume, L"EFI\\Microsoft\\Boot") &&
- !IsIn(L"bootmgfw.efi", GlobalConfig.DontScanFiles)) {
- AddLoaderEntry(FileName, L"Microsoft EFI boot", Volume);
- if (DuplicatesFallback(Volume, FileName))
- ScanFallbackLoader = FALSE;
- }
+ if (ShouldScan(Volume, L"EFI\\Microsoft\\Boot")) {
+ StrCpy(FileName, L"EFI\\Microsoft\\Boot\\bkpbootmgfw.efi");
+ if (FileExists(Volume->RootDir, FileName) && !IsIn(L"bkpbootmgfw.efi", GlobalConfig.DontScanFiles)) {
+ AddLoaderEntry(FileName, L"Microsoft EFI boot (Boot Repair backup)", Volume);
+ FoundBRBackup = TRUE;
+ if (DuplicatesFallback(Volume, FileName))
+ ScanFallbackLoader = FALSE;
+ }
+ StrCpy(FileName, L"EFI\\Microsoft\\Boot\\bootmgfw.efi");
+ if (FileExists(Volume->RootDir, FileName) && !IsIn(L"bootmgfw.efi", GlobalConfig.DontScanFiles)) {
+ if (FoundBRBackup)
+ AddLoaderEntry(FileName, L"Supposed Microsoft EFI boot (probably GRUB)", Volume);
+ else
+ AddLoaderEntry(FileName, L"Microsoft EFI boot", Volume);
+ if (DuplicatesFallback(Volume, FileName))
+ ScanFallbackLoader = FALSE;
+ }
+ } // if
// scan the root directory for EFI executables
if (ScanLoaderDir(Volume, L"\\", MatchPatterns))
// Scan user-specified (or additional default) directories....
i = 0;
while ((Directory = FindCommaDelimited(GlobalConfig.AlsoScan, i++)) != NULL) {
- SplitVolumeAndFilename(&Directory, &VolName);
- CleanUpPathNameSlashes(Directory);
- Length = StrLen(Directory);
- if ((Length > 0) && ScanLoaderDir(Volume, Directory, MatchPatterns))
- ScanFallbackLoader = FALSE;
+ if (ShouldScan(Volume, Directory)) {
+ SplitVolumeAndFilename(&Directory, &VolName);
+ CleanUpPathNameSlashes(Directory);
+ Length = StrLen(Directory);
+ if ((Length > 0) && ScanLoaderDir(Volume, Directory, MatchPatterns))
+ ScanFallbackLoader = FALSE;
+ } // if
MyFreePool(Directory);
MyFreePool(VolName);
} // while
// Locates boot loaders. NOTE: This assumes that GlobalConfig.LegacyType is set correctly.
static VOID ScanForBootloaders(VOID) {
- UINTN i;
+ UINTN i;
ScanVolumes();
FindLegacyBootType();
if (GlobalConfig.LegacyType == LEGACY_TYPE_MAC)
CopyMem(GlobalConfig.ScanFor, "ihebocm ", NUM_SCAN_OPTIONS);
- ScanVolumes();
ReadConfig(CONFIG_FILE_NAME);
+ ScanVolumes();
InitScreen();
WarnIfLegacyProblems();