From f3ca4dd989b4e8c79c470cc60214b3afdd48d7dc Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 3 Oct 2024 11:14:41 -0400 Subject: [PATCH] Port logic from UnshieldSharp --- .../Wrappers/InstallShieldCabinet.cs | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs index bb85da22..db1e1f14 100644 --- a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs +++ b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs @@ -177,7 +177,7 @@ namespace SabreTools.Serialization.Wrappers /// Get the directory index for the given file index /// /// Directory index if found, UInt32.MaxValue on error - public uint GetFileDirectoryIndex(int index) + public uint GetDirectoryIndexFromFile(int index) { FileDescriptor? descriptor = GetFileDescriptor(index); if (descriptor != null) @@ -293,23 +293,43 @@ namespace SabreTools.Serialization.Wrappers } /// - /// Get the file group name at a given index, if possible + /// Get the file group for the given file index, if possible /// - public string? GetFileGroupName(int index) + public FileGroup? GetFileGroupFromFile(int index) { if (Model.FileGroups == null) return null; - if (index < 0 || index >= Model.FileGroups.Length) + if (index < 0 || index >= FileCount) return null; - var fileGroup = Model.FileGroups[index]; - if (fileGroup == null) - return null; + for (int i = 0; i < FileGroupCount; i++) + { + var fileGroup = GetFileGroup(i); + if (fileGroup == null) + continue; - return fileGroup.Name; + if (fileGroup.FirstFile > index || fileGroup.LastFile < index) + continue; + + return fileGroup; + } + + return null; } + /// + /// Get the file group name at a given index, if possible + /// + public string? GetFileGroupName(int index) + => GetFileGroup(index)?.Name; + + /// + /// Get the file group name at a given file index, if possible + /// + public string? GetFileGroupNameFromFile(int index) + => GetFileGroupFromFile(index)?.Name; + #endregion } }