diff --git a/src/SharpCompress/Archives/Rar/RarArchive.cs b/src/SharpCompress/Archives/Rar/RarArchive.cs index ab341e0c..699073cb 100644 --- a/src/SharpCompress/Archives/Rar/RarArchive.cs +++ b/src/SharpCompress/Archives/Rar/RarArchive.cs @@ -24,7 +24,11 @@ namespace SharpCompress.Archives.Rar internal RarArchive(FileInfo fileInfo, ReaderOptions options) : base(ArchiveType.Rar, fileInfo, options) { +#if !RarV2017_USELEGACY + Unpack = new SharpCompress.Compressors.Rar.UnpackV2017.Unpack(); +#else Unpack = new SharpCompress.Compressors.Rar.UnpackV1.Unpack(); +#endif } protected override IEnumerable LoadVolumes(FileInfo file) @@ -41,7 +45,11 @@ namespace SharpCompress.Archives.Rar internal RarArchive(IEnumerable streams, ReaderOptions options) : base(ArchiveType.Rar, streams, options) { +#if !RarV2017_USELEGACY + Unpack = new SharpCompress.Compressors.Rar.UnpackV2017.Unpack(); +#else Unpack = new SharpCompress.Compressors.Rar.UnpackV1.Unpack(); +#endif } protected override IEnumerable LoadEntries(IEnumerable volumes) diff --git a/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs b/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs index ca1b78df..8d4dab7a 100644 --- a/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs +++ b/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs @@ -112,6 +112,21 @@ set { } } +// sharpcompress: added the following code +public void GetBuffer(size_t Item, out byte[] buf, out uint offset) { + if (Item0) - Filters.Alloc(Filters.Count-EmptyCount); + //Filters.Alloc(Filters.Count-EmptyCount); + throw new NotImplementedException(); if (!NotAllFiltersProcessed) // Only if all filters are processed. { @@ -428,6 +429,8 @@ void UnpWriteBuf() byte[] ApplyFilter(byte[] Data,uint DataSize,UnpackFilter Flt) { + throw new NotImplementedException(); +#if false byte[] SrcData=Data; switch(Flt.Type) { @@ -509,6 +512,7 @@ byte[] ApplyFilter(byte[] Data,uint DataSize,UnpackFilter Flt) } return null; +#endif } @@ -525,7 +529,9 @@ void UnpWriteArea(size_t StartPtr,size_t EndPtr) while (SizeToWrite>0) { size_t BlockSize=FragWindow.GetBlockSize(StartPtr,SizeToWrite); - UnpWriteData(&FragWindow[StartPtr],BlockSize); + //UnpWriteData(&FragWindow[StartPtr],BlockSize); + FragWindow.GetBuffer(StartPtr, out var __buffer, out var __offset); + UnpWriteData(__buffer, __offset, BlockSize); SizeToWrite-=BlockSize; StartPtr=(StartPtr+BlockSize) & MaxWinMask; } diff --git a/src/SharpCompress/Compressors/Rar/UnpackV2017/Unpack.unpack_cpp.cs b/src/SharpCompress/Compressors/Rar/UnpackV2017/Unpack.unpack_cpp.cs index 619974c2..502763ad 100644 --- a/src/SharpCompress/Compressors/Rar/UnpackV2017/Unpack.unpack_cpp.cs +++ b/src/SharpCompress/Compressors/Rar/UnpackV2017/Unpack.unpack_cpp.cs @@ -205,6 +205,8 @@ void UnpInitData(bool Solid) // memset(Window,0,MaxWinSize); //memset(&BlockTables,0,sizeof(BlockTables)); BlockTables = new UnpackBlockTables(); + // sharpcompress: no default ctor for struct + BlockTables.Init(); UnpPtr=WrPtr=0; WriteBorder=Math.Min(MaxWinSize,UNPACK_MAX_WRITE)&MaxWinMask; } diff --git a/src/SharpCompress/Readers/Rar/RarReader.cs b/src/SharpCompress/Readers/Rar/RarReader.cs index 20afa5e1..71fe260c 100644 --- a/src/SharpCompress/Readers/Rar/RarReader.cs +++ b/src/SharpCompress/Readers/Rar/RarReader.cs @@ -18,7 +18,11 @@ namespace SharpCompress.Readers.Rar internal RarReader(ReaderOptions options) : base(options, ArchiveType.Rar) { +#if !RarV2017_USELEGACY + this.pack = new SharpCompress.Compressors.Rar.UnpackV2017.Unpack(); +#else this.pack = new SharpCompress.Compressors.Rar.UnpackV1.Unpack(); +#endif } internal abstract void ValidateArchive(RarVolume archive);