From 50caeba3222f443ec799f6f320b9d4d0183d6b59 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 29 Aug 2025 10:03:56 -0400 Subject: [PATCH] Sort some filename pattern stuff --- .../UnshieldSharp/Extractor.cs | 8 +-- .../UnshieldSharp/Reader.cs | 2 +- .../Wrappers/InstallShieldCabinet.cs | 52 ++++++++++--------- 3 files changed, 30 insertions(+), 32 deletions(-) diff --git a/SabreTools.Serialization/UnshieldSharp/Extractor.cs b/SabreTools.Serialization/UnshieldSharp/Extractor.cs index 8a4ae9de..5bd6c921 100644 --- a/SabreTools.Serialization/UnshieldSharp/Extractor.cs +++ b/SabreTools.Serialization/UnshieldSharp/Extractor.cs @@ -15,11 +15,6 @@ namespace UnshieldSharpInternal /// public Header HeaderList { get; private set; } - /// - /// Base filename path for related CAB files - /// - public string FilenamePattern { get; private set; } - /// /// Default buffer size /// @@ -27,9 +22,8 @@ namespace UnshieldSharpInternal #region Constructors - public Extractor(string filenamePattern, Header headerList) + public Extractor(Header headerList) { - FilenamePattern = filenamePattern; HeaderList = headerList; } diff --git a/SabreTools.Serialization/UnshieldSharp/Reader.cs b/SabreTools.Serialization/UnshieldSharp/Reader.cs index cb956fe8..8b82dc23 100644 --- a/SabreTools.Serialization/UnshieldSharp/Reader.cs +++ b/SabreTools.Serialization/UnshieldSharp/Reader.cs @@ -168,7 +168,7 @@ namespace UnshieldSharpInternal volume = 1; _volumeFile?.Close(); - _volumeFile = SabreTools.Serialization.Wrappers.InstallShieldCabinet.OpenFileForReading(_cabinet.FilenamePattern, volume, CABINET_SUFFIX); + _volumeFile = _cabinet.HeaderList.OpenFileForReading(volume, CABINET_SUFFIX); if (_volumeFile == null) { Console.Error.WriteLine($"Failed to open input cabinet file {volume}"); diff --git a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs index 10aaac23..82ab78be 100644 --- a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs +++ b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs @@ -92,7 +92,7 @@ namespace SabreTools.Serialization.Wrappers /// /// Base filename path for related CAB files /// - private string? _filenamePattern; + internal string? FilenamePattern { get; set; } #endregion @@ -180,25 +180,6 @@ namespace SabreTools.Serialization.Wrappers #region Cabinet Set - /// - /// Create the generic filename pattern to look for from the input filename - /// - /// String representing the filename pattern for a cabinet set, null on error - public static string? CreateFilenamePattern(string filename) - { - string? pattern = null; - if (string.IsNullOrEmpty(filename)) - return pattern; - - string? directory = Path.GetDirectoryName(Path.GetFullPath(filename)); - if (directory != null) - pattern = Path.Combine(directory, Path.GetFileNameWithoutExtension(filename)); - else - pattern = Path.GetFileNameWithoutExtension(filename); - - return new Regex(@"\d+$").Replace(pattern, string.Empty); - } - /// /// Open a cabinet set for reading, if possible /// @@ -244,6 +225,10 @@ namespace SabreTools.Serialization.Wrappers } } + // Set the pattern, if possible + if (set != null) + set.FilenamePattern = pattern; + return set; } @@ -253,7 +238,7 @@ namespace SabreTools.Serialization.Wrappers /// Volume ID, 1-indexed /// Wrapper representing the volume on success, null otherwise public InstallShieldCabinet? OpenVolume(ushort volumeId) - => OpenVolume(_filenamePattern, volumeId); + => OpenVolume(FilenamePattern, volumeId); /// /// Open the numbered cabinet set volume @@ -295,7 +280,26 @@ namespace SabreTools.Serialization.Wrappers /// Cabinet files suffix (e.g. `.cab`) /// A Stream representing the cabinet part, null on error public Stream? OpenFileForReading(int index, string suffix) - => OpenFileForReading(_filenamePattern, index, suffix); + => OpenFileForReading(FilenamePattern, index, suffix); + + /// + /// Create the generic filename pattern to look for from the input filename + /// + /// String representing the filename pattern for a cabinet set, null on error + private static string? CreateFilenamePattern(string filename) + { + string? pattern = null; + if (string.IsNullOrEmpty(filename)) + return pattern; + + string? directory = Path.GetDirectoryName(Path.GetFullPath(filename)); + if (directory != null) + pattern = Path.Combine(directory, Path.GetFileNameWithoutExtension(filename)); + else + pattern = Path.GetFileNameWithoutExtension(filename); + + return new Regex(@"\d+$").Replace(pattern, string.Empty); + } /// /// Open a cabinet file for reading @@ -304,7 +308,7 @@ namespace SabreTools.Serialization.Wrappers /// Cabinet part index to be opened /// Cabinet files suffix (e.g. `.cab`) /// A Stream representing the cabinet part, null on error - public static Stream? OpenFileForReading(string? pattern, int index, string suffix) + private static Stream? OpenFileForReading(string? pattern, int index, string suffix) { // An invalid pattern means no cabinet files if (string.IsNullOrEmpty(pattern)) @@ -409,7 +413,7 @@ namespace SabreTools.Serialization.Wrappers try { - var cabfile = new UnshieldSharpInternal.Extractor(pattern, cabinet); + var cabfile = new UnshieldSharpInternal.Extractor(cabinet); for (int i = 0; i < cabinet.FileCount; i++) { try