]> code.delx.au - refind/blobdiff - refind/main.c
Fixed no timeout with keyboard disconnected; better duplicate loader
[refind] / refind / main.c
index ba1d8508cac1b8cc8d55e9dbf919f93713252ad4..1bae40518b6b5453bcfb501b3735e0762773558e 100644 (file)
@@ -132,7 +132,7 @@ static VOID AboutrEFInd(VOID)
 
     if (AboutMenu.EntryCount == 0) {
         AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
-        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.6.8");
+        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.6.8.1");
         AddMenuInfoLine(&AboutMenu, L"");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012 Roderick W. Smith");
@@ -985,6 +985,7 @@ static BOOLEAN DuplicatesFallback(IN REFIT_VOLUME *Volume, IN CHAR16 *FileName)
       FileInfo = LibFileInfo(FileHandle);
       FileSize = FileInfo->FileSize;
    } else {
+      refit_call1_wrapper(FileHandle->Close, FileHandle);
       return FALSE;
    }
 
@@ -1093,7 +1094,7 @@ static VOID ScanEfiFiles(REFIT_VOLUME *Volume) {
    EFI_STATUS              Status;
    REFIT_DIR_ITER          EfiDirIter;
    EFI_FILE_INFO           *EfiDirEntry;
-   CHAR16                  FileName[256], *Directory, *MatchPatterns, *VolName = NULL;
+   CHAR16                  FileName[256], *Directory, *MatchPatterns, *VolName = NULL, *SelfPath;
    UINTN                   i, Length;
    BOOLEAN                 ScanFallbackLoader = TRUE;
 
@@ -1158,6 +1159,12 @@ static VOID ScanEfiFiles(REFIT_VOLUME *Volume) {
          MyFreePool(VolName);
       } // while
 
+      // Don't scan the fallback loader if it's on the same volume and a duplicate of rEFInd itself....
+      SelfPath = DevicePathToStr(SelfLoadedImage->FilePath);
+      CleanUpPathNameSlashes(SelfPath);
+      if ((Volume->DeviceHandle == SelfLoadedImage->DeviceHandle) && DuplicatesFallback(Volume, SelfPath))
+         ScanFallbackLoader = FALSE;
+
       // If not a duplicate & if it exists & if it's not us, create an entry
       // for the fallback boot loader
       if (ScanFallbackLoader && FileExists(Volume->RootDir, FALLBACK_FULLNAME) && ShouldScan(Volume, L"EFI\\BOOT")) {