#define EFI_SECURITY_VIOLATION EFIERR (26)
#endif
#endif
-//#else
+
#include "../EfiLib/BdsHelper.h"
#include "../EfiLib/legacy.h"
#ifndef EFI_OS_INDICATIONS_BOOT_TO_FW_UI
#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001ULL
-#else
+#endif
+
+#ifdef __MAKEWITH_TIANO
#define LibLocateHandle gBS->LocateHandleBuffer
#endif
if (AboutMenu.EntryCount == 0) {
AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
- AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.8.0.3");
+ AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.8.1");
AddMenuInfoLine(&AboutMenu, L"");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012-2014 Roderick W. Smith");
MergeStrings(&NewFile, Path, 0);
MergeStrings(&NewFile, Filename, L'\\');
MergeStrings(&NewFile, L".efi.signed", 0);
- if (FileExists(Volume->RootDir, NewFile))
- retval = TRUE;
- MyFreePool(NewFile);
+ if (NewFile != NULL) {
+ CleanUpPathNameSlashes(NewFile);
+ if (FileExists(Volume->RootDir, NewFile))
+ retval = TRUE;
+ MyFreePool(NewFile);
+ } // if
return retval;
} // BOOLEAN HasSignedCounterpart()
BOOLEAN FoundFallbackDuplicate = FALSE;
if ((!SelfDirPath || !Path || ((StriCmp(Path, SelfDirPath) == 0) && (Volume->DeviceHandle != SelfVolume->DeviceHandle)) ||
- (StriCmp(Path, SelfDirPath) != 0)) &&
- (ShouldScan(Volume, Path))) {
+ (StriCmp(Path, SelfDirPath) != 0)) && (ShouldScan(Volume, Path))) {
// look through contents of the directory
DirIterOpen(Volume->RootDir, Path, &DirIter);
while (DirIterNext(&DirIter, 2, Pattern, &DirEntry)) {
Entry->me.BadgeImage = Volume->VolBadgeImage;
Entry->Volume = Volume;
Entry->LoadOptions = (Volume->DiskKind == DISK_KIND_OPTICAL) ? L"CD" :
- ((Volume->DiskKind == DISK_KIND_EXTERNAL) ? L"USB" : L"HD");
+ ((Volume->DiskKind == DISK_KIND_EXTERNAL) ? L"USB" : L"HD");
Entry->Enabled = TRUE;
// create the submenu
LEGACY_ENTRY *Entry, *SubEntry;
REFIT_MENU_SCREEN *SubScreen;
CHAR16 ShortcutLetter = 0;
- CHAR16 *LegacyDescription = BdsOption->Description;
+ CHAR16 *LegacyDescription = StrDuplicate(BdsOption->Description);
if (IsInSubstring(LegacyDescription, GlobalConfig.DontScanVolumes))
return NULL;
+ // Remove stray spaces, since many EFIs produce descriptions with lots of
+ // extra spaces, especially at the end; this throws off centering of the
+ // description on the screen....
+ LimitStringLength(LegacyDescription, 100);
+
// prepare the menu entry
Entry = AllocateZeroPool(sizeof(LEGACY_ENTRY));
Entry->me.Title = AllocateZeroPool(256 * sizeof(CHAR16));
return (NumFound);
}
+#ifdef __MAKEWITH_GNUEFI
static EFI_STATUS ConnectAllDriversToAllControllers(VOID)
{
EFI_STATUS Status;
MyFreePool (AllHandleBuffer);
return Status;
} /* EFI_STATUS ConnectAllDriversToAllControllers() */
+#else
+static EFI_STATUS ConnectAllDriversToAllControllers(VOID) {
+ BdsLibConnectAllDriversToAllControllers();
+ return 0;
+}
+#endif
// Load all EFI drivers from rEFInd's "drivers" subdirectory and from the
// directories specified by the user in the "scan_driver_dirs" configuration
GlobalConfig.LegacyType = LEGACY_TYPE_NONE;
- // UEFI-style legacy BIOS support is available only with the TianoCore EDK2
- // build environment, and then only with some EFI implementations....
+ // UEFI-style legacy BIOS support is available only with some EFI implementations....
Status = refit_call3_wrapper(gBS->LocateProtocol, &gEfiLegacyBootProtocolGuid, NULL, (VOID **) &LegacyBios);
if (!EFI_ERROR (Status))
GlobalConfig.LegacyType = LEGACY_TYPE_UEFI;
GlobalConfig.LegacyType = LEGACY_TYPE_MAC;
} // static VOID FindLegacyBootType
-// Warn the user if legacy OS scans are enabled but the firmware or this
-// application can't support them....
-static VOID WarnIfLegacyProblems() {
+// Warn the user if legacy OS scans are enabled but the firmware can't support them....
+static VOID WarnIfLegacyProblems(VOID) {
BOOLEAN found = FALSE;
UINTN i = 0;
if (GlobalConfig.LegacyType == LEGACY_TYPE_NONE) {
do {
- if (GlobalConfig.ScanFor[i] == 'h' || GlobalConfig.ScanFor[i] == 'b' || GlobalConfig.ScanFor[i] == 'c')
+ if (GlobalConfig.ScanFor[i] == 'h' || GlobalConfig.ScanFor[i] == 'b' || GlobalConfig.ScanFor[i] == 'c' ||
+ GlobalConfig.ScanFor[i] == 'H' || GlobalConfig.ScanFor[i] == 'B' || GlobalConfig.ScanFor[i] == 'C')
found = TRUE;
i++;
} while ((i < NUM_SCAN_OPTIONS) && (!found));
+
if (found) {
Print(L"NOTE: refind.conf's 'scanfor' line specifies scanning for one or more legacy\n");
Print(L"(BIOS) boot options; however, this is not possible because your computer lacks\n");
- Print(L"the necessary Compatibility Support Module (CSM) support.\n");
+ Print(L"the necessary Compatibility Support Module (CSM) support or that support is\n");
+ Print(L"disabled in your firmware.\n");
PauseForKey();
} // if (found)
} // if no legacy support
} // static VOID ScanForTools
// Rescan for boot loaders
-VOID RescanAll(VOID) {
+static VOID RescanAll(BOOLEAN DisplayMessage) {
EG_PIXEL BGColor;
BGColor.b = 255;
BGColor.g = 175;
BGColor.r = 100;
BGColor.a = 0;
- egDisplayMessage(L"Scanning for new boot loaders; please wait....", &BGColor);
+ if (DisplayMessage)
+ egDisplayMessage(L"Scanning for new boot loaders; please wait....", &BGColor);
FreeList((VOID ***) &(MainMenu.Entries), &MainMenu.EntryCount);
MainMenu.Entries = NULL;
MainMenu.EntryCount = 0;
CopyMem(GlobalConfig.ScanFor, "ihebocm ", NUM_SCAN_OPTIONS);
SetConfigFilename(ImageHandle);
ReadConfig(GlobalConfig.ConfigFilename);
-// ScanVolumes();
InitScreen();
WarnIfLegacyProblems();
BGColor.g = 175;
BGColor.r = 100;
BGColor.a = 0;
- egDisplayMessage(L"Pausing before disk scan; please wait....", &BGColor);
+ if (GlobalConfig.ScanDelay > 1)
+ egDisplayMessage(L"Pausing before disk scan; please wait....", &BGColor);
for (i = 0; i < GlobalConfig.ScanDelay; i++)
refit_call1_wrapper(BS->Stall, 1000000);
- RescanAll();
+ RescanAll(GlobalConfig.ScanDelay > 1);
} // if
if (GlobalConfig.DefaultSelection)
// The Escape key triggers a re-scan operation....
if (MenuExit == MENU_EXIT_ESCAPE) {
MenuExit = 0;
- RescanAll();
+ RescanAll(TRUE);
continue;
}