internal ZLibRet DeflateInit(ZStreamL32 strm, ZLibCompLevel level, int windowBits, ZLibMemLevel memLevel)
            {
                string zlibVer = Lib.ZLibVersion();

                return(DeflateInit2(strm, level, ZLibCompMethod.Deflated, windowBits, memLevel,
                                    ZLibCompStrategy.Default, zlibVer, Marshal.SizeOf <ZStreamL32>()));
            }
Beispiel #2
0
        public DeflateStream(Stream stream, ZLibMode mode, ZLibCompLevel level, bool leaveOpen)
        {
            NativeMethods.CheckZLibLoaded();

            _zstream    = new ZStream();
            _zstreamPtr = GCHandle.Alloc(_zstream, GCHandleType.Pinned);

            _leaveOpen      = leaveOpen;
            _baseStream     = stream;
            _mode           = mode;
            _internalBufPos = 0;

            Debug.Assert(0 < NativeMethods.BufferSize, "Internal Logic Error at DeflateStream");
            _internalBuf = new byte[NativeMethods.BufferSize];

            ZLibReturnCode ret;

            if (_mode == ZLibMode.Compress)
            {
                ret = NativeMethods.DeflateInit(_zstream, level, WriteType);
            }
            else
            {
                ret = NativeMethods.InflateInit(_zstream, OpenType);
            }

            ZLibException.CheckZLibOK(ret, _zstream);
        }
Beispiel #3
0
        public ZLibStream(Stream stream, ZLibMode mode, ZLibCompLevel level, bool leaveOpen = false)
        {
            BaseStream = stream;

            _zstream    = new ZStream();
            _zstreamPtr = GCHandle.Alloc(_zstream, GCHandleType.Pinned);

            _leaveOpen      = leaveOpen;
            _mode           = mode;
            _internalBufPos = 0;
            _internalBuf    = new byte[BufferSize];

            ZLibReturnCode ret;

            if (_mode == ZLibMode.Compress)
            {
                ret = ZLibNative.DeflateInit(_zstream, level, _writeType);
            }
            else
            {
                ret = ZLibNative.InflateInit(_zstream, _openType);
            }

            if (ret != ZLibReturnCode.OK)
            {
                throw new Exception(ret + " " + _zstream.LastErrorMsg);
            }
        }
Beispiel #4
0
        public static MemoryStream Compress(CreateStreamDelegate sc, Stream source, ZLibCompLevel level = ZLibCompLevel.Default)
        {
            MemoryStream result = new MemoryStream();

            Compress(sc, source, result, level);
            result.Position = 0;
            return(result);
        }
Beispiel #5
0
 public static byte[] Compress(CreateStreamDelegate sc, byte[] source, ZLibCompLevel level = ZLibCompLevel.Default)
 {
     using (MemoryStream srcStream = new MemoryStream(source))
         using (MemoryStream dstStream = Compress(sc, srcStream, level))
         {
             return(dstStream.ToArray());
         }
 }
Beispiel #6
0
 internal static extern ZLibReturnCode DeflateInit2(
     ZStream strm,
     ZLibCompLevel level,
     ZLibCompMethod method,
     ZLibWriteType windowBits,
     int memLevel,
     ZLibCompressionStrategy strategy,
     [MarshalAs(UnmanagedType.LPStr)] string version,
     int stream_size);
Beispiel #7
0
        private static void CompressTemplate(string sampleFileName, ZLibCompLevel level, bool useSpan)
        {
            string filePath = Path.Combine(TestSetup.SampleDir, sampleFileName);

            ZLibCompressOptions compOpts = new ZLibCompressOptions()
            {
                Level     = level,
                LeaveOpen = true,
            };

            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (MemoryStream compMs = new MemoryStream())
                    using (MemoryStream decompMs = new MemoryStream())
                    {
                        using (DeflateStream zs = new DeflateStream(compMs, compOpts))
                        {
#if !NETFRAMEWORK
                            if (useSpan)
                            {
                                byte[] buffer = new byte[64 * 1024];
                                int    bytesRead;
                                do
                                {
                                    bytesRead = fs.Read(buffer.AsSpan());
                                    zs.Write(buffer.AsSpan(0, bytesRead));
                                } while (0 < bytesRead);
                            }
                            else
#endif
                            {
                                fs.CopyTo(zs);
                            }
                        }

                        fs.Position     = 0;
                        compMs.Position = 0;

                        // Decompress compMs with BCL DeflateStream
                        using (System.IO.Compression.DeflateStream zs = new System.IO.Compression.DeflateStream(compMs, CompressionMode.Decompress, true))
                        {
                            zs.CopyTo(decompMs);
                        }

                        decompMs.Position = 0;

                        // Compare SHA256 Digest
                        byte[] decompDigest = TestHelper.SHA256Digest(decompMs);
                        byte[] fileDigest   = TestHelper.SHA256Digest(fs);
                        Assert.IsTrue(decompDigest.SequenceEqual(fileDigest));
                    }
        }
Beispiel #8
0
 public ZLibStream(Stream stream, ZLibMode mode, ZLibCompLevel level, ZLibOpenType openType, bool leaveOpen = false) : this(stream, mode, level, leaveOpen)
 {
     _openType = openType;
 }
Beispiel #9
0
 public ZLibStream(Stream stream, ZLibMode mode, ZLibCompLevel level, ZLibWriteType writeType, bool leaveOpen = false) : this(stream, mode, level, leaveOpen)
 {
     _writeType = writeType;
 }
Beispiel #10
0
 public static MemoryStream Compress(Stream source, ZLibCompLevel level = ZLibCompLevel.Default)
 {
     return(CommonCompressor.Compress(CreateStream, source, level));
 }
Beispiel #11
0
 private static DeflateStream CreateStream(Stream s, ZLibMode mode, ZLibCompLevel level, bool leaveOpen)
 {
     return(new ZLibStream(s, mode, level, leaveOpen));
 }
Beispiel #12
0
 public static byte[] Compress(byte[] source, ZLibCompLevel level = ZLibCompLevel.Default)
 {
     return(CommonCompressor.Compress(CreateStream, source, level));
 }
Beispiel #13
0
 private static void Compress(CreateStreamDelegate sc, Stream source, Stream dest, ZLibCompLevel level)
 {
     using (DeflateStream zsDest = sc(dest, ZLibMode.Compress, level, true))
     {
         source.CopyTo(zsDest);
     }
 }
Beispiel #14
0
 public ZLibMPQStream(Stream stream, ZLibMode mode, ZLibCompLevel level, bool leaveOpen) :
     base(stream, mode, level, leaveOpen)
 {
 }
Beispiel #15
0
 public ZLibMPQStream(Stream stream, ZLibMode mode, ZLibCompLevel level) :
     base(stream, mode, level)
 {
 }
Beispiel #16
0
 internal static ZLibReturnCode DeflateInit(ZStream stream, ZLibCompLevel level, ZLibWriteType windowBits)
 {
     return(DeflateInit2(stream, level, ZLibCompMethod.DEFLATED, windowBits, DEF_MEM_LEVEL, ZLibCompressionStrategy.DEFAULT_STRATEGY, ZLIB_VERSION, Marshal.SizeOf(typeof(ZStream))));
 }
Beispiel #17
0
        private static void CompressTemplate(string sampleFileName, ZLibCompLevel level, bool useSpan)
        {
            string tempDecompFile  = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            string tempArchiveFile = tempDecompFile + ".zz";

            try
            {
                ZLibCompressOptions compOpts = new ZLibCompressOptions()
                {
                    Level     = level,
                    LeaveOpen = true,
                };

                string sampleFile = Path.Combine(TestSetup.SampleDir, sampleFileName);
                using (FileStream sampleFs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (FileStream archiveFs = new FileStream(tempArchiveFile, FileMode.Create, FileAccess.Write, FileShare.None))
                        using (ZLibStream zs = new ZLibStream(archiveFs, compOpts))
                        {
#if !NETFRAMEWORK
                            if (useSpan)
                            {
                                byte[] buffer = new byte[64 * 1024];
                                int    bytesRead;
                                do
                                {
                                    bytesRead = sampleFs.Read(buffer.AsSpan());
                                    zs.Write(buffer.AsSpan(0, bytesRead));
                                } while (0 < bytesRead);
                            }
                            else
#endif
                            {
                                sampleFs.CopyTo(zs);
                            }

                            zs.Flush();

                            Assert.AreEqual(sampleFs.Length, zs.TotalIn);
                            Assert.AreEqual(archiveFs.Length, zs.TotalOut);
                        }

                int ret = TestHelper.RunPigz(tempArchiveFile);
                Assert.IsTrue(ret == 0);

                byte[] decompDigest;
                byte[] originDigest;
                using (FileStream fs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    originDigest = TestHelper.SHA256Digest(fs);
                }

                using (FileStream fs = new FileStream(tempDecompFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    decompDigest = TestHelper.SHA256Digest(fs);
                }

                Assert.IsTrue(originDigest.SequenceEqual(decompDigest));
            }
            finally
            {
                if (File.Exists(tempArchiveFile))
                {
                    File.Delete(tempArchiveFile);
                }
                if (File.Exists(tempDecompFile))
                {
                    File.Delete(tempDecompFile);
                }
            }
        }
Beispiel #18
0
 public DeflateStream(Stream stream, ZLibMode mode, ZLibCompLevel level) :
     this(stream, mode, level, false)
 {
 }