simplified legacy functions, no longer need magic number

This commit is contained in:
Yann Collet 2016-07-07 14:40:13 +02:00
parent e72efeb0a1
commit 19c27d27f1
4 changed files with 28 additions and 33 deletions

10
NEWS
View File

@ -1,10 +1,12 @@
v0.7.3 v0.7.3
added : `--` separator, stating that all following arguments are file names. Suggested by Chip Turner. New : `--` separator, stating that all following arguments are file names. Suggested by Chip Turner.
added : `ZSTD_getDecompressedSize()` New : `ZSTD_getDecompressedSize()`
added : OpenBSD target, by Juan Francisco Cantero Hurtado New : OpenBSD target, by Juan Francisco Cantero Hurtado
New : `examples` directory
fixed : dictBuilder using HC levels, reported by Bartosz Taudul fixed : dictBuilder using HC levels, reported by Bartosz Taudul
fixed : legacy support from ZSTD_decompress_usingDDict(), reported by Felix Handte fixed : legacy support from ZSTD_decompress_usingDDict(), reported by Felix Handte
modified : removed `mem.h` dependency from `zstd.h` (experimental section) modified : removed "mem.h" and "error_public.h" dependencies from "zstd.h" (experimental section)
modified : legacy functions no longer need magic number
v0.7.2 v0.7.2
fixed : ZSTD_decompressBlock() using multiple consecutive blocks. Reported by Greg Slazinski. fixed : ZSTD_decompressBlock() using multiple consecutive blocks. Reported by Greg Slazinski.

View File

@ -398,12 +398,10 @@ size_t ZSTD_getFrameParams(ZSTD_frameParams* fparamsPtr, const void* src, size_t
- decompressed size is not provided within frame header - decompressed size is not provided within frame header
- frame header unknown / not supported - frame header unknown / not supported
- frame header not completely provided (`srcSize` too small) */ - frame header not completely provided (`srcSize` too small) */
unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize) { unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize)
#if ZSTD_LEGACY_SUPPORT {
if (srcSize < 4) return 0; #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT==1)
{ U32 const magic = MEM_readLE32(src); if (ZSTD_isLegacy(src, srcSize)) return ZSTD_getDecompressedSize_legacy(src, srcSize);
if (ZSTD_isLegacy(magic)) return ZSTD_getDecompressedSize_legacy(src, srcSize);
}
#endif #endif
{ ZSTD_frameParams fparams; { ZSTD_frameParams fparams;
size_t const frResult = ZSTD_getFrameParams(&fparams, src, srcSize); size_t const frResult = ZSTD_getFrameParams(&fparams, src, srcSize);
@ -1047,10 +1045,7 @@ size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx,
const void* dict, size_t dictSize) const void* dict, size_t dictSize)
{ {
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT==1) #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT==1)
{ U32 const magicNumber = MEM_readLE32(src); if (ZSTD_isLegacy(src, srcSize)) return ZSTD_decompressLegacy(dst, dstCapacity, src, srcSize, dict, dictSize);
if (ZSTD_isLegacy(magicNumber))
return ZSTD_decompressLegacy(dst, dstCapacity, src, srcSize, dict, dictSize, magicNumber);
}
#endif #endif
ZSTD_decompressBegin_usingDict(dctx, dict, dictSize); ZSTD_decompressBegin_usingDict(dctx, dict, dictSize);
ZSTD_checkContinuity(dctx, dst); ZSTD_checkContinuity(dctx, dst);
@ -1357,10 +1352,7 @@ ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx,
const ZSTD_DDict* ddict) const ZSTD_DDict* ddict)
{ {
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT==1) #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT==1)
{ U32 const magicNumber = MEM_readLE32(src); if (ZSTD_isLegacy(src, srcSize)) return ZSTD_decompressLegacy(dst, dstCapacity, src, srcSize, ddict->dictContent, ddict->dictContentSize);
if (ZSTD_isLegacy(magicNumber))
return ZSTD_decompressLegacy(dst, dstCapacity, src, srcSize, ddict->dictContent, ddict->dictContentSize, magicNumber);
}
#endif #endif
return ZSTD_decompress_usingPreparedDCtx(dctx, ddict->refContext, return ZSTD_decompress_usingPreparedDCtx(dctx, ddict->refContext,
dst, dstCapacity, dst, dstCapacity,

View File

@ -54,8 +54,11 @@ extern "C" {
@return : > 0 if supported by legacy decoder. 0 otherwise. @return : > 0 if supported by legacy decoder. 0 otherwise.
return value is the version. return value is the version.
*/ */
MEM_STATIC unsigned ZSTD_isLegacy (U32 magicNumberLE) MEM_STATIC unsigned ZSTD_isLegacy(const void* src, size_t srcSize)
{ {
U32 magicNumberLE;
if (srcSize<4) return 0;
magicNumberLE = MEM_readLE32(src);
switch(magicNumberLE) switch(magicNumberLE)
{ {
case ZSTDv01_magicNumberLE:return 1; case ZSTDv01_magicNumberLE:return 1;
@ -73,10 +76,8 @@ MEM_STATIC unsigned long long ZSTD_getDecompressedSize_legacy(const void* src, s
{ {
if (srcSize < 4) return 0; if (srcSize < 4) return 0;
{ U32 const magic = MEM_readLE32(src); { U32 const version = ZSTD_isLegacy(src, srcSize);
U32 const version = ZSTD_isLegacy(magic); if (version < 5) return 0; /* no decompressed size in frame header, or not a legacy format */
if (!version) return 0; /* not a supported legacy format */
if (version < 5) return 0; /* no decompressed size in frame header */
if (version==5) { if (version==5) {
ZSTDv05_parameters fParams; ZSTDv05_parameters fParams;
size_t const frResult = ZSTDv05_getFrameParams(&fParams, src, srcSize); size_t const frResult = ZSTDv05_getFrameParams(&fParams, src, srcSize);
@ -96,20 +97,20 @@ MEM_STATIC unsigned long long ZSTD_getDecompressedSize_legacy(const void* src, s
MEM_STATIC size_t ZSTD_decompressLegacy( MEM_STATIC size_t ZSTD_decompressLegacy(
void* dst, size_t dstCapacity, void* dst, size_t dstCapacity,
const void* src, size_t compressedSize, const void* src, size_t compressedSize,
const void* dict,size_t dictSize, const void* dict,size_t dictSize)
U32 magicNumberLE)
{ {
switch(magicNumberLE) U32 const version = ZSTD_isLegacy(src, compressedSize);
switch(version)
{ {
case ZSTDv01_magicNumberLE : case 1 :
return ZSTDv01_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv01_decompress(dst, dstCapacity, src, compressedSize);
case ZSTDv02_magicNumber : case 2 :
return ZSTDv02_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv02_decompress(dst, dstCapacity, src, compressedSize);
case ZSTDv03_magicNumber : case 3 :
return ZSTDv03_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv03_decompress(dst, dstCapacity, src, compressedSize);
case ZSTDv04_magicNumber : case 4 :
return ZSTDv04_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv04_decompress(dst, dstCapacity, src, compressedSize);
case ZSTDv05_MAGICNUMBER : case 5 :
{ size_t result; { size_t result;
ZSTDv05_DCtx* const zd = ZSTDv05_createDCtx(); ZSTDv05_DCtx* const zd = ZSTDv05_createDCtx();
if (zd==NULL) return ERROR(memory_allocation); if (zd==NULL) return ERROR(memory_allocation);
@ -117,7 +118,7 @@ MEM_STATIC size_t ZSTD_decompressLegacy(
ZSTDv05_freeDCtx(zd); ZSTDv05_freeDCtx(zd);
return result; return result;
} }
case ZSTDv06_MAGICNUMBER : case 6 :
{ size_t result; { size_t result;
ZSTDv06_DCtx* const zd = ZSTDv06_createDCtx(); ZSTDv06_DCtx* const zd = ZSTDv06_createDCtx();
if (zd==NULL) return ERROR(memory_allocation); if (zd==NULL) return ERROR(memory_allocation);

View File

@ -700,7 +700,7 @@ static int FIO_decompressSrcFile(dRess_t ress, const char* srcFileName)
if (sizeCheck != toRead) EXM_THROW(31, "zstd: %s read error : cannot read header", srcFileName); if (sizeCheck != toRead) EXM_THROW(31, "zstd: %s read error : cannot read header", srcFileName);
{ U32 const magic = MEM_readLE32(ress.srcBuffer); { U32 const magic = MEM_readLE32(ress.srcBuffer);
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
if (ZSTD_isLegacy(magic)) { if (ZSTD_isLegacy(ress.srcBuffer, 4)) {
filesize += FIO_decompressLegacyFrame(dstFile, srcFile, ress.dictBuffer, ress.dictBufferSize, magic); filesize += FIO_decompressLegacyFrame(dstFile, srcFile, ress.dictBuffer, ress.dictBufferSize, magic);
continue; continue;
} }