From aaeaa44c0bf1a65a53f4c2bf7e7f116aa6d58218 Mon Sep 17 00:00:00 2001 From: coderb Date: Wed, 20 Dec 2017 01:55:54 -0500 Subject: [PATCH] rar5: unpack wip --- .../FragmentedWindow.unpack50frag_cpp.cs | 27 ++++++++++++++----- .../Rar/UnpackV2017/Unpack.unpack50_cpp.cs | 6 ++--- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs b/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs index bbd10c84..f8f3d6dc 100644 --- a/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs +++ b/src/SharpCompress/Compressors/Rar/UnpackV2017/FragmentedWindow.unpack50frag_cpp.cs @@ -89,23 +89,36 @@ public void Init(size_t WinSize) } -byte& operator [](size_t Item) -{ +byte this[size_t Item] { +get { if (Item 0) { - (*this)[UnpPtr]=(*this)[SrcPtr++ & MaxWinMask]; + this[UnpPtr]=this[SrcPtr++ & MaxWinMask]; // We need to have masked UnpPtr after quit from loop, so it must not // be replaced with '(*this)[UnpPtr++ & MaxWinMask]' UnpPtr=(UnpPtr+1) & MaxWinMask; @@ -116,13 +129,13 @@ public void CopyString(uint Length,uint Distance,size_t &UnpPtr,size_t MaxWinMas void CopyData(byte *Dest,size_t WinPos,size_t Size) { for (size_t I=0;I0) @@ -105,7 +105,7 @@ void Unpack5(bool Solid) { if (DBits>4) { - Distance+=((Inp.getbits32()>>(36-DBits))<<4); + Distance+=((Inp.getbits32()>>(int)(36-DBits))<<4); Inp.addbits(DBits-4); } uint LowDist=DecodeNumber(Inp,BlockTables.LDD); @@ -113,7 +113,7 @@ void Unpack5(bool Solid) } else { - Distance+=Inp.getbits32()>>(32-DBits); + Distance+=Inp.getbits32()>>(int)(32-DBits); Inp.addbits(DBits); } }