rar29decoder.cpp
来自「由7-zip提供的压缩、解压缩程序」· C++ 代码 · 共 154 行
CPP
154 行
// 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 + =
减小字号Ctrl + -
显示快捷键?