📄 rar29decoder.cpp
字号:
// Rar29Decoder.cpp// According to unRAR license,// this code may not be used to develop a // RAR (WinRAR) compatible archiver #include "StdAfx.h"#include "Rar29Decoder.h"#include "Windows/Defs.h"// #include "Original/unpack15.cpp"ErrorHandler ErrHandler;namespace NCompress {namespace NRar29 {CDecoder::CDecoder(): m_IsSolid(false), // DataIO(NULL) DataIO(){ Unp = new Unpack(&DataIO); Unp->Init(NULL);}CDecoder::~CDecoder(){ delete Unp;}STDMETHODIMP CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress){ // CCoderReleaser coderReleaser(this); DataIO.CurUnpRead=0; DataIO.CurUnpWrite=0; DataIO.UnpFileCRC=0xffffffff; DataIO.PackedCRC=0xffffffff; /* DataIO.SetEncryption( 0,0, NULL,false); */ DataIO.SetPackedSizeToRead(*inSize); DataIO.SetFiles(inStream, outStream, progress); DataIO.SetTestMode(false); // DataIO.SetSkipUnpCRC(SkipSolid); /* if (!TestMode && Arc.NewLhd.FullUnpSize>0x1000) CurFile.Prealloc(Arc.NewLhd.FullUnpSize); CurFile.SetAllowDelete(!Cmd->KeepBroken); */ Unp->SetDestSize(*outSize); Unp->DoUnpack(29, m_IsSolid); return S_OK;}STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress){ try { return CodeReal(inStream, outStream, inSize, outSize, progress); } catch(const CExitCode &exitCode) { return exitCode.Result; } catch(...) { return S_FALSE; }}STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size){ if (size < 1) return E_INVALIDARG; m_IsSolid = (data[0] != 0); return S_OK;}}namespace NRar15 {CDecoder::CDecoder(): m_IsSolid(false), DataIO(){ Unp=new Unpack(&DataIO); Unp->Init(NULL);}CDecoder::~CDecoder(){ delete Unp;}STDMETHODIMP CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress){ // CCoderReleaser coderReleaser(this); DataIO.CurUnpRead=0; DataIO.CurUnpWrite=0; DataIO.UnpFileCRC=0xffffffff; DataIO.PackedCRC=0xffffffff; /* DataIO.SetEncryption( 0,0, NULL,false); */ DataIO.SetPackedSizeToRead(*inSize); DataIO.SetFiles(inStream, outStream, progress); DataIO.SetTestMode(false); // DataIO.SetSkipUnpCRC(SkipSolid); /* if (!TestMode && Arc.NewLhd.FullUnpSize>0x1000) CurFile.Prealloc(Arc.NewLhd.FullUnpSize); CurFile.SetAllowDelete(!Cmd->KeepBroken); */ Unp->SetDestSize(*outSize); Unp->DoUnpack(15, m_IsSolid); return S_OK;}STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress){ try { return CodeReal(inStream, outStream, inSize, outSize, progress); } catch(const CExitCode &exitCode) { return exitCode.Result; } catch(...) { return S_FALSE;}}STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size){ if (size < 1) return E_INVALIDARG; m_IsSolid = (data[0] != 0); return S_OK;}}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -