ZSTD_LEGACY_SUPPORT defines lowest supported version

This commit is contained in:
Sean Purcell
2017-03-13 14:32:30 -07:00
parent a296c6646a
commit 334cb34edb
4 changed files with 113 additions and 11 deletions
+8 -5
View File
@@ -31,12 +31,15 @@ FLAGS = $(CPPFLAGS) $(CFLAGS)
ZSTD_FILES := $(wildcard common/*.c compress/*.c decompress/*.c dictBuilder/*.c deprecated/*.c) ZSTD_FILES := $(wildcard common/*.c compress/*.c decompress/*.c dictBuilder/*.c deprecated/*.c)
ifeq ($(ZSTD_LEGACY_SUPPORT), 0) ZSTD_LEGACY_SUPPORT ?= 1
CPPFLAGS += -DZSTD_LEGACY_SUPPORT=0
else ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
CPPFLAGS += -I./legacy -DZSTD_LEGACY_SUPPORT=1 ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
ZSTD_FILES+= $(wildcard legacy/*.c) ZSTD_FILES += $(shell ls legacy/*.c | grep 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
endif endif
CPPFLAGS += -I./legacy
endif
CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
ZSTD_OBJ := $(patsubst %.c,%.o,$(ZSTD_FILES)) ZSTD_OBJ := $(patsubst %.c,%.o,$(ZSTD_FILES))
+2 -2
View File
@@ -320,7 +320,7 @@ size_t ZSTD_getFrameParams(ZSTD_frameParams* fparamsPtr, const void* src, size_t
* - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */ * - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */
unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize) unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize)
{ {
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT==1) #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
if (ZSTD_isLegacy(src, srcSize)) { if (ZSTD_isLegacy(src, srcSize)) {
unsigned long long const ret = ZSTD_getDecompressedSize_legacy(src, srcSize); unsigned long long const ret = ZSTD_getDecompressedSize_legacy(src, srcSize);
return ret == 0 ? ZSTD_CONTENTSIZE_UNKNOWN : ret; return ret == 0 ? ZSTD_CONTENTSIZE_UNKNOWN : ret;
@@ -1472,7 +1472,7 @@ size_t ZSTD_generateNxBytes(void* dst, size_t dstCapacity, BYTE byte, size_t len
* @return : the compressed size of the frame starting at `src` */ * @return : the compressed size of the frame starting at `src` */
size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize) size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize)
{ {
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT==1) #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
if (ZSTD_isLegacy(src, srcSize)) return ZSTD_findFrameCompressedSizeLegacy(src, srcSize); if (ZSTD_isLegacy(src, srcSize)) return ZSTD_findFrameCompressedSizeLegacy(src, srcSize);
#endif #endif
if (srcSize >= ZSTD_skippableHeaderSize && if (srcSize >= ZSTD_skippableHeaderSize &&
+97
View File
@@ -28,6 +28,31 @@ extern "C" {
#include "zstd_v06.h" #include "zstd_v06.h"
#include "zstd_v07.h" #include "zstd_v07.h"
#ifndef ZSTD_LEGACY_SUPPORT
# define ZSTD_LEGACY_SUPPORT 8
#endif
#if (ZSTD_LEGACY_SUPPORT <= 1)
# include "zstd_v01.h"
#endif
#if (ZSTD_LEGACY_SUPPORT <= 2)
# include "zstd_v02.h"
#endif
#if (ZSTD_LEGACY_SUPPORT <= 3)
# include "zstd_v03.h"
#endif
#if (ZSTD_LEGACY_SUPPORT <= 4)
# include "zstd_v04.h"
#endif
#if (ZSTD_LEGACY_SUPPORT <= 5)
# include "zstd_v05.h"
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
# include "zstd_v06.h"
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
# include "zstd_v07.h"
#endif
/** ZSTD_isLegacy() : /** ZSTD_isLegacy() :
@return : > 0 if supported by legacy decoder. 0 otherwise. @return : > 0 if supported by legacy decoder. 0 otherwise.
@@ -40,13 +65,27 @@ MEM_STATIC unsigned ZSTD_isLegacy(const void* src, size_t srcSize)
magicNumberLE = MEM_readLE32(src); magicNumberLE = MEM_readLE32(src);
switch(magicNumberLE) switch(magicNumberLE)
{ {
#if (ZSTD_LEGACY_SUPPORT <= 1)
case ZSTDv01_magicNumberLE:return 1; case ZSTDv01_magicNumberLE:return 1;
#endif
#if (ZSTD_LEGACY_SUPPORT <= 2)
case ZSTDv02_magicNumber : return 2; case ZSTDv02_magicNumber : return 2;
#endif
#if (ZSTD_LEGACY_SUPPORT <= 3)
case ZSTDv03_magicNumber : return 3; case ZSTDv03_magicNumber : return 3;
#endif
#if (ZSTD_LEGACY_SUPPORT <= 4)
case ZSTDv04_magicNumber : return 4; case ZSTDv04_magicNumber : return 4;
#endif
#if (ZSTD_LEGACY_SUPPORT <= 5)
case ZSTDv05_MAGICNUMBER : return 5; case ZSTDv05_MAGICNUMBER : return 5;
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
case ZSTDv06_MAGICNUMBER : return 6; case ZSTDv06_MAGICNUMBER : return 6;
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
case ZSTDv07_MAGICNUMBER : return 7; case ZSTDv07_MAGICNUMBER : return 7;
#endif
default : return 0; default : return 0;
} }
} }
@@ -56,24 +95,30 @@ MEM_STATIC unsigned long long ZSTD_getDecompressedSize_legacy(const void* src, s
{ {
U32 const version = ZSTD_isLegacy(src, srcSize); U32 const version = ZSTD_isLegacy(src, srcSize);
if (version < 5) return 0; /* no decompressed size in frame header, or not a legacy format */ if (version < 5) return 0; /* no decompressed size in frame header, or not a legacy format */
#if (ZSTD_LEGACY_SUPPORT <= 5)
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);
if (frResult != 0) return 0; if (frResult != 0) return 0;
return fParams.srcSize; return fParams.srcSize;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
if (version==6) { if (version==6) {
ZSTDv06_frameParams fParams; ZSTDv06_frameParams fParams;
size_t const frResult = ZSTDv06_getFrameParams(&fParams, src, srcSize); size_t const frResult = ZSTDv06_getFrameParams(&fParams, src, srcSize);
if (frResult != 0) return 0; if (frResult != 0) return 0;
return fParams.frameContentSize; return fParams.frameContentSize;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
if (version==7) { if (version==7) {
ZSTDv07_frameParams fParams; ZSTDv07_frameParams fParams;
size_t const frResult = ZSTDv07_getFrameParams(&fParams, src, srcSize); size_t const frResult = ZSTDv07_getFrameParams(&fParams, src, srcSize);
if (frResult != 0) return 0; if (frResult != 0) return 0;
return fParams.frameContentSize; return fParams.frameContentSize;
} }
#endif
return 0; /* should not be possible */ return 0; /* should not be possible */
} }
@@ -86,14 +131,23 @@ MEM_STATIC size_t ZSTD_decompressLegacy(
U32 const version = ZSTD_isLegacy(src, compressedSize); U32 const version = ZSTD_isLegacy(src, compressedSize);
switch(version) switch(version)
{ {
#if (ZSTD_LEGACY_SUPPORT <= 1)
case 1 : case 1 :
return ZSTDv01_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv01_decompress(dst, dstCapacity, src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 2)
case 2 : case 2 :
return ZSTDv02_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv02_decompress(dst, dstCapacity, src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 3)
case 3 : case 3 :
return ZSTDv03_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv03_decompress(dst, dstCapacity, src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 4)
case 4 : case 4 :
return ZSTDv04_decompress(dst, dstCapacity, src, compressedSize); return ZSTDv04_decompress(dst, dstCapacity, src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 5)
case 5 : case 5 :
{ size_t result; { size_t result;
ZSTDv05_DCtx* const zd = ZSTDv05_createDCtx(); ZSTDv05_DCtx* const zd = ZSTDv05_createDCtx();
@@ -102,6 +156,8 @@ MEM_STATIC size_t ZSTD_decompressLegacy(
ZSTDv05_freeDCtx(zd); ZSTDv05_freeDCtx(zd);
return result; return result;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
case 6 : case 6 :
{ size_t result; { size_t result;
ZSTDv06_DCtx* const zd = ZSTDv06_createDCtx(); ZSTDv06_DCtx* const zd = ZSTDv06_createDCtx();
@@ -110,6 +166,8 @@ MEM_STATIC size_t ZSTD_decompressLegacy(
ZSTDv06_freeDCtx(zd); ZSTDv06_freeDCtx(zd);
return result; return result;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
case 7 : case 7 :
{ size_t result; { size_t result;
ZSTDv07_DCtx* const zd = ZSTDv07_createDCtx(); ZSTDv07_DCtx* const zd = ZSTDv07_createDCtx();
@@ -118,6 +176,7 @@ MEM_STATIC size_t ZSTD_decompressLegacy(
ZSTDv07_freeDCtx(zd); ZSTDv07_freeDCtx(zd);
return result; return result;
} }
#endif
default : default :
return ERROR(prefix_unknown); return ERROR(prefix_unknown);
} }
@@ -129,20 +188,34 @@ MEM_STATIC size_t ZSTD_findFrameCompressedSizeLegacy(const void *src,
U32 const version = ZSTD_isLegacy(src, compressedSize); U32 const version = ZSTD_isLegacy(src, compressedSize);
switch(version) switch(version)
{ {
#if (ZSTD_LEGACY_SUPPORT <= 1)
case 1 : case 1 :
return ZSTDv01_findFrameCompressedSize(src, compressedSize); return ZSTDv01_findFrameCompressedSize(src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 2)
case 2 : case 2 :
return ZSTDv02_findFrameCompressedSize(src, compressedSize); return ZSTDv02_findFrameCompressedSize(src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 3)
case 3 : case 3 :
return ZSTDv03_findFrameCompressedSize(src, compressedSize); return ZSTDv03_findFrameCompressedSize(src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 4)
case 4 : case 4 :
return ZSTDv04_findFrameCompressedSize(src, compressedSize); return ZSTDv04_findFrameCompressedSize(src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 5)
case 5 : case 5 :
return ZSTDv05_findFrameCompressedSize(src, compressedSize); return ZSTDv05_findFrameCompressedSize(src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
case 6 : case 6 :
return ZSTDv06_findFrameCompressedSize(src, compressedSize); return ZSTDv06_findFrameCompressedSize(src, compressedSize);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
case 7 : case 7 :
return ZSTDv07_findFrameCompressedSize(src, compressedSize); return ZSTDv07_findFrameCompressedSize(src, compressedSize);
#endif
default : default :
return ERROR(prefix_unknown); return ERROR(prefix_unknown);
} }
@@ -157,10 +230,18 @@ MEM_STATIC size_t ZSTD_freeLegacyStreamContext(void* legacyContext, U32 version)
case 2 : case 2 :
case 3 : case 3 :
return ERROR(version_unsupported); return ERROR(version_unsupported);
#if (ZSTD_LEGACY_SUPPORT <= 4)
case 4 : return ZBUFFv04_freeDCtx((ZBUFFv04_DCtx*)legacyContext); case 4 : return ZBUFFv04_freeDCtx((ZBUFFv04_DCtx*)legacyContext);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 5)
case 5 : return ZBUFFv05_freeDCtx((ZBUFFv05_DCtx*)legacyContext); case 5 : return ZBUFFv05_freeDCtx((ZBUFFv05_DCtx*)legacyContext);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
case 6 : return ZBUFFv06_freeDCtx((ZBUFFv06_DCtx*)legacyContext); case 6 : return ZBUFFv06_freeDCtx((ZBUFFv06_DCtx*)legacyContext);
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
case 7 : return ZBUFFv07_freeDCtx((ZBUFFv07_DCtx*)legacyContext); case 7 : return ZBUFFv07_freeDCtx((ZBUFFv07_DCtx*)legacyContext);
#endif
} }
} }
@@ -176,6 +257,7 @@ MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U
case 2 : case 2 :
case 3 : case 3 :
return 0; return 0;
#if (ZSTD_LEGACY_SUPPORT <= 4)
case 4 : case 4 :
{ {
ZBUFFv04_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv04_createDCtx() : (ZBUFFv04_DCtx*)*legacyContext; ZBUFFv04_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv04_createDCtx() : (ZBUFFv04_DCtx*)*legacyContext;
@@ -185,6 +267,8 @@ MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U
*legacyContext = dctx; *legacyContext = dctx;
return 0; return 0;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 5)
case 5 : case 5 :
{ {
ZBUFFv05_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv05_createDCtx() : (ZBUFFv05_DCtx*)*legacyContext; ZBUFFv05_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv05_createDCtx() : (ZBUFFv05_DCtx*)*legacyContext;
@@ -193,6 +277,8 @@ MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U
*legacyContext = dctx; *legacyContext = dctx;
return 0; return 0;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
case 6 : case 6 :
{ {
ZBUFFv06_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv06_createDCtx() : (ZBUFFv06_DCtx*)*legacyContext; ZBUFFv06_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv06_createDCtx() : (ZBUFFv06_DCtx*)*legacyContext;
@@ -201,6 +287,8 @@ MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U
*legacyContext = dctx; *legacyContext = dctx;
return 0; return 0;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
case 7 : case 7 :
{ {
ZBUFFv07_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv07_createDCtx() : (ZBUFFv07_DCtx*)*legacyContext; ZBUFFv07_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv07_createDCtx() : (ZBUFFv07_DCtx*)*legacyContext;
@@ -209,6 +297,7 @@ MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U
*legacyContext = dctx; *legacyContext = dctx;
return 0; return 0;
} }
#endif
} }
} }
@@ -224,6 +313,7 @@ MEM_STATIC size_t ZSTD_decompressLegacyStream(void* legacyContext, U32 version,
case 2 : case 2 :
case 3 : case 3 :
return ERROR(version_unsupported); return ERROR(version_unsupported);
#if (ZSTD_LEGACY_SUPPORT <= 4)
case 4 : case 4 :
{ {
ZBUFFv04_DCtx* dctx = (ZBUFFv04_DCtx*) legacyContext; ZBUFFv04_DCtx* dctx = (ZBUFFv04_DCtx*) legacyContext;
@@ -236,6 +326,8 @@ MEM_STATIC size_t ZSTD_decompressLegacyStream(void* legacyContext, U32 version,
input->pos += readSize; input->pos += readSize;
return hintSize; return hintSize;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 5)
case 5 : case 5 :
{ {
ZBUFFv05_DCtx* dctx = (ZBUFFv05_DCtx*) legacyContext; ZBUFFv05_DCtx* dctx = (ZBUFFv05_DCtx*) legacyContext;
@@ -248,6 +340,8 @@ MEM_STATIC size_t ZSTD_decompressLegacyStream(void* legacyContext, U32 version,
input->pos += readSize; input->pos += readSize;
return hintSize; return hintSize;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 6)
case 6 : case 6 :
{ {
ZBUFFv06_DCtx* dctx = (ZBUFFv06_DCtx*) legacyContext; ZBUFFv06_DCtx* dctx = (ZBUFFv06_DCtx*) legacyContext;
@@ -260,6 +354,8 @@ MEM_STATIC size_t ZSTD_decompressLegacyStream(void* legacyContext, U32 version,
input->pos += readSize; input->pos += readSize;
return hintSize; return hintSize;
} }
#endif
#if (ZSTD_LEGACY_SUPPORT <= 7)
case 7 : case 7 :
{ {
ZBUFFv07_DCtx* dctx = (ZBUFFv07_DCtx*) legacyContext; ZBUFFv07_DCtx* dctx = (ZBUFFv07_DCtx*) legacyContext;
@@ -272,6 +368,7 @@ MEM_STATIC size_t ZSTD_decompressLegacyStream(void* legacyContext, U32 version,
input->pos += readSize; input->pos += readSize;
return hintSize; return hintSize;
} }
#endif
} }
} }
+6 -4
View File
@@ -42,12 +42,14 @@ ZSTD_FILES := $(ZSTDDECOMP_FILES) $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES)
ZDICT_FILES := $(ZSTDDIR)/dictBuilder/*.c ZDICT_FILES := $(ZSTDDIR)/dictBuilder/*.c
ZSTDDECOMP_O = $(ZSTDDIR)/decompress/zstd_decompress.o ZSTDDECOMP_O = $(ZSTDDIR)/decompress/zstd_decompress.o
ifeq ($(ZSTD_LEGACY_SUPPORT), 0) ZSTD_LEGACY_SUPPORT ?= 1
ZSTDLEGACY_FILES:= ZSTDLEGACY_FILES:=
ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
ZSTDLEGACY_FILES += $(shell ls $(ZSTDDIR)/legacy/*.c | grep 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
endif
CPPFLAGS += -I$(ZSTDDIR)/legacy
else else
ZSTD_LEGACY_SUPPORT:=1
CPPFLAGS += -I$(ZSTDDIR)/legacy
ZSTDLEGACY_FILES:= $(ZSTDDIR)/legacy/*.c
endif endif
ZSTDLIB_FILES := $(wildcard $(ZSTD_FILES)) $(wildcard $(ZSTDLEGACY_FILES)) $(wildcard $(ZDICT_FILES)) ZSTDLIB_FILES := $(wildcard $(ZSTD_FILES)) $(wildcard $(ZSTDLEGACY_FILES)) $(wildcard $(ZDICT_FILES))