diff --git a/SabreTools.Serialization/Extensions.InstallShieldCabinet.cs b/SabreTools.Serialization/Extensions.InstallShieldCabinet.cs index 08d0e091..ba88e3d2 100644 --- a/SabreTools.Serialization/Extensions.InstallShieldCabinet.cs +++ b/SabreTools.Serialization/Extensions.InstallShieldCabinet.cs @@ -4,6 +4,84 @@ namespace SabreTools.Serialization { public static partial class Extensions { + #region File Descriptors + + /// + /// Indicate if a file descriptor represents a compressed file + /// + /// File descriptor to check + /// True if the file is flagged as compressed, false otherwise + public static bool IsCompressed(this FileDescriptor? fileDescriptor) + { + // Ignore invalid descriptors + if (fileDescriptor == null) + return true; + +#if NET20 || NET35 + return (fileDescriptor.Flags & FileFlags.FILE_COMPRESSED) != 0; +#else + return fileDescriptor.Flags.HasFlag(FileFlags.FILE_COMPRESSED); +#endif + } + + /// + /// Indicate if a file descriptor represents an invalid file + /// + /// File descriptor to check + /// True if the file is flagged as invalid, false otherwise + public static bool IsInvalid(this FileDescriptor? fileDescriptor) + { + // Ignore invalid descriptors + if (fileDescriptor == null) + return true; + +#if NET20 || NET35 + return (fileDescriptor.Flags & FileFlags.FILE_INVALID) != 0; +#else + return fileDescriptor.Flags.HasFlag(FileFlags.FILE_INVALID); +#endif + } + + /// + /// Indicate if a file descriptor represents an obfuscated file + /// + /// File descriptor to check + /// True if the file is flagged as obfuscated, false otherwise + public static bool IsObfuscated(this FileDescriptor? fileDescriptor) + { + // Ignore invalid descriptors + if (fileDescriptor == null) + return false; + +#if NET20 || NET35 + return (fileDescriptor.Flags & FileFlags.FILE_OBFUSCATED) != 0; +#else + return fileDescriptor.Flags.HasFlag(FileFlags.FILE_OBFUSCATED); +#endif + } + + /// + /// Indicate if a file descriptor represents a split file + /// + /// File descriptor to check + /// True if the file is flagged as split, false otherwise + public static bool IsSplit(this FileDescriptor? fileDescriptor) + { + // Ignore invalid descriptors + if (fileDescriptor == null) + return false; + +#if NET20 || NET35 + return (fileDescriptor.Flags & FileFlags.FILE_SPLIT) != 0; +#else + return fileDescriptor.Flags.HasFlag(FileFlags.FILE_SPLIT); +#endif + } + + #endregion + + #region Version + /// /// Get the major version of an InstallShield Cabinet /// @@ -43,5 +121,7 @@ namespace SabreTools.Serialization return (int)majorVersion; } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs index d8ee355a..fe427018 100644 --- a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs +++ b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs @@ -361,11 +361,7 @@ namespace SabreTools.Serialization.Wrappers if (descriptor == null) return false; -#if NET20 || NET35 - if ((descriptor.Flags & FileFlags.FILE_INVALID) != 0) -#else - if (descriptor.Flags.HasFlag(FileFlags.FILE_INVALID)) -#endif + if (descriptor.IsInvalid()) return false; if (descriptor.NameOffset == default) @@ -416,11 +412,7 @@ namespace SabreTools.Serialization.Wrappers return false; } -#if NET20 || NET35 - if ((fileDescriptor.Flags & FileFlags.FILE_INVALID) != 0 || fileDescriptor.DataOffset == 0) -#else - if (fileDescriptor.Flags.HasFlag(FileFlags.FILE_INVALID) || fileDescriptor.DataOffset == 0) -#endif + if (fileDescriptor.IsInvalid() || fileDescriptor.DataOffset == 0) { Console.Error.WriteLine($"File at {index} is marked as invalid"); return false; @@ -435,11 +427,7 @@ namespace SabreTools.Serialization.Wrappers public string? GetFileName(int index) { var descriptor = GetFileDescriptor(index); -#if NET20 || NET35 - if (descriptor == null || (descriptor.Flags & FileFlags.FILE_INVALID) != 0) -#else - if (descriptor == null || descriptor.Flags.HasFlag(FileFlags.FILE_INVALID)) -#endif + if (descriptor == null || descriptor.IsInvalid()) return null; return descriptor.Name; @@ -453,14 +441,9 @@ namespace SabreTools.Serialization.Wrappers if (descriptor == null) return 0; -#if NET20 || NET35 - if ((descriptor.Flags & FileFlags.FILE_COMPRESSED) != 0) -#else - if (descriptor.Flags.HasFlag(FileFlags.FILE_COMPRESSED)) -#endif - return descriptor.CompressedSize; - else - return descriptor.ExpandedSize; + return descriptor.IsCompressed() + ? descriptor.CompressedSize + : descriptor.ExpandedSize; } #endregion