mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 17:15:00 -06:00
- Minor speed optimization for LZMA2 (xz and 7z) multi-threading compression.
7-Zip now uses additional memory buffers for multi-block LZMA2 compression.
CPU utilization was slightly improved.
- 7-zip now creates multi-block xz archives by default. Block size can be
specified with -ms[Size]{m|g} switch.
- xz decoder now can unpack random block from multi-block xz archives. 7-Zip
File Manager now can open nested multi-block xz archives (for example,
image.iso.xz) without full unpacking of xz archive.
- 7-Zip now can create zip archives from stdin to stdout.
- 7-Zip command line: @listfile now doesn't work after -- switch. Use
-i@listfile before -- switch instead.
fixed bugs:
- 7-Zip could add unrequired alternate file streams to WIM archives, for
commands that contain filename wildcards and -sns switch.
- 7-Zip 17.00 beta crashed for commands that write anti-item to 7z archive.
- 7-Zip 17.00 beta ignored "Use large memory pages" option.
94 lines
1.9 KiB
C++
94 lines
1.9 KiB
C++
// XzDecoder.h
|
|
|
|
#ifndef __XZ_DECODER_H
|
|
#define __XZ_DECODER_H
|
|
|
|
#include "../../../C/Xz.h"
|
|
|
|
#include "../../Common/MyCom.h"
|
|
|
|
#include "../ICoder.h"
|
|
|
|
namespace NCompress {
|
|
namespace NXz {
|
|
|
|
struct CXzUnpackerCPP
|
|
{
|
|
Byte *InBuf;
|
|
Byte *OutBuf;
|
|
CXzUnpacker p;
|
|
|
|
CXzUnpackerCPP();
|
|
~CXzUnpackerCPP();
|
|
};
|
|
|
|
|
|
struct CStatInfo
|
|
{
|
|
UInt64 InSize;
|
|
UInt64 OutSize;
|
|
UInt64 PhySize;
|
|
|
|
UInt64 NumStreams;
|
|
UInt64 NumBlocks;
|
|
|
|
bool UnpackSize_Defined;
|
|
|
|
bool NumStreams_Defined;
|
|
bool NumBlocks_Defined;
|
|
|
|
bool IsArc;
|
|
bool UnexpectedEnd;
|
|
bool DataAfterEnd;
|
|
bool Unsupported;
|
|
bool HeadersError;
|
|
bool DataError;
|
|
bool CrcError;
|
|
|
|
CStatInfo() { Clear(); }
|
|
|
|
void Clear();
|
|
};
|
|
|
|
|
|
struct CDecoder: public CStatInfo
|
|
{
|
|
CXzUnpackerCPP xzu;
|
|
SRes DecodeRes; // it's not HRESULT
|
|
|
|
CDecoder(): DecodeRes(SZ_OK) {}
|
|
|
|
/* Decode() can return ERROR code only if there is progress or stream error.
|
|
Decode() returns S_OK in case of xz decoding error, but DecodeRes and CStatInfo contain error information */
|
|
HRESULT Decode(ISequentialInStream *seqInStream, ISequentialOutStream *outStream,
|
|
const UInt64 *outSizeLimit, bool finishStream, ICompressProgressInfo *compressProgress);
|
|
Int32 Get_Extract_OperationResult() const;
|
|
};
|
|
|
|
|
|
class CComDecoder:
|
|
public ICompressCoder,
|
|
public ICompressSetFinishMode,
|
|
public ICompressGetInStreamProcessedSize,
|
|
public CMyUnknownImp
|
|
{
|
|
CDecoder _decoder;
|
|
bool _finishStream;
|
|
|
|
public:
|
|
MY_UNKNOWN_IMP2(
|
|
ICompressSetFinishMode,
|
|
ICompressGetInStreamProcessedSize)
|
|
|
|
STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
|
|
const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
|
|
STDMETHOD(SetFinishMode)(UInt32 finishMode);
|
|
STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
|
|
|
|
CComDecoder(): _finishStream(false) {}
|
|
};
|
|
|
|
}}
|
|
|
|
#endif
|