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 + -
显示快捷键?