From ef9e276c34fa8acf7dce30d5db35ab6afe398db6 Mon Sep 17 00:00:00 2001 From: Elinor Fung Date: Fri, 11 Jun 2021 06:51:11 -0700 Subject: [PATCH] Make some Brotli p/invokes blittable (#54029) * Make some Brotli p/invokes blittable * Use Interop.BOOL --- src/libraries/Common/src/Interop/Interop.Brotli.cs | 12 ++++++------ .../src/System.IO.Compression.Brotli.csproj | 2 ++ .../src/System/IO/Compression/dec/BrotliDecoder.cs | 4 ++-- .../src/System/IO/Compression/enc/BrotliEncoder.cs | 10 +++++----- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/libraries/Common/src/Interop/Interop.Brotli.cs b/src/libraries/Common/src/Interop/Interop.Brotli.cs index 8052172..a817bb9 100644 --- a/src/libraries/Common/src/Interop/Interop.Brotli.cs +++ b/src/libraries/Common/src/Interop/Interop.Brotli.cs @@ -19,32 +19,32 @@ internal static partial class Interop ref nuint availableOut, byte** nextOut, out nuint totalOut); [DllImport(Libraries.CompressionNative)] - internal static extern unsafe bool BrotliDecoderDecompress(nuint availableInput, byte* inBytes, ref nuint availableOutput, byte* outBytes); + internal static extern unsafe BOOL BrotliDecoderDecompress(nuint availableInput, byte* inBytes, nuint* availableOutput, byte* outBytes); [DllImport(Libraries.CompressionNative)] internal static extern void BrotliDecoderDestroyInstance(IntPtr state); [DllImport(Libraries.CompressionNative)] - internal static extern bool BrotliDecoderIsFinished(SafeBrotliDecoderHandle state); + internal static extern BOOL BrotliDecoderIsFinished(SafeBrotliDecoderHandle state); [DllImport(Libraries.CompressionNative)] internal static extern SafeBrotliEncoderHandle BrotliEncoderCreateInstance(IntPtr allocFunc, IntPtr freeFunc, IntPtr opaque); [DllImport(Libraries.CompressionNative)] - internal static extern bool BrotliEncoderSetParameter(SafeBrotliEncoderHandle state, BrotliEncoderParameter parameter, uint value); + internal static extern BOOL BrotliEncoderSetParameter(SafeBrotliEncoderHandle state, BrotliEncoderParameter parameter, uint value); [DllImport(Libraries.CompressionNative)] - internal static extern unsafe bool BrotliEncoderCompressStream( + internal static extern unsafe BOOL BrotliEncoderCompressStream( SafeBrotliEncoderHandle state, BrotliEncoderOperation op, ref nuint availableIn, byte** nextIn, ref nuint availableOut, byte** nextOut, out nuint totalOut); [DllImport(Libraries.CompressionNative)] - internal static extern bool BrotliEncoderHasMoreOutput(SafeBrotliEncoderHandle state); + internal static extern BOOL BrotliEncoderHasMoreOutput(SafeBrotliEncoderHandle state); [DllImport(Libraries.CompressionNative)] internal static extern void BrotliEncoderDestroyInstance(IntPtr state); [DllImport(Libraries.CompressionNative)] - internal static extern unsafe bool BrotliEncoderCompress(int quality, int window, int v, nuint availableInput, byte* inBytes, ref nuint availableOutput, byte* outBytes); + internal static extern unsafe BOOL BrotliEncoderCompress(int quality, int window, int v, nuint availableInput, byte* inBytes, nuint* availableOutput, byte* outBytes); } } diff --git a/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj b/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj index 570ff6c..9fdcecf 100644 --- a/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj +++ b/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj @@ -11,6 +11,8 @@ + + diff --git a/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/dec/BrotliDecoder.cs b/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/dec/BrotliDecoder.cs index e8db5c3..8b6730e 100644 --- a/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/dec/BrotliDecoder.cs +++ b/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/dec/BrotliDecoder.cs @@ -59,7 +59,7 @@ namespace System.IO.Compression bytesConsumed = 0; bytesWritten = 0; - if (Interop.Brotli.BrotliDecoderIsFinished(_state)) + if (Interop.Brotli.BrotliDecoderIsFinished(_state) != Interop.BOOL.FALSE) return OperationStatus.Done; nuint availableOutput = (nuint)destination.Length; nuint availableInput = (nuint)source.Length; @@ -117,7 +117,7 @@ namespace System.IO.Compression fixed (byte* outBytes = &MemoryMarshal.GetReference(destination)) { nuint availableOutput = (nuint)destination.Length; - bool success = Interop.Brotli.BrotliDecoderDecompress((nuint)source.Length, inBytes, ref availableOutput, outBytes); + bool success = Interop.Brotli.BrotliDecoderDecompress((nuint)source.Length, inBytes, &availableOutput, outBytes) != Interop.BOOL.FALSE; Debug.Assert(success ? availableOutput <= (nuint)destination.Length : availableOutput == 0); diff --git a/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/enc/BrotliEncoder.cs b/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/enc/BrotliEncoder.cs index 483ffed..fbd813f 100644 --- a/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/enc/BrotliEncoder.cs +++ b/src/libraries/System.IO.Compression.Brotli/src/System/IO/Compression/enc/BrotliEncoder.cs @@ -78,7 +78,7 @@ namespace System.IO.Compression { throw new ArgumentOutOfRangeException(nameof(quality), SR.Format(SR.BrotliEncoder_Quality, quality, 0, BrotliUtils.Quality_Max)); } - if (!Interop.Brotli.BrotliEncoderSetParameter(_state, BrotliEncoderParameter.Quality, (uint)quality)) + if (Interop.Brotli.BrotliEncoderSetParameter(_state, BrotliEncoderParameter.Quality, (uint)quality) == Interop.BOOL.FALSE) { throw new InvalidOperationException(SR.Format(SR.BrotliEncoder_InvalidSetParameter, "Quality")); } @@ -96,7 +96,7 @@ namespace System.IO.Compression { throw new ArgumentOutOfRangeException(nameof(window), SR.Format(SR.BrotliEncoder_Window, window, BrotliUtils.WindowBits_Min, BrotliUtils.WindowBits_Max)); } - if (!Interop.Brotli.BrotliEncoderSetParameter(_state, BrotliEncoderParameter.LGWin, (uint)window)) + if (Interop.Brotli.BrotliEncoderSetParameter(_state, BrotliEncoderParameter.LGWin, (uint)window) == Interop.BOOL.FALSE) { throw new InvalidOperationException(SR.Format(SR.BrotliEncoder_InvalidSetParameter, "Window")); } @@ -161,7 +161,7 @@ namespace System.IO.Compression fixed (byte* inBytes = &MemoryMarshal.GetReference(source)) fixed (byte* outBytes = &MemoryMarshal.GetReference(destination)) { - if (!Interop.Brotli.BrotliEncoderCompressStream(_state, operation, ref availableInput, &inBytes, ref availableOutput, &outBytes, out _)) + if (Interop.Brotli.BrotliEncoderCompressStream(_state, operation, ref availableInput, &inBytes, ref availableOutput, &outBytes, out _) == Interop.BOOL.FALSE) { return OperationStatus.InvalidData; } @@ -173,7 +173,7 @@ namespace System.IO.Compression bytesWritten += destination.Length - (int)availableOutput; // no bytes written, no remaining input to give to the encoder, and no output in need of retrieving means we are Done - if ((int)availableOutput == destination.Length && !Interop.Brotli.BrotliEncoderHasMoreOutput(_state) && availableInput == 0) + if ((int)availableOutput == destination.Length && Interop.Brotli.BrotliEncoderHasMoreOutput(_state) == Interop.BOOL.FALSE && availableInput == 0) { return OperationStatus.Done; } @@ -218,7 +218,7 @@ namespace System.IO.Compression fixed (byte* outBytes = &MemoryMarshal.GetReference(destination)) { nuint availableOutput = (nuint)destination.Length; - bool success = Interop.Brotli.BrotliEncoderCompress(quality, window, /*BrotliEncoderMode*/ 0, (nuint)source.Length, inBytes, ref availableOutput, outBytes); + bool success = Interop.Brotli.BrotliEncoderCompress(quality, window, /*BrotliEncoderMode*/ 0, (nuint)source.Length, inBytes, &availableOutput, outBytes) != Interop.BOOL.FALSE; Debug.Assert(success ? availableOutput <= (nuint)destination.Length : availableOutput == 0); -- 2.7.4