This commit is contained in:
Igor Pavlov
2023-12-22 17:17:05 +00:00
committed by Kornel
parent ec44a8a070
commit a36c48cece
954 changed files with 42199 additions and 25482 deletions

300
C/XzDec.c
View File

@@ -1,5 +1,5 @@
/* XzDec.c -- Xz Decode
2021-09-04 : Igor Pavlov : Public domain */
2023-04-13 : Igor Pavlov : Public domain */
#include "Precomp.h"
@@ -67,7 +67,8 @@ unsigned Xz_ReadVarInt(const Byte *p, size_t maxSize, UInt64 *value)
return 0;
}
/* ---------- BraState ---------- */
/* ---------- XzBcFilterState ---------- */
#define BRA_BUF_SIZE (1 << 14)
@@ -76,27 +77,29 @@ typedef struct
size_t bufPos;
size_t bufConv;
size_t bufTotal;
Byte *buf; // must be aligned for 4 bytes
Xz_Func_BcFilterStateBase_Filter filter_func;
// int encodeMode;
CXzBcFilterStateBase base;
// Byte buf[BRA_BUF_SIZE];
} CXzBcFilterState;
int encodeMode;
UInt32 methodId;
UInt32 delta;
UInt32 ip;
UInt32 x86State;
Byte deltaState[DELTA_STATE_SIZE];
Byte buf[BRA_BUF_SIZE];
} CBraState;
static void BraState_Free(void *pp, ISzAllocPtr alloc)
static void XzBcFilterState_Free(void *pp, ISzAllocPtr alloc)
{
ISzAlloc_Free(alloc, pp);
if (pp)
{
CXzBcFilterState *p = ((CXzBcFilterState *)pp);
ISzAlloc_Free(alloc, p->buf);
ISzAlloc_Free(alloc, pp);
}
}
static SRes BraState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAllocPtr alloc)
static SRes XzBcFilterState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAllocPtr alloc)
{
CBraState *p = ((CBraState *)pp);
UNUSED_VAR(alloc);
CXzBcFilterStateBase *p = &((CXzBcFilterState *)pp)->base;
UNUSED_VAR(alloc)
p->ip = 0;
if (p->methodId == XZ_ID_Delta)
{
@@ -114,6 +117,7 @@ static SRes BraState_SetProps(void *pp, const Byte *props, size_t propSize, ISzA
case XZ_ID_PPC:
case XZ_ID_ARM:
case XZ_ID_SPARC:
case XZ_ID_ARM64:
if ((v & 3) != 0)
return SZ_ERROR_UNSUPPORTED;
break;
@@ -134,73 +138,90 @@ static SRes BraState_SetProps(void *pp, const Byte *props, size_t propSize, ISzA
return SZ_OK;
}
static void BraState_Init(void *pp)
static void XzBcFilterState_Init(void *pp)
{
CBraState *p = ((CBraState *)pp);
CXzBcFilterState *p = ((CXzBcFilterState *)pp);
p->bufPos = p->bufConv = p->bufTotal = 0;
x86_Convert_Init(p->x86State);
if (p->methodId == XZ_ID_Delta)
Delta_Init(p->deltaState);
p->base.X86_State = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL;
if (p->base.methodId == XZ_ID_Delta)
Delta_Init(p->base.delta_State);
}
#define CASE_BRA_CONV(isa) case XZ_ID_ ## isa: size = isa ## _Convert(data, size, p->ip, p->encodeMode); break;
static SizeT BraState_Filter(void *pp, Byte *data, SizeT size)
static const z7_Func_BranchConv g_Funcs_BranchConv_RISC_Dec[] =
{
Z7_BRANCH_CONV_DEC(PPC),
Z7_BRANCH_CONV_DEC(IA64),
Z7_BRANCH_CONV_DEC(ARM),
Z7_BRANCH_CONV_DEC(ARMT),
Z7_BRANCH_CONV_DEC(SPARC),
Z7_BRANCH_CONV_DEC(ARM64)
};
static SizeT XzBcFilterStateBase_Filter_Dec(CXzBcFilterStateBase *p, Byte *data, SizeT size)
{
CBraState *p = ((CBraState *)pp);
switch (p->methodId)
{
case XZ_ID_Delta:
if (p->encodeMode)
Delta_Encode(p->deltaState, p->delta, data, size);
else
Delta_Decode(p->deltaState, p->delta, data, size);
Delta_Decode(p->delta_State, p->delta, data, size);
break;
case XZ_ID_X86:
size = x86_Convert(data, size, p->ip, &p->x86State, p->encodeMode);
size = (SizeT)(z7_BranchConvSt_X86_Dec(data, size, p->ip, &p->X86_State) - data);
break;
default:
if (p->methodId >= XZ_ID_PPC)
{
const UInt32 i = p->methodId - XZ_ID_PPC;
if (i < Z7_ARRAY_SIZE(g_Funcs_BranchConv_RISC_Dec))
size = (SizeT)(g_Funcs_BranchConv_RISC_Dec[i](data, size, p->ip) - data);
}
break;
CASE_BRA_CONV(PPC)
CASE_BRA_CONV(IA64)
CASE_BRA_CONV(ARM)
CASE_BRA_CONV(ARMT)
CASE_BRA_CONV(SPARC)
}
p->ip += (UInt32)size;
return size;
}
static SRes BraState_Code2(void *pp,
static SizeT XzBcFilterState_Filter(void *pp, Byte *data, SizeT size)
{
CXzBcFilterState *p = ((CXzBcFilterState *)pp);
return p->filter_func(&p->base, data, size);
}
static SRes XzBcFilterState_Code2(void *pp,
Byte *dest, SizeT *destLen,
const Byte *src, SizeT *srcLen, int srcWasFinished,
ECoderFinishMode finishMode,
// int *wasFinished
ECoderStatus *status)
{
CBraState *p = ((CBraState *)pp);
CXzBcFilterState *p = ((CXzBcFilterState *)pp);
SizeT destRem = *destLen;
SizeT srcRem = *srcLen;
UNUSED_VAR(finishMode);
UNUSED_VAR(finishMode)
*destLen = 0;
*srcLen = 0;
// *wasFinished = False;
*status = CODER_STATUS_NOT_FINISHED;
while (destRem > 0)
while (destRem != 0)
{
if (p->bufPos != p->bufConv)
{
size_t size = p->bufConv - p->bufPos;
if (size > destRem)
size = destRem;
memcpy(dest, p->buf + p->bufPos, size);
p->bufPos += size;
*destLen += size;
dest += size;
destRem -= size;
continue;
if (size)
{
if (size > destRem)
size = destRem;
memcpy(dest, p->buf + p->bufPos, size);
p->bufPos += size;
*destLen += size;
dest += size;
destRem -= size;
continue;
}
}
p->bufTotal -= p->bufPos;
@@ -220,7 +241,7 @@ static SRes BraState_Code2(void *pp,
if (p->bufTotal == 0)
break;
p->bufConv = BraState_Filter(pp, p->buf, p->bufTotal);
p->bufConv = p->filter_func(&p->base, p->buf, p->bufTotal);
if (p->bufConv == 0)
{
@@ -240,27 +261,37 @@ static SRes BraState_Code2(void *pp,
}
SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, int encodeMode, ISzAllocPtr alloc);
SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, int encodeMode, ISzAllocPtr alloc)
#define XZ_IS_SUPPORTED_FILTER_ID(id) \
((id) >= XZ_ID_Delta && (id) <= XZ_ID_ARM64)
SRes Xz_StateCoder_Bc_SetFromMethod_Func(IStateCoder *p, UInt64 id,
Xz_Func_BcFilterStateBase_Filter func, ISzAllocPtr alloc)
{
CBraState *decoder;
if (id < XZ_ID_Delta || id > XZ_ID_SPARC)
CXzBcFilterState *decoder;
if (!XZ_IS_SUPPORTED_FILTER_ID(id))
return SZ_ERROR_UNSUPPORTED;
decoder = (CBraState *)p->p;
decoder = (CXzBcFilterState *)p->p;
if (!decoder)
{
decoder = (CBraState *)ISzAlloc_Alloc(alloc, sizeof(CBraState));
decoder = (CXzBcFilterState *)ISzAlloc_Alloc(alloc, sizeof(CXzBcFilterState));
if (!decoder)
return SZ_ERROR_MEM;
decoder->buf = ISzAlloc_Alloc(alloc, BRA_BUF_SIZE);
if (!decoder->buf)
{
ISzAlloc_Free(alloc, decoder);
return SZ_ERROR_MEM;
}
p->p = decoder;
p->Free = BraState_Free;
p->SetProps = BraState_SetProps;
p->Init = BraState_Init;
p->Code2 = BraState_Code2;
p->Filter = BraState_Filter;
p->Free = XzBcFilterState_Free;
p->SetProps = XzBcFilterState_SetProps;
p->Init = XzBcFilterState_Init;
p->Code2 = XzBcFilterState_Code2;
p->Filter = XzBcFilterState_Filter;
decoder->filter_func = func;
}
decoder->methodId = (UInt32)id;
decoder->encodeMode = encodeMode;
decoder->base.methodId = (UInt32)id;
// decoder->encodeMode = encodeMode;
return SZ_OK;
}
@@ -279,9 +310,9 @@ static void SbState_Free(void *pp, ISzAllocPtr alloc)
static SRes SbState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAllocPtr alloc)
{
UNUSED_VAR(pp);
UNUSED_VAR(props);
UNUSED_VAR(alloc);
UNUSED_VAR(pp)
UNUSED_VAR(props)
UNUSED_VAR(alloc)
return (propSize == 0) ? SZ_OK : SZ_ERROR_UNSUPPORTED;
}
@@ -297,7 +328,7 @@ static SRes SbState_Code2(void *pp, Byte *dest, SizeT *destLen, const Byte *src,
{
CSbDec *p = (CSbDec *)pp;
SRes res;
UNUSED_VAR(srcWasFinished);
UNUSED_VAR(srcWasFinished)
p->dest = dest;
p->destLen = *destLen;
p->src = src;
@@ -389,7 +420,7 @@ static SRes Lzma2State_Code2(void *pp, Byte *dest, SizeT *destLen, const Byte *s
ELzmaStatus status2;
/* ELzmaFinishMode fm = (finishMode == LZMA_FINISH_ANY) ? LZMA_FINISH_ANY : LZMA_FINISH_END; */
SRes res;
UNUSED_VAR(srcWasFinished);
UNUSED_VAR(srcWasFinished)
if (spec->outBufMode)
{
SizeT dicPos = spec->decoder.decoder.dicPos;
@@ -420,7 +451,7 @@ static SRes Lzma2State_SetFromMethod(IStateCoder *p, Byte *outBuf, size_t outBuf
p->Init = Lzma2State_Init;
p->Code2 = Lzma2State_Code2;
p->Filter = NULL;
Lzma2Dec_Construct(&spec->decoder);
Lzma2Dec_CONSTRUCT(&spec->decoder)
}
spec->outBufMode = False;
if (outBuf)
@@ -519,7 +550,8 @@ static SRes MixCoder_SetFromMethod(CMixCoder *p, unsigned coderIndex, UInt64 met
}
if (coderIndex == 0)
return SZ_ERROR_UNSUPPORTED;
return BraState_SetFromMethod(sc, methodId, 0, p->alloc);
return Xz_StateCoder_Bc_SetFromMethod_Func(sc, methodId,
XzBcFilterStateBase_Filter_Dec, p->alloc);
}
@@ -568,7 +600,7 @@ static SRes MixCoder_Code(CMixCoder *p,
SizeT destLen2, srcLen2;
int wasFinished;
PRF_STR("------- MixCoder Single ----------");
PRF_STR("------- MixCoder Single ----------")
srcLen2 = srcLenOrig;
destLen2 = destLenOrig;
@@ -615,14 +647,14 @@ static SRes MixCoder_Code(CMixCoder *p,
processed = coder->Filter(coder->p, p->outBuf, processed);
if (wasFinished || (destFinish && p->outWritten == destLenOrig))
processed = p->outWritten;
PRF_STR_INT("filter", i);
PRF_STR_INT("filter", i)
}
*destLen = processed;
}
return res;
}
PRF_STR("standard mix");
PRF_STR("standard mix")
if (p->numCoders != 1)
{
@@ -779,7 +811,7 @@ static BoolInt Xz_CheckFooter(CXzStreamFlags flags, UInt64 indexSize, const Byte
static BoolInt XzBlock_AreSupportedFilters(const CXzBlock *p)
{
unsigned numFilters = XzBlock_GetNumFilters(p) - 1;
const unsigned numFilters = XzBlock_GetNumFilters(p) - 1;
unsigned i;
{
const CXzFilter *f = &p->filters[numFilters];
@@ -795,8 +827,7 @@ static BoolInt XzBlock_AreSupportedFilters(const CXzBlock *p)
if (f->propsSize != 1)
return False;
}
else if (f->id < XZ_ID_Delta
|| f->id > XZ_ID_SPARC
else if (!XZ_IS_SUPPORTED_FILTER_ID(f->id)
|| (f->propsSize != 0 && f->propsSize != 4))
return False;
}
@@ -821,22 +852,24 @@ SRes XzBlock_Parse(CXzBlock *p, const Byte *header)
p->packSize = (UInt64)(Int64)-1;
if (XzBlock_HasPackSize(p))
{
READ_VARINT_AND_CHECK(header, pos, headerSize, &p->packSize);
READ_VARINT_AND_CHECK(header, pos, headerSize, &p->packSize)
if (p->packSize == 0 || p->packSize + headerSize >= (UInt64)1 << 63)
return SZ_ERROR_ARCHIVE;
}
p->unpackSize = (UInt64)(Int64)-1;
if (XzBlock_HasUnpackSize(p))
READ_VARINT_AND_CHECK(header, pos, headerSize, &p->unpackSize);
{
READ_VARINT_AND_CHECK(header, pos, headerSize, &p->unpackSize)
}
numFilters = XzBlock_GetNumFilters(p);
for (i = 0; i < numFilters; i++)
{
CXzFilter *filter = p->filters + i;
UInt64 size;
READ_VARINT_AND_CHECK(header, pos, headerSize, &filter->id);
READ_VARINT_AND_CHECK(header, pos, headerSize, &size);
READ_VARINT_AND_CHECK(header, pos, headerSize, &filter->id)
READ_VARINT_AND_CHECK(header, pos, headerSize, &size)
if (size > headerSize - pos || size > XZ_FILTER_PROPS_SIZE_MAX)
return SZ_ERROR_ARCHIVE;
filter->propsSize = (UInt32)size;
@@ -894,20 +927,20 @@ static SRes XzDecMix_Init(CMixCoder *p, const CXzBlock *block, Byte *outBuf, siz
MixCoder_Free(p);
for (i = 0; i < numFilters; i++)
{
RINOK(MixCoder_SetFromMethod(p, i, block->filters[numFilters - 1 - i].id, outBuf, outBufSize));
RINOK(MixCoder_SetFromMethod(p, i, block->filters[numFilters - 1 - i].id, outBuf, outBufSize))
}
p->numCoders = numFilters;
}
else
{
RINOK(MixCoder_ResetFromMethod(p, 0, block->filters[numFilters - 1].id, outBuf, outBufSize));
RINOK(MixCoder_ResetFromMethod(p, 0, block->filters[numFilters - 1].id, outBuf, outBufSize))
}
for (i = 0; i < numFilters; i++)
{
const CXzFilter *f = &block->filters[numFilters - 1 - i];
IStateCoder *sc = &p->coders[i];
RINOK(sc->SetProps(sc->p, f->props, f->propsSize, p->alloc));
RINOK(sc->SetProps(sc->p, f->props, f->propsSize, p->alloc))
}
MixCoder_Init(p);
@@ -1054,14 +1087,14 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen,
(*destLen) += destLen2;
p->unpackSize += destLen2;
RINOK(res);
RINOK(res)
if (*status != CODER_STATUS_FINISHED_WITH_MARK)
{
if (p->block.packSize == p->packSize
&& *status == CODER_STATUS_NEEDS_MORE_INPUT)
{
PRF_STR("CODER_STATUS_NEEDS_MORE_INPUT");
PRF_STR("CODER_STATUS_NEEDS_MORE_INPUT")
*status = CODER_STATUS_NOT_SPECIFIED;
return SZ_ERROR_DATA;
}
@@ -1078,7 +1111,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen,
if ((p->block.packSize != (UInt64)(Int64)-1 && p->block.packSize != p->packSize)
|| (p->block.unpackSize != (UInt64)(Int64)-1 && p->block.unpackSize != p->unpackSize))
{
PRF_STR("ERROR: block.size mismatch");
PRF_STR("ERROR: block.size mismatch")
return SZ_ERROR_DATA;
}
}
@@ -1109,7 +1142,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen,
}
else
{
RINOK(Xz_ParseHeader(&p->streamFlags, p->buf));
RINOK(Xz_ParseHeader(&p->streamFlags, p->buf))
p->numStartedStreams++;
p->indexSize = 0;
p->numBlocks = 0;
@@ -1155,7 +1188,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen,
}
else
{
RINOK(XzBlock_Parse(&p->block, p->buf));
RINOK(XzBlock_Parse(&p->block, p->buf))
if (!XzBlock_AreSupportedFilters(&p->block))
return SZ_ERROR_UNSUPPORTED;
p->numTotalBlocks++;
@@ -1168,7 +1201,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen,
p->headerParsedOk = True;
return SZ_OK;
}
RINOK(XzDecMix_Init(&p->decoder, &p->block, p->outBuf, p->outBufSize));
RINOK(XzDecMix_Init(&p->decoder, &p->block, p->outBuf, p->outBufSize))
}
break;
}
@@ -1389,7 +1422,7 @@ UInt64 XzUnpacker_GetExtraSize(const CXzUnpacker *p)
#ifndef _7ZIP_ST
#ifndef Z7_ST
#include "MtDec.h"
#endif
@@ -1400,7 +1433,7 @@ void XzDecMtProps_Init(CXzDecMtProps *p)
p->outStep_ST = 1 << 20;
p->ignoreErrors = False;
#ifndef _7ZIP_ST
#ifndef Z7_ST
p->numThreads = 1;
p->inBufSize_MT = 1 << 18;
p->memUseMax = sizeof(size_t) << 28;
@@ -1409,7 +1442,7 @@ void XzDecMtProps_Init(CXzDecMtProps *p)
#ifndef _7ZIP_ST
#ifndef Z7_ST
/* ---------- CXzDecMtThread ---------- */
@@ -1448,7 +1481,7 @@ typedef struct
/* ---------- CXzDecMt ---------- */
typedef struct
struct CXzDecMt
{
CAlignOffsetAlloc alignOffsetAlloc;
ISzAllocPtr allocMid;
@@ -1456,9 +1489,9 @@ typedef struct
CXzDecMtProps props;
size_t unpackBlockMaxSize;
ISeqInStream *inStream;
ISeqOutStream *outStream;
ICompressProgress *progress;
ISeqInStreamPtr inStream;
ISeqOutStreamPtr outStream;
ICompressProgressPtr progress;
BoolInt finishMode;
BoolInt outSize_Defined;
@@ -1481,7 +1514,7 @@ typedef struct
ECoderStatus status;
SRes codeRes;
#ifndef _7ZIP_ST
#ifndef Z7_ST
BoolInt mainDecoderWasCalled;
// int statErrorDefined;
int finishedDecoderIndex;
@@ -1504,10 +1537,9 @@ typedef struct
BoolInt mtc_WasConstructed;
CMtDec mtc;
CXzDecMtThread coders[MTDEC__THREADS_MAX];
CXzDecMtThread coders[MTDEC_THREADS_MAX];
#endif
} CXzDecMt;
};
@@ -1535,11 +1567,11 @@ CXzDecMtHandle XzDecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid)
XzDecMtProps_Init(&p->props);
#ifndef _7ZIP_ST
#ifndef Z7_ST
p->mtc_WasConstructed = False;
{
unsigned i;
for (i = 0; i < MTDEC__THREADS_MAX; i++)
for (i = 0; i < MTDEC_THREADS_MAX; i++)
{
CXzDecMtThread *coder = &p->coders[i];
coder->dec_created = False;
@@ -1549,16 +1581,16 @@ CXzDecMtHandle XzDecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid)
}
#endif
return p;
return (CXzDecMtHandle)p;
}
#ifndef _7ZIP_ST
#ifndef Z7_ST
static void XzDecMt_FreeOutBufs(CXzDecMt *p)
{
unsigned i;
for (i = 0; i < MTDEC__THREADS_MAX; i++)
for (i = 0; i < MTDEC_THREADS_MAX; i++)
{
CXzDecMtThread *coder = &p->coders[i];
if (coder->outBuf)
@@ -1595,13 +1627,15 @@ static void XzDecMt_FreeSt(CXzDecMt *p)
}
void XzDecMt_Destroy(CXzDecMtHandle pp)
// #define GET_CXzDecMt_p CXzDecMt *p = pp;
void XzDecMt_Destroy(CXzDecMtHandle p)
{
CXzDecMt *p = (CXzDecMt *)pp;
// GET_CXzDecMt_p
XzDecMt_FreeSt(p);
#ifndef _7ZIP_ST
#ifndef Z7_ST
if (p->mtc_WasConstructed)
{
@@ -1610,7 +1644,7 @@ void XzDecMt_Destroy(CXzDecMtHandle pp)
}
{
unsigned i;
for (i = 0; i < MTDEC__THREADS_MAX; i++)
for (i = 0; i < MTDEC_THREADS_MAX; i++)
{
CXzDecMtThread *t = &p->coders[i];
if (t->dec_created)
@@ -1625,12 +1659,12 @@ void XzDecMt_Destroy(CXzDecMtHandle pp)
#endif
ISzAlloc_Free(p->alignOffsetAlloc.baseAlloc, pp);
ISzAlloc_Free(p->alignOffsetAlloc.baseAlloc, p);
}
#ifndef _7ZIP_ST
#ifndef Z7_ST
static void XzDecMt_Callback_Parse(void *obj, unsigned coderIndex, CMtDecCallbackInfo *cc)
{
@@ -1696,7 +1730,7 @@ static void XzDecMt_Callback_Parse(void *obj, unsigned coderIndex, CMtDecCallbac
coder->dec.parseMode = True;
coder->dec.headerParsedOk = False;
PRF_STR_INT("Parse", srcSize2);
PRF_STR_INT("Parse", srcSize2)
res = XzUnpacker_Code(&coder->dec,
NULL, &destSize,
@@ -2071,7 +2105,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex,
}
data += cur;
size -= cur;
// PRF_STR_INT("Written size =", size);
// PRF_STR_INT("Written size =", size)
if (size == 0)
break;
res = MtProgress_ProgressAdd(&me->mtc.mtProgress, 0, 0);
@@ -2087,7 +2121,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex,
return res;
}
RINOK(res);
RINOK(res)
if (coder->inPreSize != coder->inCodeSize
|| coder->blockPackTotal != coder->inCodeSize)
@@ -2106,13 +2140,13 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex,
// (coder->state == MTDEC_PARSE_END) means that there are no other working threads
// so we can use mtc variables without lock
PRF_STR_INT("Write MTDEC_PARSE_END", me->mtc.inProcessed);
PRF_STR_INT("Write MTDEC_PARSE_END", me->mtc.inProcessed)
me->mtc.mtProgress.totalInSize = me->mtc.inProcessed;
{
CXzUnpacker *dec = &me->dec;
PRF_STR_INT("PostSingle", srcSize);
PRF_STR_INT("PostSingle", srcSize)
{
size_t srcProcessed = srcSize;
@@ -2186,7 +2220,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex,
me->mtc.crossEnd = srcSize;
}
PRF_STR_INT("XZ_STATE_STREAM_HEADER crossEnd = ", (unsigned)me->mtc.crossEnd);
PRF_STR_INT("XZ_STATE_STREAM_HEADER crossEnd = ", (unsigned)me->mtc.crossEnd)
return SZ_OK;
}
@@ -2277,7 +2311,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex,
UInt64 inDelta = me->mtc.inProcessed - inProgressPrev;
if (inDelta >= (1 << 22))
{
RINOK(MtProgress_Progress_ST(&me->mtc.mtProgress));
RINOK(MtProgress_Progress_ST(&me->mtc.mtProgress))
inProgressPrev = me->mtc.inProcessed;
}
}
@@ -2331,7 +2365,7 @@ void XzStatInfo_Clear(CXzStatInfo *p)
*/
static SRes XzDecMt_Decode_ST(CXzDecMt *p
#ifndef _7ZIP_ST
#ifndef Z7_ST
, BoolInt tMode
#endif
, CXzStatInfo *stat)
@@ -2343,7 +2377,7 @@ static SRes XzDecMt_Decode_ST(CXzDecMt *p
CXzUnpacker *dec;
#ifndef _7ZIP_ST
#ifndef Z7_ST
if (tMode)
{
XzDecMt_FreeOutBufs(p);
@@ -2400,7 +2434,7 @@ static SRes XzDecMt_Decode_ST(CXzDecMt *p
if (inPos == inLim)
{
#ifndef _7ZIP_ST
#ifndef Z7_ST
if (tMode)
{
inData = MtDec_Read(&p->mtc, &inLim);
@@ -2577,19 +2611,19 @@ static void XzStatInfo_SetStat(const CXzUnpacker *dec,
SRes XzDecMt_Decode(CXzDecMtHandle pp,
SRes XzDecMt_Decode(CXzDecMtHandle p,
const CXzDecMtProps *props,
const UInt64 *outDataSize, int finishMode,
ISeqOutStream *outStream,
ISeqOutStreamPtr outStream,
// Byte *outBuf, size_t *outBufSize,
ISeqInStream *inStream,
ISeqInStreamPtr inStream,
// const Byte *inData, size_t inDataSize,
CXzStatInfo *stat,
int *isMT,
ICompressProgress *progress)
ICompressProgressPtr progress)
{
CXzDecMt *p = (CXzDecMt *)pp;
#ifndef _7ZIP_ST
// GET_CXzDecMt_p
#ifndef Z7_ST
BoolInt tMode;
#endif
@@ -2640,7 +2674,7 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp,
*/
#ifndef _7ZIP_ST
#ifndef Z7_ST
p->isBlockHeaderState_Parse = False;
p->isBlockHeaderState_Write = False;
@@ -2782,7 +2816,7 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp,
return res;
}
PRF_STR("----- decoding ST -----");
PRF_STR("----- decoding ST -----")
}
#endif
@@ -2792,13 +2826,13 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp,
{
SRes res = XzDecMt_Decode_ST(p
#ifndef _7ZIP_ST
#ifndef Z7_ST
, tMode
#endif
, stat
);
#ifndef _7ZIP_ST
#ifndef Z7_ST
// we must set error code from MT decoding at first
if (p->mainErrorCode != SZ_OK)
stat->DecodeRes = p->mainErrorCode;
@@ -2835,3 +2869,7 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp,
return res;
}
}
#undef PRF
#undef PRF_STR
#undef PRF_STR_INT_2