mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-04-21 13:49:42 +00:00
Add some more IS-CAB extensions
This commit is contained in:
@@ -4,6 +4,84 @@ namespace SabreTools.Serialization
|
||||
{
|
||||
public static partial class Extensions
|
||||
{
|
||||
#region File Descriptors
|
||||
|
||||
/// <summary>
|
||||
/// Indicate if a file descriptor represents a compressed file
|
||||
/// </summary>
|
||||
/// <param name="fileDescriptor">File descriptor to check</param>
|
||||
/// <returns>True if the file is flagged as compressed, false otherwise</returns>
|
||||
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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indicate if a file descriptor represents an invalid file
|
||||
/// </summary>
|
||||
/// <param name="fileDescriptor">File descriptor to check</param>
|
||||
/// <returns>True if the file is flagged as invalid, false otherwise</returns>
|
||||
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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indicate if a file descriptor represents an obfuscated file
|
||||
/// </summary>
|
||||
/// <param name="fileDescriptor">File descriptor to check</param>
|
||||
/// <returns>True if the file is flagged as obfuscated, false otherwise</returns>
|
||||
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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indicate if a file descriptor represents a split file
|
||||
/// </summary>
|
||||
/// <param name="fileDescriptor">File descriptor to check</param>
|
||||
/// <returns>True if the file is flagged as split, false otherwise</returns>
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// Get the major version of an InstallShield Cabinet
|
||||
/// </summary>
|
||||
@@ -43,5 +121,7 @@ namespace SabreTools.Serialization
|
||||
|
||||
return (int)majorVersion;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user