]> code.delx.au - refind/commitdiff
Code cleanup & consolidation of icon code; minor patch to ext4fs driver
authorsrs5694 <srs5694@users.sourceforge.net>
Sun, 27 Jan 2013 20:56:14 +0000 (15:56 -0500)
committersrs5694 <srs5694@users.sourceforge.net>
Sun, 27 Jan 2013 20:56:14 +0000 (15:56 -0500)
filesystems/fsw_ext4.c
libeg/image.c
libeg/libeg.h
refind/config.c
refind/icns.c
refind/icns.h
refind/lib.c
refind/main.c

index abef2cbe0afe05853689cb6a2a7f88d1a869692a..42f136d763f0cfec7bb7ee4e80649860751e2506 100644 (file)
@@ -73,9 +73,9 @@ struct fsw_fstype_table   FSW_FSTYPE_TABLE_NAME(ext4) = {
 };
 
 
-static inline int test_root(fsw_u32 a, int b)
+static __inline int test_root(fsw_u32 a, int b)
 {
-        int num = b;
+        fsw_u32 num = b;
 
         while (a > num)
                 num *= b;
@@ -93,7 +93,7 @@ static int fsw_ext4_group_sparse(fsw_u32 group)
 }
 
 /* calculate the first block number of the group */
-static inline fsw_u32
+static __inline fsw_u32
 fsw_ext4_group_first_block_no(struct ext4_super_block *sb, fsw_u32 group_no)
 {
         return group_no * (fsw_u32)EXT4_BLOCKS_PER_GROUP(sb) +
@@ -219,7 +219,7 @@ static fsw_status_t fsw_ext4_volume_mount(struct fsw_ext4_volume *vol)
             return status;
 
         // Get group descriptor table and block number of inode table...
-        gdesc = (struct ext4_group_desc *)(buffer + gdesc_index * vol->sb->s_desc_size);
+        gdesc = (struct ext4_group_desc *)((char *)buffer + gdesc_index * vol->sb->s_desc_size);
         vol->inotab_bno[groupno] = gdesc->bg_inode_table_lo;
 
         fsw_block_release(vol, gdesc_bno, buffer);
@@ -400,7 +400,7 @@ static fsw_status_t fsw_ext4_get_by_extent(struct fsw_ext4_volume *vol, struct f
     buffer = (void *)dno->raw->i_block;
     buf_offset = 0;
     while(1) {
-        ext4_extent_header = (struct ext4_extent_header *)buffer + buf_offset;
+        ext4_extent_header = (struct ext4_extent_header *)((char *)buffer + buf_offset);
         buf_offset += sizeof(struct ext4_extent_header);
         FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: extent header with %d entries\n"), 
                       ext4_extent_header->eh_entries));
@@ -412,7 +412,7 @@ static fsw_status_t fsw_ext4_get_by_extent(struct fsw_ext4_volume *vol, struct f
             if(ext4_extent_header->eh_depth == 0)
             {
                 // Leaf node, the header follows actual extents
-                ext4_extent = (struct ext4_extent *)(buffer + buf_offset);
+                ext4_extent = (struct ext4_extent *)((char *)buffer + buf_offset);
                 buf_offset += sizeof(struct ext4_extent);
                 FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: extent node cover %d...\n"), ext4_extent->ee_block));
 
@@ -428,7 +428,7 @@ static fsw_status_t fsw_ext4_get_by_extent(struct fsw_ext4_volume *vol, struct f
             {
                 FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: index extents, depth %d\n"), 
                           ext4_extent_header->eh_depth));
-                ext4_extent_idx = (struct ext4_extent_idx *)(buffer + buf_offset);
+                ext4_extent_idx = (struct ext4_extent_idx *)((char *)buffer + buf_offset);
                 buf_offset += sizeof(struct ext4_extent_idx);
 
                 FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: index node covers block %d...\n"),
index 5fc915dfc81a0b5e4364911780493459c01a9051..a688bdf128545b4d86bc51a01be3b3feffc703c2 100644 (file)
@@ -286,6 +286,26 @@ EG_IMAGE * egLoadIcon(IN EFI_FILE* BaseDir, IN CHAR16 *Path, IN UINTN IconSize)
     return NewImage;
 } // EG_IMAGE *egLoadIcon()
 
+// Returns an icon of any type from the specified subdirectory using the specified
+// base name. All directory references are relative to BaseDir. For instance, if
+// SubdirName is "myicons" and BaseName is "os_linux", this function will return
+// an image based on "myicons/os_linux.icns" or "myicons/os_linux.png", in that
+// order of preference. Returns NULL if no such file is a valid icon file.
+EG_IMAGE * egLoadIconAnyType(IN EFI_FILE *BaseDir, IN CHAR16 *SubdirName, IN CHAR16 *BaseName, IN UINTN IconSize) {
+   EG_IMAGE *Image = NULL;
+   CHAR16 *Extension;
+   CHAR16 FileName[256];
+   UINTN i = 0;
+
+   while (((Extension = FindCommaDelimited(ICON_EXTENSIONS, i++)) != NULL) && (Image == NULL)) {
+      SPrint(FileName, 255, L"%s\\%s.%s", SubdirName, BaseName, Extension);
+      Image = egLoadIcon(BaseDir, FileName, IconSize);
+      MyFreePool(Extension);
+   } // while()
+
+   return Image;
+} // EG_IMAGE *egLoadIconAnyType()
+
 // Returns an icon with any extension in ICON_EXTENSIONS from either the directory
 // specified by GlobalConfig.IconsDir or DEFAULT_ICONS_DIR. The input BaseName
 // should be the icon name without an extension. For instance, if BaseName is
@@ -295,30 +315,16 @@ EG_IMAGE * egLoadIcon(IN EFI_FILE* BaseDir, IN CHAR16 *Path, IN UINTN IconSize)
 // order of preference. Returns NULL if no such icon can be found. All file
 // references are relative to SelfDir.
 EG_IMAGE * egFindIcon(IN CHAR16 *BaseName, IN UINTN IconSize) {
-   CHAR16 *LoadDir, *Extension;
-   CHAR16 FileName[256];
-   UINTN i;
    EG_IMAGE *Image = NULL;
 
-   if (GlobalConfig.IconsDir != NULL)
-      LoadDir = GlobalConfig.IconsDir;
-   else
-      LoadDir = StrDuplicate(DEFAULT_ICONS_DIR);
-
-   while ((LoadDir != NULL) && (Image == NULL)) {
-      i = 0;
-      while (((Extension = FindCommaDelimited(ICON_EXTENSIONS, i++)) != NULL) && (Image == NULL)) {
-         SPrint(FileName, 255, L"%s\\%s.%s", LoadDir, BaseName, Extension);
-         Image = egLoadIcon(SelfDir, FileName, IconSize);
-         MyFreePool(Extension);
-      } // while()
-      if (LoadDir == GlobalConfig.IconsDir) {
-         LoadDir = StrDuplicate(DEFAULT_ICONS_DIR);
-      } else {
-         MyFreePool(LoadDir);
-         LoadDir = NULL;
-      } // if/else
-   } // while()
+   if (GlobalConfig.IconsDir != NULL) {
+      Image = egLoadIconAnyType(SelfDir, GlobalConfig.IconsDir, BaseName, IconSize);
+   }
+
+   if (Image == NULL) {
+      Image = egLoadIconAnyType(SelfDir, DEFAULT_ICONS_DIR, BaseName, IconSize);
+   }
+
    return Image;
 } // EG_IMAGE * egFindIcon()
 
index 93333ee5bb0b933966e12a7c0117785796f26827..0275410825f9ed232935281d258c933e957e28d8 100644 (file)
@@ -104,6 +104,7 @@ VOID egFreeImage(IN EG_IMAGE *Image);
 
 EG_IMAGE * egLoadImage(IN EFI_FILE* BaseDir, IN CHAR16 *FileName, IN BOOLEAN WantAlpha);
 EG_IMAGE * egLoadIcon(IN EFI_FILE* BaseDir, IN CHAR16 *FileName, IN UINTN IconSize);
+EG_IMAGE * egLoadIconAnyType(IN EFI_FILE *BaseDir, IN CHAR16 *SubdirName, IN CHAR16 *BaseName, IN UINTN IconSize);
 EG_IMAGE * egFindIcon(IN CHAR16 *BaseName, IN UINTN IconSize);
 EG_IMAGE * egPrepareEmbeddedImage(IN EG_EMBEDDED_IMAGE *EmbeddedImage, IN BOOLEAN WantAlpha);
 
index 384d334cf6181ab3a03c2ead76ec6f1a5ca9960c..cc0a93170b3b38999c40bdca222597e69c60efec 100644 (file)
@@ -683,7 +683,6 @@ static LOADER_ENTRY * AddStanzaEntries(REFIT_FILE *File, REFIT_VOLUME *Volume, C
 
       } else if ((StriCmp(TokenList[0], L"icon") == 0) && (TokenCount > 1)) {
          MyFreePool(Entry->me.Image);
-//         Entry->me.Image = LoadIcns(CurrentVolume->RootDir, TokenList[1], 128);
          Entry->me.Image = egLoadIcon(CurrentVolume->RootDir, TokenList[1], 128);
          if (Entry->me.Image == NULL) {
             Entry->me.Image = DummyImage(128);
index 7b3af026b4509c6b8db3efb310a26c429dfc2c83..f11ab1b983a25ff09fecae667a261ded002b22a8 100644 (file)
@@ -122,23 +122,6 @@ EG_IMAGE * LoadOSIcon(IN CHAR16 *OSIconName OPTIONAL, IN CHAR16 *FallbackIconNam
 } /* EG_IMAGE * LoadOSIcon() */
 
 
-// Load an image from a .icns or .png file. FileNames contains a comma-delimited
-// list of potential filanems; the function tries each in turn until it finds
-// a loadable icon. If no file has a valid icon, it returns NULL.
-EG_IMAGE * LoadIcns(IN EFI_FILE_HANDLE BaseDir, IN CHAR16 *FileNames, IN UINTN PixelSize) {
-   CHAR16   *FileName;
-   EG_IMAGE *Image = NULL;
-   UINTN    Index = 0;
-
-   if (GlobalConfig.TextOnly)      // skip loading if it's not used anyway
-      return NULL;
-
-   while (((FileName = FindCommaDelimited(FileNames, Index++)) != NULL) && (Image == NULL)) {
-      Image = egLoadIcon(BaseDir, FileName, PixelSize);
-   }
-   return Image;
-} // EG_IMAGE * LoadIcns()
-
 static EG_PIXEL BlackPixel  = { 0x00, 0x00, 0x00, 0 };
 //static EG_PIXEL YellowPixel = { 0x00, 0xff, 0xff, 0 };
 
index 46c42368c741c6ffd27061fe99aec92140c66316..c389abce23796e0bab27a8a477c02e6e81f1d7da 100644 (file)
@@ -51,7 +51,6 @@
 
 EG_IMAGE * LoadOSIcon(IN CHAR16 *OSIconName OPTIONAL, IN CHAR16 *FallbackIconName, BOOLEAN BootLogo);
 
-EG_IMAGE * LoadIcns(IN EFI_FILE_HANDLE BaseDir, IN CHAR16 *FileName, IN UINTN PixelSize);
 EG_IMAGE * DummyImage(IN UINTN PixelSize);
 
 EG_IMAGE * BuiltinIcon(IN UINTN Id);
index 1930e079e63b4b8f2d06da07537228c7a50ccd6a..bf2c2ef27b38e60f79a4840f5cf5abc7d930c124 100644 (file)
@@ -852,9 +852,9 @@ VOID ScanVolume(REFIT_VOLUME *Volume)
 
     // get custom volume icon if present
     if (!Volume->VolBadgeImage)
-       Volume->VolBadgeImage = LoadIcns(Volume->RootDir, VOLUME_BADGE_NAMES, 32);
+       Volume->VolBadgeImage = egLoadIconAnyType(Volume->RootDir, L"", L".VolumeBadge", 32);
     if (!Volume->VolIconImage)
-       Volume->VolIconImage = LoadIcns(Volume->RootDir, VOLUME_ICON_NAMES, 128);
+       Volume->VolIconImage = egLoadIconAnyType(Volume->RootDir, L"", L".VolumeIcon", 128);
 } // ScanVolume()
 
 static VOID ScanExtendedPartition(REFIT_VOLUME *WholeDiskVolume, MBR_PARTITION_INFO *MbrEntry)
index e27e149e3c63e31a5051feb381ab6cdfeb5b5df9..0d02ae676a6883ce491cd314bfc8d4185ddda890 100644 (file)
@@ -134,7 +134,7 @@ static VOID AboutrEFInd(VOID)
 
     if (AboutMenu.EntryCount == 0) {
         AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
-        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.6.6.4");
+        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.6.6.5");
         AddMenuInfoLine(&AboutMenu, L"");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012 Roderick W. Smith");
@@ -1008,7 +1008,6 @@ static BOOLEAN ScanLoaderDir(IN REFIT_VOLUME *Volume, IN CHAR16 *Path, IN CHAR16
     struct LOADER_LIST      *LoaderList = NULL, *NewLoader;
     BOOLEAN                 FoundFallbackDuplicate = FALSE;
 
-//    Print(L"Entering ScanLoaderDir(), scanning '%s' for pattern '%s'\n", Path, Pattern);
     if ((!SelfDirPath || !Path || ((StriCmp(Path, SelfDirPath) == 0) && (Volume->DeviceHandle != SelfVolume->DeviceHandle)) ||
            (StriCmp(Path, SelfDirPath) != 0)) &&
            (ShouldScan(Volume, Path))) {
@@ -1054,7 +1053,7 @@ static BOOLEAN ScanLoaderDir(IN REFIT_VOLUME *Volume, IN CHAR16 *Path, IN CHAR16
           CheckError(Status, FileName);
        } // if (Status != EFI_NOT_FOUND)
     } // if not scanning our own directory
-//    PauseForKey();
+
     return FoundFallbackDuplicate;
 } /* static VOID ScanLoaderDir() */
 
@@ -1477,8 +1476,6 @@ static LEGACY_ENTRY * AddLegacyEntryUEFI(BDS_COMMON_OPTION *BdsOption, IN UINT16
     CHAR16                  ShortcutLetter = 0;
     CHAR16 *LegacyDescription = BdsOption->Description;
 
-//    ScanVolume(Volume);
-
     // prepare the menu entry
     Entry = AllocateZeroPool(sizeof(LEGACY_ENTRY));
     Entry->me.Title = AllocateZeroPool(256 * sizeof(CHAR16));
@@ -1490,7 +1487,6 @@ static LEGACY_ENTRY * AddLegacyEntryUEFI(BDS_COMMON_OPTION *BdsOption, IN UINT16
     Entry->LoadOptions     = (DiskType == BBS_CDROM) ? L"CD" :
                              ((DiskType == BBS_USB) ? L"USB" : L"HD");
     Entry->me.BadgeImage   = GetDiskBadge(DiskType);
-//    Entry->me.BadgeImage   = Volume->VolBadgeImage;
     Entry->BdsOption       = BdsOption;
     Entry->Enabled         = TRUE;
 
@@ -1600,7 +1596,7 @@ static VOID ScanLegacyVolume(REFIT_VOLUME *Volume, UINTN VolumeIndex) {
       // check for other bootable entries on the same disk
       for (VolumeIndex2 = 0; VolumeIndex2 < VolumesCount; VolumeIndex2++) {
          if (VolumeIndex2 != VolumeIndex && Volumes[VolumeIndex2]->HasBootCode &&
-            Volumes[VolumeIndex2]->WholeDiskBlockIO == Volume->WholeDiskBlockIO)
+             Volumes[VolumeIndex2]->WholeDiskBlockIO == Volume->WholeDiskBlockIO)
             ShowVolume = FALSE;
       }
    }