Skip to content

Commit 2cc19a9

Browse files
committed
Add some more IS-CAB extensions
1 parent 6ffb3f4 commit 2cc19a9

File tree

2 files changed

+86
-23
lines changed

2 files changed

+86
-23
lines changed

SabreTools.Serialization/Extensions.InstallShieldCabinet.cs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,84 @@ namespace SabreTools.Serialization
44
{
55
public static partial class Extensions
66
{
7+
#region File Descriptors
8+
9+
/// <summary>
10+
/// Indicate if a file descriptor represents a compressed file
11+
/// </summary>
12+
/// <param name="fileDescriptor">File descriptor to check</param>
13+
/// <returns>True if the file is flagged as compressed, false otherwise</returns>
14+
public static bool IsCompressed(this FileDescriptor? fileDescriptor)
15+
{
16+
// Ignore invalid descriptors
17+
if (fileDescriptor == null)
18+
return true;
19+
20+
#if NET20 || NET35
21+
return (fileDescriptor.Flags & FileFlags.FILE_COMPRESSED) != 0;
22+
#else
23+
return fileDescriptor.Flags.HasFlag(FileFlags.FILE_COMPRESSED);
24+
#endif
25+
}
26+
27+
/// <summary>
28+
/// Indicate if a file descriptor represents an invalid file
29+
/// </summary>
30+
/// <param name="fileDescriptor">File descriptor to check</param>
31+
/// <returns>True if the file is flagged as invalid, false otherwise</returns>
32+
public static bool IsInvalid(this FileDescriptor? fileDescriptor)
33+
{
34+
// Ignore invalid descriptors
35+
if (fileDescriptor == null)
36+
return true;
37+
38+
#if NET20 || NET35
39+
return (fileDescriptor.Flags & FileFlags.FILE_INVALID) != 0;
40+
#else
41+
return fileDescriptor.Flags.HasFlag(FileFlags.FILE_INVALID);
42+
#endif
43+
}
44+
45+
/// <summary>
46+
/// Indicate if a file descriptor represents an obfuscated file
47+
/// </summary>
48+
/// <param name="fileDescriptor">File descriptor to check</param>
49+
/// <returns>True if the file is flagged as obfuscated, false otherwise</returns>
50+
public static bool IsObfuscated(this FileDescriptor? fileDescriptor)
51+
{
52+
// Ignore invalid descriptors
53+
if (fileDescriptor == null)
54+
return false;
55+
56+
#if NET20 || NET35
57+
return (fileDescriptor.Flags & FileFlags.FILE_OBFUSCATED) != 0;
58+
#else
59+
return fileDescriptor.Flags.HasFlag(FileFlags.FILE_OBFUSCATED);
60+
#endif
61+
}
62+
63+
/// <summary>
64+
/// Indicate if a file descriptor represents a split file
65+
/// </summary>
66+
/// <param name="fileDescriptor">File descriptor to check</param>
67+
/// <returns>True if the file is flagged as split, false otherwise</returns>
68+
public static bool IsSplit(this FileDescriptor? fileDescriptor)
69+
{
70+
// Ignore invalid descriptors
71+
if (fileDescriptor == null)
72+
return false;
73+
74+
#if NET20 || NET35
75+
return (fileDescriptor.Flags & FileFlags.FILE_SPLIT) != 0;
76+
#else
77+
return fileDescriptor.Flags.HasFlag(FileFlags.FILE_SPLIT);
78+
#endif
79+
}
80+
81+
#endregion
82+
83+
#region Version
84+
785
/// <summary>
886
/// Get the major version of an InstallShield Cabinet
987
/// </summary>
@@ -43,5 +121,7 @@ public static int GetMajorVersion(this CommonHeader? commonHeader)
43121

44122
return (int)majorVersion;
45123
}
124+
125+
#endregion
46126
}
47127
}

SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -361,11 +361,7 @@ public bool FileIsValid(int index)
361361
if (descriptor == null)
362362
return false;
363363

364-
#if NET20 || NET35
365-
if ((descriptor.Flags & FileFlags.FILE_INVALID) != 0)
366-
#else
367-
if (descriptor.Flags.HasFlag(FileFlags.FILE_INVALID))
368-
#endif
364+
if (descriptor.IsInvalid())
369365
return false;
370366

371367
if (descriptor.NameOffset == default)
@@ -416,11 +412,7 @@ public bool TryGetFileDescriptor(int index, out FileDescriptor? fileDescriptor)
416412
return false;
417413
}
418414

419-
#if NET20 || NET35
420-
if ((fileDescriptor.Flags & FileFlags.FILE_INVALID) != 0 || fileDescriptor.DataOffset == 0)
421-
#else
422-
if (fileDescriptor.Flags.HasFlag(FileFlags.FILE_INVALID) || fileDescriptor.DataOffset == 0)
423-
#endif
415+
if (fileDescriptor.IsInvalid() || fileDescriptor.DataOffset == 0)
424416
{
425417
Console.Error.WriteLine($"File at {index} is marked as invalid");
426418
return false;
@@ -435,11 +427,7 @@ public bool TryGetFileDescriptor(int index, out FileDescriptor? fileDescriptor)
435427
public string? GetFileName(int index)
436428
{
437429
var descriptor = GetFileDescriptor(index);
438-
#if NET20 || NET35
439-
if (descriptor == null || (descriptor.Flags & FileFlags.FILE_INVALID) != 0)
440-
#else
441-
if (descriptor == null || descriptor.Flags.HasFlag(FileFlags.FILE_INVALID))
442-
#endif
430+
if (descriptor == null || descriptor.IsInvalid())
443431
return null;
444432

445433
return descriptor.Name;
@@ -453,14 +441,9 @@ public static ulong GetReadableBytes(FileDescriptor? descriptor)
453441
if (descriptor == null)
454442
return 0;
455443

456-
#if NET20 || NET35
457-
if ((descriptor.Flags & FileFlags.FILE_COMPRESSED) != 0)
458-
#else
459-
if (descriptor.Flags.HasFlag(FileFlags.FILE_COMPRESSED))
460-
#endif
461-
return descriptor.CompressedSize;
462-
else
463-
return descriptor.ExpandedSize;
444+
return descriptor.IsCompressed()
445+
? descriptor.CompressedSize
446+
: descriptor.ExpandedSize;
464447
}
465448

466449
#endregion

0 commit comments

Comments
 (0)