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