]> code.delx.au - refind/commitdiff
Fixed bugs related to loading of customized disk-type badges.
authorsrs5694 <srs5694@users.sourceforge.net>
Thu, 11 Jul 2013 04:09:00 +0000 (00:09 -0400)
committersrs5694 <srs5694@users.sourceforge.net>
Thu, 11 Jul 2013 04:09:00 +0000 (00:09 -0400)
NEWS.txt
filesystems/fsw_efi.c
refind/lib.c
refind/main.c

index b50a38a8b4771573e274d9f67954717cc8e4ace9..67278a83c6ba64f0a761b32ff1d97870b6ef4202 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -1,3 +1,12 @@
+0.7.2 (?/??/2013):
+------------------
+
+- Fixed reading of volume icons from user-specified icons directory, which
+  was broken.
+
+- Fixed handling of /.VolumeBadge.icns (or /.VolumeBadge.png) files, which
+  was broken.
+
 0.7.1 (7/8/2013):
 -----------------
 
index 9107529863135808e7c7fac9f655c12a087c8cc6..0c9b882ccc2327ead9fda19781b1b211237853fa 100644 (file)
@@ -433,7 +433,6 @@ EFI_STATUS EFIAPI fsw_efi_DriverBinding_Stop(IN  EFI_DRIVER_BINDING_PROTOCOL  *T
     EFI_STATUS          Status;
     EFI_FILE_IO_INTERFACE *FileSystem;
     FSW_VOLUME_DATA     *Volume;
-    int                 i;
 
 #if DEBUG_LEVEL
     Print(L"fsw_efi_DriverBinding_Stop\n");
index 5960f365fd7034ccf3491013d595fb601916dc80..d0af83baf4e592500c8bcd9cdf85686e76453fed 100644 (file)
@@ -636,21 +636,27 @@ static VOID ScanVolumeBootcode(REFIT_VOLUME *Volume, BOOLEAN *Bootable)
     }
 } /* VOID ScanVolumeBootcode() */
 
-// default volume badge icon based on disk kind
-static VOID ScanVolumeDefaultIcon(IN OUT REFIT_VOLUME *Volume)
+// Set default volume badge icon based on /.VolumeBadge.{icns|png} file or disk kind
+static VOID SetVolumeBadgeIcon(IN OUT REFIT_VOLUME *Volume)
 {
-    switch (Volume->DiskKind) {
-       case DISK_KIND_INTERNAL:
-          Volume->VolBadgeImage = BuiltinIcon(BUILTIN_ICON_VOL_INTERNAL);
-          break;
-       case DISK_KIND_EXTERNAL:
-          Volume->VolBadgeImage = BuiltinIcon(BUILTIN_ICON_VOL_EXTERNAL);
-          break;
-       case DISK_KIND_OPTICAL:
-          Volume->VolBadgeImage = BuiltinIcon(BUILTIN_ICON_VOL_OPTICAL);
-          break;
-    } // switch()
-}
+   if (Volume->VolBadgeImage == NULL) {
+      Volume->VolBadgeImage = egLoadIconAnyType(Volume->RootDir, L"", L".VolumeBadge", 128);
+   }
+
+   if (Volume->VolBadgeImage == NULL) {
+      switch (Volume->DiskKind) {
+          case DISK_KIND_INTERNAL:
+             Volume->VolBadgeImage = BuiltinIcon(BUILTIN_ICON_VOL_INTERNAL);
+             break;
+          case DISK_KIND_EXTERNAL:
+             Volume->VolBadgeImage = BuiltinIcon(BUILTIN_ICON_VOL_EXTERNAL);
+             break;
+          case DISK_KIND_OPTICAL:
+             Volume->VolBadgeImage = BuiltinIcon(BUILTIN_ICON_VOL_OPTICAL);
+             break;
+      } // switch()
+   }
+} // VOID SetVolumeBadgeIcon()
 
 // Return a string representing the input size in IEEE-1541 units.
 // The calling function is responsible for freeing the allocated memory.
@@ -844,9 +850,6 @@ VOID ScanVolume(REFIT_VOLUME *Volume)
         Volume->HasBootCode = FALSE;
     }
 
-    // default volume icon based on disk kind
-    ScanVolumeDefaultIcon(Volume);
-
     // open the root directory of the volume
     Volume->RootDir = LibOpenRoot(Volume->DeviceHandle);
     if (Volume->RootDir == NULL) {
@@ -858,9 +861,10 @@ VOID ScanVolume(REFIT_VOLUME *Volume)
 
     Volume->VolName = GetVolumeName(Volume);
 
-    // get custom volume icon if present
-    if (!Volume->VolBadgeImage)
-       Volume->VolBadgeImage = egLoadIconAnyType(Volume->RootDir, L"", L".VolumeBadge", 32);
+    // Set volume icon based on .VolumeBadge icon or disk kind
+    SetVolumeBadgeIcon(Volume);
+
+    // get custom volume icons if present
     if (!Volume->VolIconImage)
        Volume->VolIconImage = egLoadIconAnyType(Volume->RootDir, L"", L".VolumeIcon", 128);
 } // ScanVolume()
@@ -918,7 +922,7 @@ static VOID ScanExtendedPartition(REFIT_VOLUME *WholeDiskVolume, MBR_PARTITION_I
                 if (!Bootable)
                     Volume->HasBootCode = FALSE;
 
-                ScanVolumeDefaultIcon(Volume);
+                SetVolumeBadgeIcon(Volume);
 
                 AddListElement((VOID ***) &Volumes, &VolumesCount, Volume);
 
index f71af08105d18e86a22e9a004ec8e54ed17891c7..499d133157a234a31100918c9b92e78363c5cb31 100644 (file)
@@ -147,7 +147,7 @@ static VOID AboutrEFInd(VOID)
 
     if (AboutMenu.EntryCount == 0) {
         AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
-        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.7.1");
+        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.7.1.1");
         AddMenuInfoLine(&AboutMenu, L"");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012-2013 Roderick W. Smith");
@@ -2376,8 +2376,8 @@ 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);
+    ScanVolumes();
 
     InitScreen();
     WarnIfLegacyProblems();