cli : new : can compress in *.gz format, using --format=gzip command, by Przemyslaw Skibinski
cli : new : advanced benchmark command --priority=rt
cli : fix : write on sparse-enabled file systems in 32-bits mode, by @ds77
-API : new : ZSTD_getFrameCompressedSize(), ZSTD_getFrameContentSize(), ZSTD_findDecompressedSize(), by Sean Purcell
+API : new : ZSTD_findFrameCompressedSize(), ZSTD_getFrameContentSize(), ZSTD_findDecompressedSize(), by Sean Purcell
API : change : ZSTD_compress*() with srcSize==0 create an empty-frame of known size
build:new : meson build system in contrib/meson, by Dima Krasner
doc : new : educational decoder, by Sean Purcell
totalDstSize += ret;
}
{
- size_t const frameSrcSize = ZSTD_getFrameCompressedSize(src, srcSize);
+ size_t const frameSrcSize = ZSTD_findFrameCompressedSize(src, srcSize);
if (ZSTD_isError(frameSrcSize)) {
return ZSTD_CONTENTSIZE_ERROR;
}
return length;
}
-/** ZSTD_getFrameCompressedSize() :
+/** ZSTD_findFrameCompressedSize() :
* compatible with legacy mode
* `src` must point to the start of a ZSTD or ZSTD legacy frame
* `srcSize` must be at least as large as the frame contained
* @return : the compressed size of the frame starting at `src` */
-size_t ZSTD_getFrameCompressedSize(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 (ZSTD_isLegacy(src, srcSize)) return ZSTD_getFrameCompressedSizeLegacy(src, srcSize);
+ if (ZSTD_isLegacy(src, srcSize)) return ZSTD_findFrameCompressedSizeLegacy(src, srcSize);
#endif
- {
+ if (srcSize >= ZSTD_skippableHeaderSize &&
+ (MEM_readLE32(src) & 0xFFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
+ return ZSTD_skippableHeaderSize + MEM_readLE32((const BYTE*)src + 4);
+ } else {
const BYTE* ip = (const BYTE*)src;
const BYTE* const ipstart = ip;
size_t remainingSize = srcSize;
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
if (ZSTD_isLegacy(src, srcSize)) {
- size_t const frameSize = ZSTD_getFrameCompressedSizeLegacy(src, srcSize);
+ size_t const frameSize = ZSTD_findFrameCompressedSizeLegacy(src, srcSize);
size_t decodedSize;
if (ZSTD_isError(frameSize)) return frameSize;
}
}
-MEM_STATIC size_t ZSTD_getFrameCompressedSizeLegacy(const void *src,
+MEM_STATIC size_t ZSTD_findFrameCompressedSizeLegacy(const void *src,
size_t compressedSize)
{
U32 const version = ZSTD_isLegacy(src, compressedSize);
switch(version)
{
case 1 :
- return ZSTDv01_getFrameCompressedSize(src, compressedSize);
+ return ZSTDv01_findFrameCompressedSize(src, compressedSize);
case 2 :
- return ZSTDv02_getFrameCompressedSize(src, compressedSize);
+ return ZSTDv02_findFrameCompressedSize(src, compressedSize);
case 3 :
- return ZSTDv03_getFrameCompressedSize(src, compressedSize);
+ return ZSTDv03_findFrameCompressedSize(src, compressedSize);
case 4 :
- return ZSTDv04_getFrameCompressedSize(src, compressedSize);
+ return ZSTDv04_findFrameCompressedSize(src, compressedSize);
case 5 :
- return ZSTDv05_getFrameCompressedSize(src, compressedSize);
+ return ZSTDv05_findFrameCompressedSize(src, compressedSize);
case 6 :
- return ZSTDv06_getFrameCompressedSize(src, compressedSize);
+ return ZSTDv06_findFrameCompressedSize(src, compressedSize);
case 7 :
- return ZSTDv07_getFrameCompressedSize(src, compressedSize);
+ return ZSTDv07_findFrameCompressedSize(src, compressedSize);
default :
return ERROR(prefix_unknown);
}
return ZSTDv01_decompressDCtx(&ctx, dst, maxDstSize, src, srcSize);
}
-size_t ZSTDv01_getFrameCompressedSize(const void* src, size_t srcSize)
+size_t ZSTDv01_findFrameCompressedSize(const void* src, size_t srcSize)
{
const BYTE* ip = (const BYTE*)src;
size_t remainingSize = srcSize;
return : the number of bytes that would be read to decompress this frame
or an errorCode if it fails (which can be tested using ZSTDv01_isError())
*/
-size_t ZSTDv01_getFrameCompressedSize(const void* src, size_t compressedSize);
+size_t ZSTDv01_findFrameCompressedSize(const void* src, size_t compressedSize);
/**
ZSTDv01_isError() : tells if the result of ZSTDv01_decompress() is an error
return ZSTD_decompressDCtx(&ctx, dst, maxDstSize, src, srcSize);
}
-static size_t ZSTD_getFrameCompressedSize(const void *src, size_t srcSize)
+static size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize)
{
const BYTE* ip = (const BYTE*)src;
return ZSTD_decompress(dst, maxOriginalSize, src, compressedSize);
}
-size_t ZSTDv02_getFrameCompressedSize(const void *src, size_t compressedSize)
+size_t ZSTDv02_findFrameCompressedSize(const void *src, size_t compressedSize)
{
- return ZSTD_getFrameCompressedSize(src, compressedSize);
+ return ZSTD_findFrameCompressedSize(src, compressedSize);
}
ZSTDv02_Dctx* ZSTDv02_createDCtx(void)
return : the number of bytes that would be read to decompress this frame
or an errorCode if it fails (which can be tested using ZSTDv02_isError())
*/
-size_t ZSTDv02_getFrameCompressedSize(const void* src, size_t compressedSize);
+size_t ZSTDv02_findFrameCompressedSize(const void* src, size_t compressedSize);
/**
ZSTDv02_isError() : tells if the result of ZSTDv02_decompress() is an error
return ZSTD_decompressDCtx(&ctx, dst, maxDstSize, src, srcSize);
}
-static size_t ZSTD_getFrameCompressedSize(const void* src, size_t srcSize)
+static size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize)
{
const BYTE* ip = (const BYTE*)src;
size_t remainingSize = srcSize;
return ZSTD_decompress(dst, maxOriginalSize, src, compressedSize);
}
-size_t ZSTDv03_getFrameCompressedSize(const void* src, size_t srcSize)
+size_t ZSTDv03_findFrameCompressedSize(const void* src, size_t srcSize)
{
- return ZSTD_getFrameCompressedSize(src, srcSize);
+ return ZSTD_findFrameCompressedSize(src, srcSize);
}
ZSTDv03_Dctx* ZSTDv03_createDCtx(void)
return : the number of bytes that would be read to decompress this frame
or an errorCode if it fails (which can be tested using ZSTDv03_isError())
*/
-size_t ZSTDv03_getFrameCompressedSize(const void* src, size_t compressedSize);
+size_t ZSTDv03_findFrameCompressedSize(const void* src, size_t compressedSize);
/**
ZSTDv03_isError() : tells if the result of ZSTDv03_decompress() is an error
return op-ostart;
}
-static size_t ZSTD_getFrameCompressedSize(const void* src, size_t srcSize)
+static size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize)
{
const BYTE* ip = (const BYTE*)src;
size_t remainingSize = srcSize;
#endif
}
-size_t ZSTDv04_getFrameCompressedSize(const void* src, size_t srcSize)
+size_t ZSTDv04_findFrameCompressedSize(const void* src, size_t srcSize)
{
- return ZSTD_getFrameCompressedSize(src, srcSize);
+ return ZSTD_findFrameCompressedSize(src, srcSize);
}
size_t ZSTDv04_resetDCtx(ZSTDv04_Dctx* dctx) { return ZSTD_resetDCtx(dctx); }
return : the number of bytes that would be read to decompress this frame
or an errorCode if it fails (which can be tested using ZSTDv04_isError())
*/
-size_t ZSTDv04_getFrameCompressedSize(const void* src, size_t compressedSize);
+size_t ZSTDv04_findFrameCompressedSize(const void* src, size_t compressedSize);
/**
ZSTDv04_isError() : tells if the result of ZSTDv04_decompress() is an error
#endif
}
-size_t ZSTDv05_getFrameCompressedSize(const void *src, size_t srcSize)
+size_t ZSTDv05_findFrameCompressedSize(const void *src, size_t srcSize)
{
const BYTE* ip = (const BYTE*)src;
size_t remainingSize = srcSize;
return : the number of bytes that would be read to decompress this frame
or an errorCode if it fails (which can be tested using ZSTDv05_isError())
*/
-size_t ZSTDv05_getFrameCompressedSize(const void* src, size_t compressedSize);
+size_t ZSTDv05_findFrameCompressedSize(const void* src, size_t compressedSize);
/* *************************************
* Helper functions
#endif
}
-size_t ZSTDv06_getFrameCompressedSize(const void* src, size_t srcSize)
+size_t ZSTDv06_findFrameCompressedSize(const void* src, size_t srcSize)
{
const BYTE* ip = (const BYTE*)src;
size_t remainingSize = srcSize;
return : the number of bytes that would be read to decompress this frame
or an errorCode if it fails (which can be tested using ZSTDv06_isError())
*/
-size_t ZSTDv06_getFrameCompressedSize(const void* src, size_t compressedSize);
+size_t ZSTDv06_findFrameCompressedSize(const void* src, size_t compressedSize);
/* *************************************
* Helper functions
#endif
}
-size_t ZSTDv07_getFrameCompressedSize(const void* src, size_t srcSize)
+size_t ZSTDv07_findFrameCompressedSize(const void* src, size_t srcSize)
{
const BYTE* ip = (const BYTE*)src;
size_t remainingSize = srcSize;
return : the number of bytes that would be read to decompress this frame
or an errorCode if it fails (which can be tested using ZSTDv07_isError())
*/
-size_t ZSTDv07_getFrameCompressedSize(const void* src, size_t compressedSize);
+size_t ZSTDv07_findFrameCompressedSize(const void* src, size_t compressedSize);
/*====== Helper functions ======*/
ZSTDLIBv07_API unsigned ZSTDv07_isError(size_t code); /*!< tells if a `size_t` function result is an error code */
* Compressed size functions
***************************************/
-/*! ZSTD_getFrameCompressedSize() :
+/*! ZSTD_findFrameCompressedSize() :
* `src` should point to the start of a ZSTD encoded frame
* `srcSize` must be at least as large as the frame
* @return : the compressed size of the frame pointed to by `src`, suitable to pass to
* `ZSTD_decompress` or similar, or an error code if given invalid input. */
-ZSTDLIB_API size_t ZSTD_getFrameCompressedSize(const void* src, size_t srcSize);
+ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize);
/***************************************
* Decompressed size functions
if (r != _3BYTESTESTLENGTH) goto _output_error; }
DISPLAYLEVEL(4, "OK \n");
+ /* findFrameCompressedSize on skippable frames */
+ DISPLAYLEVEL(4, "test%3i : frame compressed size of skippable frame : ", testNb++);
+ { const char* frame = "\x50\x2a\x4d\x18\x05\x0\x0\0abcde";
+ size_t const frameSrcSize = 13;
+ if (ZSTD_findFrameCompressedSize(frame, frameSrcSize) != frameSrcSize) goto _output_error; }
+ DISPLAYLEVEL(4, "OK \n");
+
/* error string tests */
DISPLAYLEVEL(4, "test%3i : testing ZSTD error code strings : ", testNb++);
if (strcmp("No error detected", ZSTD_getErrorName((ZSTD_ErrorCode)(0-ZSTD_error_no_error))) != 0) goto _output_error;
&ZSTD_decompress,
&ZSTD_getDecompressedSize,
&ZSTD_findDecompressedSize,
+ &ZSTD_findFrameCompressedSize,
&ZSTD_getFrameContentSize,
&ZSTD_maxCLevel,
&ZSTD_compressBound,