X-Git-Url: https://code.delx.au/refind/blobdiff_plain/39f21d099c9fb310bae28b54dc68d266ed610ed7..119f040f3c096ef2ab59f5d02059e9d872047dcd:/refind/main.c diff --git a/refind/main.c b/refind/main.c index 67381c6..9f4578f 100644 --- a/refind/main.c +++ b/refind/main.c @@ -64,10 +64,6 @@ // // variables -// #ifdef EFIX64 -// foo -// #endif - #define MACOSX_LOADER_PATH L"System\\Library\\CoreServices\\boot.efi" #if defined (EFIX64) #define SHELL_NAMES L"\\EFI\\tools\\shell.efi,\\EFI\\tools\\shellx64.efi,\\shellx64.efi" @@ -132,7 +128,7 @@ static VOID AboutrEFInd(VOID) if (AboutMenu.EntryCount == 0) { AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT); - AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.6.2.2"); + AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.6.4"); AddMenuInfoLine(&AboutMenu, L""); AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer"); AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012 Roderick W. Smith"); @@ -896,27 +892,25 @@ static VOID CleanUpLoaderList(struct LOADER_LIST *LoaderList) { // Returns FALSE if the specified file/volume matches the GlobalConfig.DontScanDirs // or GlobalConfig.DontScanVolumes specification, or if Path points to a volume // other than the one specified by Volume. Returns TRUE if none of these conditions -// is true. Also reduces *Path to a path alone, with no volume specification. +// is met -- that is, if the path is eligible for scanning. Also reduces *Path to a +// path alone, with no volume specification. static BOOLEAN ShouldScan(REFIT_VOLUME *Volume, CHAR16 *Path) { CHAR16 *VolName = NULL, *DontScanDir; UINTN i = 0, VolNum; BOOLEAN ScanIt = TRUE; - if (IsIn(Volume->VolName, GlobalConfig.DontScanVolumes)) { - Print(L"Not scanning volume %s\n", Volume->VolName); - PauseForKey(); + if (IsIn(Volume->VolName, GlobalConfig.DontScanVolumes)) return FALSE; - } while ((DontScanDir = FindCommaDelimited(GlobalConfig.DontScanDirs, i++)) && ScanIt) { SplitVolumeAndFilename(&DontScanDir, &VolName); CleanUpPathNameSlashes(DontScanDir); if (VolName != NULL) { - if ((StriCmp(VolName, Volume->VolName) == 0) && (StriCmp(DontScanDir, Path))) + if ((StriCmp(VolName, Volume->VolName) == 0) && (StriCmp(DontScanDir, Path) == 0)) ScanIt = FALSE; - if ((VolName[0] == L'f') && (VolName[1] == L's') && (VolName[2] >= L'0') && (VolName[2] <= '9')) { + 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) && (StriCmp(DontScanDir, Path))) + if ((VolNum == Volume->VolNumber) && (StriCmp(DontScanDir, Path) == 0)) ScanIt = FALSE; } } else { @@ -943,8 +937,6 @@ static VOID ScanLoaderDir(IN REFIT_VOLUME *Volume, IN CHAR16 *Path, IN CHAR16 *P if ((!SelfDirPath || !Path || ((StriCmp(Path, SelfDirPath) == 0) && (Volume->DeviceHandle != SelfVolume->DeviceHandle)) || (StriCmp(Path, SelfDirPath) != 0)) && (ShouldScan(Volume, Path))) { -// (!IsIn(Path, GlobalConfig.DontScanDirs)) && -// (!IsIn(Volume->VolName, GlobalConfig.DontScanVolumes))) { // look through contents of the directory DirIterOpen(Volume->RootDir, Path, &DirIter); while (DirIterNext(&DirIter, 2, Pattern, &DirEntry)) { @@ -989,8 +981,8 @@ static VOID ScanEfiFiles(REFIT_VOLUME *Volume) { EFI_STATUS Status; REFIT_DIR_ITER EfiDirIter; EFI_FILE_INFO *EfiDirEntry; - CHAR16 FileName[256], *Directory, *MatchPatterns; - UINTN i, Length; + CHAR16 FileName[256], *Directory, *MatchPatterns, *VolName = NULL; + UINTN i, Length, VolNum; MatchPatterns = StrDuplicate(LOADER_MATCH_PATTERNS); if (GlobalConfig.ScanAllLinux) @@ -1036,11 +1028,17 @@ static VOID ScanEfiFiles(REFIT_VOLUME *Volume) { // Scan user-specified (or additional default) directories.... i = 0; while ((Directory = FindCommaDelimited(GlobalConfig.AlsoScan, i++)) != NULL) { + VolNum = VOL_DONTSCAN; + SplitVolumeAndFilename(&Directory, &VolName); CleanUpPathNameSlashes(Directory); Length = StrLen(Directory); - if (Length > 0) + if (VolName && (Length > 0) && (StrLen(VolName) > 2) && (VolName[0] == L'f') && (VolName[1] == L's') && + (VolName[2] >= L'0') && (VolName[2] <= L'9')) + VolNum = Atoi(VolName + 2); + if ((Length > 0) && ((VolName == NULL) || (StriCmp(VolName, Volume->VolName) == 0) || (Volume->VolNumber == VolNum))) ScanLoaderDir(Volume, Directory, MatchPatterns); MyFreePool(Directory); + MyFreePool(VolName); } // while } // if } // static VOID ScanEfiFiles() @@ -2020,6 +2018,7 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) FindLegacyBootType(); if (GlobalConfig.LegacyType == LEGACY_TYPE_MAC) CopyMem(GlobalConfig.ScanFor, "ihebocm ", NUM_SCAN_OPTIONS); + ScanVolumes(); ReadConfig(CONFIG_FILE_NAME); InitScreen(); @@ -2032,7 +2031,7 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) // further bootstrap (now with config available) SetupScreen(); MokProtocol = SecureBootSetup(); - ScanVolumes(); +// ScanVolumes(); LoadDrivers(); ScanForBootloaders(); ScanForTools();