![]() |
Parolin 0.7.9 6796
Console (soon DLLs) to do a tar like job
|
#include <stddef.h>
Go to the source code of this file.
Data Structures | |
struct | LZ4F_frameInfo_t |
struct | LZ4F_preferences_t |
struct | LZ4F_compressOptions_t |
struct | LZ4F_decompressOptions_t |
Macros | |
#define | LZ4FLIB_VISIBILITY |
#define | LZ4FLIB_API LZ4FLIB_VISIBILITY |
#define | LZ4F_DEPRECATE(x) |
#define | LZ4F_OBSOLETE_ENUM(x) |
#define | LZ4F_INIT_FRAMEINFO { LZ4F_max64KB, LZ4F_blockLinked, LZ4F_noContentChecksum, LZ4F_frame, 0ULL, 0U, LZ4F_noBlockChecksum } /* v1.8.3+ */ |
#define | LZ4F_INIT_PREFERENCES { LZ4F_INIT_FRAMEINFO, 0, 0u, 0u, { 0u, 0u, 0u } } /* v1.8.3+ */ |
#define | LZ4F_VERSION 100 /* This number can be used to check for an incompatible API breaking change */ |
#define | LZ4F_HEADER_SIZE_MIN 7 /* LZ4 Frame header size can vary, depending on selected parameters */ |
#define | LZ4F_HEADER_SIZE_MAX 19 |
#define | LZ4F_BLOCK_HEADER_SIZE 4 |
#define | LZ4F_BLOCK_CHECKSUM_SIZE 4 |
#define | LZ4F_CONTENT_CHECKSUM_SIZE 4 |
#define | LZ4F_ENDMARK_SIZE 4 |
#define | LZ4F_MAGICNUMBER 0x184D2204U |
#define | LZ4F_MAGIC_SKIPPABLE_START 0x184D2A50U |
#define | LZ4F_MIN_SIZE_TO_KNOW_HEADER_LENGTH 5 |
Typedefs | |
typedef LZ4F_cctx * | LZ4F_compressionContext_t |
typedef LZ4F_dctx * | LZ4F_decompressionContext_t |
Enumerations | |
enum | LZ4F_blockSizeID_t { LZ4F_default =0 , LZ4F_max64KB =4 , LZ4F_max256KB =5 , LZ4F_max1MB =6 , LZ4F_max4MB =7 } |
enum | LZ4F_blockMode_t { LZ4F_blockLinked =0 , LZ4F_blockIndependent } |
enum | LZ4F_contentChecksum_t { LZ4F_noContentChecksum =0 , LZ4F_contentChecksumEnabled } |
enum | LZ4F_blockChecksum_t { LZ4F_noBlockChecksum =0 , LZ4F_blockChecksumEnabled } |
enum | LZ4F_frameType_t { LZ4F_frame =0 , LZ4F_skippableFrame } |
#define LZ4F_BLOCK_CHECKSUM_SIZE 4 |
#define LZ4F_BLOCK_HEADER_SIZE 4 |
#define LZ4F_CONTENT_CHECKSUM_SIZE 4 |
#define LZ4F_DEPRECATE | ( | x | ) |
#define LZ4F_ENDMARK_SIZE 4 |
#define LZ4F_HEADER_SIZE_MAX 19 |
#define LZ4F_HEADER_SIZE_MIN 7 /* LZ4 Frame header size can vary, depending on selected parameters */ |
#define LZ4F_INIT_FRAMEINFO { LZ4F_max64KB, LZ4F_blockLinked, LZ4F_noContentChecksum, LZ4F_frame, 0ULL, 0U, LZ4F_noBlockChecksum } /* v1.8.3+ */ |
#define LZ4F_INIT_PREFERENCES { LZ4F_INIT_FRAMEINFO, 0, 0u, 0u, { 0u, 0u, 0u } } /* v1.8.3+ */ |
#define LZ4F_MAGIC_SKIPPABLE_START 0x184D2A50U |
#define LZ4F_MAGICNUMBER 0x184D2204U |
#define LZ4F_MIN_SIZE_TO_KNOW_HEADER_LENGTH 5 |
#define LZ4F_OBSOLETE_ENUM | ( | x | ) |
#define LZ4F_VERSION 100 /* This number can be used to check for an incompatible API breaking change */ |
#define LZ4FLIB_API LZ4FLIB_VISIBILITY |
#define LZ4FLIB_VISIBILITY |
Introduction
lz4frame.h implements LZ4 frame specification: see doc/lz4_Frame_format.md . LZ4 Frames are compatible with lz4
CLI, and designed to be interoperable with any system.
typedef LZ4F_cctx* LZ4F_compressionContext_t |
typedef LZ4F_dctx* LZ4F_decompressionContext_t |
enum LZ4F_blockChecksum_t |
enum LZ4F_blockMode_t |
enum LZ4F_blockSizeID_t |
enum LZ4F_frameType_t |
LZ4FLIB_API size_t LZ4F_compressBegin | ( | LZ4F_cctx * | cctx, |
void * | dstBuffer, | ||
size_t | dstCapacity, | ||
const LZ4F_preferences_t * | prefsPtr ) |
LZ4F_compressBegin() : will write the frame header into dstBuffer. dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes. prefsPtr
is optional : NULL can be provided to set all preferences to default.
LZ4FLIB_API size_t LZ4F_compressBegin_usingCDict | ( | LZ4F_cctx * | cctx, |
void * | dstBuffer, | ||
size_t | dstCapacity, | ||
const LZ4F_CDict * | cdict, | ||
const LZ4F_preferences_t * | prefsPtr ) |
LZ4F_compressBegin_usingCDict() : stable since v1.10 Inits streaming dictionary compression, and writes the frame header into dstBuffer. @dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes. @prefsPtr is optional : one may provide NULL as argument, note however that it's the only way to insert a @dictID in the frame header. @cdict must outlive the compression session.
LZ4FLIB_API size_t LZ4F_compressBegin_usingDict | ( | LZ4F_cctx * | cctx, |
void * | dstBuffer, | ||
size_t | dstCapacity, | ||
const void * | dictBuffer, | ||
size_t | dictSize, | ||
const LZ4F_preferences_t * | prefsPtr ) |
LZ4F_compressBegin_usingDict() : stable since v1.10 Inits dictionary compression streaming, and writes the frame header into dstBuffer. @dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes. @prefsPtr is optional : one may provide NULL as argument, however, it's the only way to provide dictID in the frame header. @dictBuffer must outlive the compression session.
LZ4FLIB_API size_t LZ4F_compressBound | ( | size_t | srcSize, |
const LZ4F_preferences_t * | prefsPtr ) |
LZ4F_compressBound() : Provides minimum dstCapacity required to guarantee success of LZ4F_compressUpdate(), given a srcSize and preferences, for a worst case scenario. When srcSize==0, LZ4F_compressBound() provides an upper bound for LZ4F_flush() and LZ4F_compressEnd() instead. Note that the result is only valid for a single invocation of LZ4F_compressUpdate(). When invoking LZ4F_compressUpdate() multiple times, if the output buffer is gradually filled up instead of emptied and re-used from its start, one must check if there is enough remaining capacity before each invocation, using LZ4F_compressBound().
LZ4FLIB_API size_t LZ4F_compressEnd | ( | LZ4F_cctx * | cctxPtr, |
void * | dstBuffer, | ||
size_t | dstCapacity, | ||
const LZ4F_compressOptions_t * | compressOptionsPtr ) |
LZ4F_compressEnd() : To properly finish an LZ4 frame, invoke LZ4F_compressEnd(). It will flush whatever data remained within cctx
(like LZ4_flush()) and properly finalize the frame, with an endMark and a checksum. cOptPtr
is optional : NULL can be provided, in which case all options will be set to default.
cctx
available again for another compression task.LZ4F_compressEnd() : When you want to properly finish the compressed frame, just call LZ4F_compressEnd(). It will flush whatever data remained within compressionContext (like LZ4_flush()) but also properly finalize the frame, with an endMark and an (optional) checksum. LZ4F_compressOptions_t structure is optional : you can provide NULL as argument.
LZ4FLIB_API size_t LZ4F_compressFrame | ( | void * | dstBuffer, |
size_t | dstCapacity, | ||
const void * | srcBuffer, | ||
size_t | srcSize, | ||
const LZ4F_preferences_t * | preferencesPtr ) |
LZ4F_compressFrame() : Compress srcBuffer content into an LZ4-compressed frame. It's a one shot operation, all input content is consumed, and all output is generated.
Note : it's a stateless operation (no LZ4F_cctx state needed). In order to reduce load on the allocator, LZ4F_compressFrame(), by default, uses the stack to allocate space for the compression state and some table. If this usage of the stack is too much for your application, consider compiling lz4frame.c
with compile-time macro LZ4F_HEAPMODE set to 1 instead. All state allocations will use the Heap. It also means each invocation of LZ4F_compressFrame() will trigger several internal alloc/free invocations.
@dstCapacity MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr). @preferencesPtr is optional : one can provide NULL, in which case all preferences are set to default.
LZ4F_compressFrame() : Compress an entire srcBuffer into a valid LZ4 frame, in a single step. dstBuffer MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr). The LZ4F_preferences_t structure is optional : you can provide NULL as argument. All preferences will be set to default.
LZ4FLIB_API size_t LZ4F_compressFrame_usingCDict | ( | LZ4F_cctx * | cctx, |
void * | dstBuffer, | ||
size_t | dstCapacity, | ||
const void * | srcBuffer, | ||
size_t | srcSize, | ||
const LZ4F_CDict * | cdict, | ||
const LZ4F_preferences_t * | preferencesPtr ) |
LZ4_compressFrame_usingCDict() : stable since v1.10 Compress an entire srcBuffer into a valid LZ4 frame using a digested Dictionary. @cctx must point to a context created by LZ4F_createCompressionContext(). If @cdict==NULL, compress without a dictionary. @dstBuffer MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr). If this condition is not respected, function will fail (
LZ4F_compressFrame_usingCDict() : Compress srcBuffer using a dictionary, in a single step. cdict can be NULL, in which case, no dictionary is used. dstBuffer MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr). The LZ4F_preferences_t structure is optional : you may provide NULL as argument, however, it's the only way to provide a dictID, so it's not recommended.
LZ4FLIB_API size_t LZ4F_compressFrameBound | ( | size_t | srcSize, |
const LZ4F_preferences_t * | preferencesPtr ) |
LZ4F_compressFrameBound() : Returns the maximum possible compressed size with LZ4F_compressFrame() given srcSize and preferences. preferencesPtr
is optional. It can be replaced by NULL, in which case, the function will assume default preferences. Note : this result is only usable with LZ4F_compressFrame(). It may also be relevant to LZ4F_compressUpdate() only if no flush() operation is ever performed.
LZ4FLIB_API int LZ4F_compressionLevel_max | ( | void | ) |
LZ4FLIB_API size_t LZ4F_compressUpdate | ( | LZ4F_cctx * | cctxPtr, |
void * | dstBuffer, | ||
size_t | dstCapacity, | ||
const void * | srcBuffer, | ||
size_t | srcSize, | ||
const LZ4F_compressOptions_t * | compressOptionsPtr ) |
LZ4F_compressUpdate() : LZ4F_compressUpdate() can be called repetitively to compress as much data as necessary. Important rule: dstCapacity MUST be large enough to ensure operation success even in worst case situations. This value is provided by LZ4F_compressBound(). If this condition is not respected, LZ4F_compress() will fail (result is an errorCode). After an error, the state is left in a UB state, and must be re-initialized or freed. If previously an uncompressed block was written, buffered data is flushed before appending compressed data is continued. cOptPtr
is optional : NULL can be provided, in which case all options are set to default.
dstBuffer
(it can be zero, meaning input data was just buffered). or an error code if it fails (which can be tested using LZ4F_isError())LZ4F_compressUpdate() : LZ4F_compressUpdate() can be called repetitively to compress as much data as necessary. When successful, the function always entirely consumes @srcBuffer. src data is either buffered or compressed into @dstBuffer. If previously an uncompressed block was written, buffered data is flushed before appending compressed data is continued. @dstCapacity MUST be >= LZ4F_compressBound(srcSize, preferencesPtr). @compressOptionsPtr is optional : provide NULL to mean "default".
LZ4FLIB_API LZ4F_CDict * LZ4F_createCDict | ( | const void * | dictBuffer, |
size_t | dictSize ) |
LZ4_createCDict() : stable since v1.10 When compressing multiple messages / blocks using the same dictionary, it's recommended to initialize it just once. LZ4_createCDict() will create a digested dictionary, ready to start future compression operations without startup delay. LZ4_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only. @dictBuffer can be released after LZ4_CDict creation, since its content is copied within CDict.
LZ4F_createCDict() : When compressing multiple messages / blocks with the same dictionary, it's recommended to load it just once. LZ4F_createCDict() will create a digested dictionary, ready to start future compression operations without startup delay. LZ4F_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only. @dictBuffer can be released after LZ4F_CDict creation, since its content is copied within CDict
LZ4FLIB_API LZ4F_errorCode_t LZ4F_createCompressionContext | ( | LZ4F_cctx ** | LZ4F_compressionContextPtr, |
unsigned | version ) |
LZ4F_createCompressionContext() : The first thing to do is to create a compressionContext object, which will keep track of operation state during streaming compression. This is achieved using LZ4F_createCompressionContext(), which takes as argument a version, and a pointer to LZ4F_cctx*, to write the resulting pointer into.
LZ4F_createCompressionContext() : The first thing to do is to create a compressionContext object, which will be used in all compression operations. This is achieved using LZ4F_createCompressionContext(), which takes as argument a version and an LZ4F_preferences_t structure. The version provided MUST be LZ4F_VERSION. It is intended to track potential incompatible differences between different binaries. The function will provide a pointer to an allocated LZ4F_compressionContext_t object. If the result LZ4F_errorCode_t is not OK_NoError, there was an error during context creation. Object can release its memory using LZ4F_freeCompressionContext();
LZ4FLIB_API LZ4F_errorCode_t LZ4F_createDecompressionContext | ( | LZ4F_dctx ** | LZ4F_decompressionContextPtr, |
unsigned | versionNumber ) |
LZ4F_createDecompressionContext() : Create an LZ4F_dctx object, to track all decompression operations.
LZ4F_createDecompressionContext() : Create a decompressionContext object, which will track all decompression operations. Provides a pointer to a fully allocated and initialized LZ4F_decompressionContext object. Object can later be released using LZ4F_freeDecompressionContext().
LZ4FLIB_API size_t LZ4F_decompress | ( | LZ4F_dctx * | dctx, |
void * | dstBuffer, | ||
size_t * | dstSizePtr, | ||
const void * | srcBuffer, | ||
size_t * | srcSizePtr, | ||
const LZ4F_decompressOptions_t * | decompressOptionsPtr ) |
LZ4F_decompress() : Call this function repetitively to regenerate data compressed in srcBuffer
.
The function requires a valid dctx state. It will read up to *srcSizePtr bytes from srcBuffer, and decompress data into dstBuffer, of capacity *dstSizePtr.
The nb of bytes consumed from srcBuffer will be written into *srcSizePtr (necessarily <= original value). The nb of bytes decompressed into dstBuffer will be written into *dstSizePtr (necessarily <= original value).
The function does not necessarily read all input bytes, so always check value in *srcSizePtr. Unconsumed source data must be presented again in subsequent invocations.
dstBuffer
can freely change between each consecutive function invocation. dstBuffer
content will be overwritten.
Note: if LZ4F_getFrameInfo()
is called before LZ4F_decompress()
, srcBuffer must be updated to reflect the number of bytes consumed after reading the frame header. Failure to update srcBuffer before calling LZ4F_decompress()
will cause decompression failure or, even worse, successful but incorrect decompression. See the LZ4F_getFrameInfo()
docs for details.
srcSize
bytes LZ4F_decompress() expects for next call. Schematically, it's the size of the current (or remaining) compressed block + header of next block. Respecting the hint provides some small speed benefit, because it skips intermediate buffers. This is just a hint though, it's always possible to provide any srcSize.When a frame is fully decoded,
If decompression failed,
dctx
context is not resumable. Use LZ4F_resetDecompressionContext() to return to clean state.After a frame is fully decoded, dctx can be used again to decompress another frame.
LZ4F_decompress() : Call this function repetitively to regenerate compressed data in srcBuffer. The function will attempt to decode up to *srcSizePtr bytes from srcBuffer into dstBuffer of capacity *dstSizePtr.
The number of bytes regenerated into dstBuffer will be provided within *dstSizePtr (necessarily <= original value).
The number of bytes effectively read from srcBuffer will be provided within *srcSizePtr (necessarily <= original value). If number of bytes read is < number of bytes provided, then decompression operation is not complete. Remaining data will have to be presented again in a subsequent invocation.
The function result is an hint of the better srcSize to use for next call to LZ4F_decompress. Schematically, it's the size of the current (or remaining) compressed block + header of next block. Respecting the hint provides a small boost to performance, since it allows less buffer shuffling. Note that this is just a hint, and it's always possible to any srcSize value. When a frame is fully decoded,
LZ4FLIB_API size_t LZ4F_decompress_usingDict | ( | LZ4F_dctx * | dctx, |
void * | dstBuffer, | ||
size_t * | dstSizePtr, | ||
const void * | srcBuffer, | ||
size_t * | srcSizePtr, | ||
const void * | dict, | ||
size_t | dictSize, | ||
const LZ4F_decompressOptions_t * | decompressOptionsPtr ) |
LZ4F_decompress_usingDict() : stable since v1.10 Same as LZ4F_decompress(), using a predefined dictionary. Dictionary is used "in place", without any preprocessing. It must remain accessible throughout the entire frame decoding.
LZ4F_decompress_usingDict() : Same as LZ4F_decompress(), using a predefined dictionary. Dictionary is used "in place", without any preprocessing. It must remain accessible throughout the entire frame decoding.
LZ4FLIB_API size_t LZ4F_flush | ( | LZ4F_cctx * | cctxPtr, |
void * | dstBuffer, | ||
size_t | dstCapacity, | ||
const LZ4F_compressOptions_t * | compressOptionsPtr ) |
LZ4F_flush() : When data must be generated and sent immediately, without waiting for a block to be completely filled, it's possible to call LZ4_flush(). It will immediately compress any data buffered within cctx. dstCapacity
must be large enough to ensure the operation will be successful. cOptPtr
is optional : it's possible to provide NULL, all options will be set to default.
LZ4F_flush() : When compressed data must be sent immediately, without waiting for a block to be filled, invoke LZ4_flush(), which will immediately compress any remaining data stored within LZ4F_cctx. The result of the function is the number of bytes written into dstBuffer. It can be zero, this means there was no data left within LZ4F_cctx. The function outputs an error code if it fails (can be tested using LZ4F_isError()) LZ4F_compressOptions_t* is optional. NULL is a valid argument.
LZ4FLIB_API void LZ4F_freeCDict | ( | LZ4F_CDict * | CDict | ) |
LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeCompressionContext | ( | LZ4F_cctx * | cctx | ) |
LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeDecompressionContext | ( | LZ4F_dctx * | dctx | ) |
LZ4FLIB_API const char * LZ4F_getErrorName | ( | LZ4F_errorCode_t | code | ) |
return error code string; for debugging
LZ4FLIB_API size_t LZ4F_getFrameInfo | ( | LZ4F_dctx * | dctx, |
LZ4F_frameInfo_t * | frameInfoPtr, | ||
const void * | srcBuffer, | ||
size_t * | srcSizePtr ) |
LZ4F_getFrameInfo() : This function extracts frame parameters (max blockSize, dictID, etc.). Its usage is optional: user can also invoke LZ4F_decompress() directly.
Extracted information will fill an existing LZ4F_frameInfo_t structure. This can be useful for allocation and dictionary identification purposes.
LZ4F_getFrameInfo() can work in the following situations :
1) At the beginning of a new frame, before any invocation of LZ4F_decompress(). It will decode header from srcBuffer
, consuming the header and starting the decoding process.
Input size must be large enough to contain the full frame header. Frame header size can be known beforehand by LZ4F_headerSize(). Frame header size is variable, but is guaranteed to be >= LZ4F_HEADER_SIZE_MIN bytes, and not more than <= LZ4F_HEADER_SIZE_MAX bytes. Hence, blindly providing LZ4F_HEADER_SIZE_MAX bytes or more will always work. It's allowed to provide more input data than the header size, LZ4F_getFrameInfo() will only consume the header.
If input size is not large enough, aka if it's smaller than header size, function will fail and return an error code.
2) After decoding has been started, it's possible to invoke LZ4F_getFrameInfo() anytime to extract already decoded frame parameters stored within dctx.
Note that, if decoding has barely started, and not yet read enough information to decode the header, LZ4F_getFrameInfo() will fail.
The number of bytes consumed from srcBuffer will be updated in *srcSizePtr (necessarily <= original value). LZ4F_getFrameInfo() only consumes bytes when decoding has not yet started, and when decoding the header has been successful. Decompression must then resume from (srcBuffer + *srcSizePtr).
LZ4F_getFrameInfo() : This function extracts frame parameters (max blockSize, frame checksum, etc.). Usage is optional. Objective is to provide relevant information for allocation purposes. This function works in 2 situations :
srcBuffer
, and start the decoding process. Amount of input data provided must be large enough to successfully decode the frame header. A header size is variable, but is guaranteed to be <= LZ4F_HEADER_SIZE_MAX bytes. It's possible to provide more input data than this minimum.LZ4FLIB_API unsigned LZ4F_getVersion | ( | void | ) |
LZ4FLIB_API size_t LZ4F_headerSize | ( | const void * | src, |
size_t | srcSize ) |
LZ4F_headerSize() : v1.9.0+ Provide the header size of a frame starting at src
. srcSize
must be >= LZ4F_MIN_SIZE_TO_KNOW_HEADER_LENGTH, which is enough to decode the header length.
LZ4FLIB_API unsigned LZ4F_isError | ( | LZ4F_errorCode_t | code | ) |
tells when a function result is an error code
LZ4FLIB_API void LZ4F_resetDecompressionContext | ( | LZ4F_dctx * | dctx | ) |
LZ4F_resetDecompressionContext() : added in v1.8.0 In case of an error, the context is left in "undefined" state. In which case, it's necessary to reset it, before re-using it. This method can also be used to abruptly stop any unfinished decompression, and start a new one using same context resources.