diff --git a/BinaryObjectScanner/BinaryObjectScanner.csproj b/BinaryObjectScanner/BinaryObjectScanner.csproj
index 6df67aa1..e72638b8 100644
--- a/BinaryObjectScanner/BinaryObjectScanner.csproj
+++ b/BinaryObjectScanner/BinaryObjectScanner.csproj
@@ -75,7 +75,6 @@
-
diff --git a/BinaryObjectScanner/FileType/SGA.cs b/BinaryObjectScanner/FileType/SGA.cs
index b7e07218..53b6bcbd 100644
--- a/BinaryObjectScanner/FileType/SGA.cs
+++ b/BinaryObjectScanner/FileType/SGA.cs
@@ -3,9 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using BinaryObjectScanner.Interfaces;
-#if NET462_OR_GREATER || NETCOREAPP
-using ICSharpCode.SharpZipLib.Zip.Compression;
-#endif
+using SabreTools.Compression.zlib;
namespace BinaryObjectScanner.FileType
{
@@ -230,15 +228,19 @@ namespace BinaryObjectScanner.FileType
}
else
{
- // Decompress the data
-#if NET462_OR_GREATER || NETCOREAPP
+ // Inflate the data into the buffer
+ var zstream = new ZLib.z_stream_s();
data = new byte[outputFileSize];
- Inflater inflater = new Inflater();
- inflater.SetInput(compressedData);
- inflater.Inflate(data);
-#else
- data = new byte[outputFileSize];
-#endif
+ unsafe
+ {
+ fixed (byte* payloadPtr = compressedData)
+ fixed (byte* dataPtr = data)
+ {
+ zstream.next_in = payloadPtr;
+ zstream.next_out = dataPtr;
+ int zret = ZLib.inflate(zstream, 1);
+ }
+ }
}
// If we have an invalid output directory
diff --git a/BinaryObjectScanner/Packer/CExe.cs b/BinaryObjectScanner/Packer/CExe.cs
index 29994760..a0dec522 100644
--- a/BinaryObjectScanner/Packer/CExe.cs
+++ b/BinaryObjectScanner/Packer/CExe.cs
@@ -3,9 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using BinaryObjectScanner.Interfaces;
-#if NET462_OR_GREATER || NETCOREAPP
-using ICSharpCode.SharpZipLib.Zip.Compression;
-#endif
+using SabreTools.Compression.zlib;
using SabreTools.Matching;
using SabreTools.Serialization.Wrappers;
@@ -88,16 +86,27 @@ namespace BinaryObjectScanner.Packer
try
{
// Inflate the data into the buffer
-#if NET462_OR_GREATER || NETCOREAPP
- Inflater inflater = new Inflater();
- inflater.SetInput(payload);
+ var zstream = new ZLib.z_stream_s();
data = new byte[payload.Length * 4];
- int read = inflater.Inflate(data);
+ unsafe
+ {
+ fixed (byte* payloadPtr = payload)
+ fixed (byte* dataPtr = data)
+ {
+ zstream.next_in = payloadPtr;
+ zstream.next_out = dataPtr;
+ int zret = ZLib.inflate(zstream, 1);
+ }
+ }
// Trim the buffer to the proper size
- data = new ReadOnlySpan(data, 0, read).ToArray();
+ uint read = zstream.total_out;
+#if NET462_OR_GREATER || NETCOREAPP
+ data = new ReadOnlySpan(data, 0, (int)read).ToArray();
#else
- data = null;
+ var temp = new byte[read];
+ Array.Copy(data, 0, temp, 0, read);
+ data = temp;
#endif
}
catch