From dcbecb59b62d07f29d4d6a6ed2212143d0664525 Mon Sep 17 00:00:00 2001 From: srs5694 Date: Sun, 27 Jan 2013 15:56:14 -0500 Subject: [PATCH] Code cleanup & consolidation of icon code; minor patch to ext4fs driver --- filesystems/fsw_ext4.c | 14 ++++++------ libeg/image.c | 50 +++++++++++++++++++++++------------------- libeg/libeg.h | 1 + refind/config.c | 1 - refind/icns.c | 17 -------------- refind/icns.h | 1 - refind/lib.c | 4 ++-- refind/main.c | 10 +++------ 8 files changed, 41 insertions(+), 57 deletions(-) diff --git a/filesystems/fsw_ext4.c b/filesystems/fsw_ext4.c index abef2cb..42f136d 100644 --- a/filesystems/fsw_ext4.c +++ b/filesystems/fsw_ext4.c @@ -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"), diff --git a/libeg/image.c b/libeg/image.c index 5fc915d..a688bdf 100644 --- a/libeg/image.c +++ b/libeg/image.c @@ -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() diff --git a/libeg/libeg.h b/libeg/libeg.h index 93333ee..0275410 100644 --- a/libeg/libeg.h +++ b/libeg/libeg.h @@ -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); diff --git a/refind/config.c b/refind/config.c index 384d334..cc0a931 100644 --- a/refind/config.c +++ b/refind/config.c @@ -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); diff --git a/refind/icns.c b/refind/icns.c index 7b3af02..f11ab1b 100644 --- a/refind/icns.c +++ b/refind/icns.c @@ -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 }; diff --git a/refind/icns.h b/refind/icns.h index 46c4236..c389abc 100644 --- a/refind/icns.h +++ b/refind/icns.h @@ -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); diff --git a/refind/lib.c b/refind/lib.c index 1930e07..bf2c2ef 100644 --- a/refind/lib.c +++ b/refind/lib.c @@ -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) diff --git a/refind/main.c b/refind/main.c index e27e149..0d02ae6 100644 --- a/refind/main.c +++ b/refind/main.c @@ -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; } } -- 2.39.2