OpenVPN
compat-lz4.h
Go to the documentation of this file.
1 /*
2  * LZ4 - Fast LZ compression algorithm
3  * Header File
4  * Copyright (C) 2011-2016, Yann Collet.
5 
6  BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
7 
8  Redistribution and use in source and binary forms, with or without
9  modification, are permitted provided that the following conditions are
10  met:
11 
12  * Redistributions of source code must retain the above copyright
13  notice, this list of conditions and the following disclaimer.
14  * Redistributions in binary form must reproduce the above
15  copyright notice, this list of conditions and the following disclaimer
16  in the documentation and/or other materials provided with the
17  distribution.
18 
19  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31  You can contact the author at :
32  - LZ4 homepage : http://www.lz4.org
33  - LZ4 source repository : https://github.com/lz4/lz4
34 */
35 #ifndef LZ4_H_2983827168210
36 #define LZ4_H_2983827168210
37 
38 #if defined (__cplusplus)
39 extern "C" {
40 #endif
41 
42 /* --- Dependency --- */
43 #include <stddef.h> /* size_t */
44 
45 
69 /*^***************************************************************
70 * Export parameters
71 *****************************************************************/
72 /*
73 * LZ4_DLL_EXPORT :
74 * Enable exporting of functions when building a Windows DLL
75 */
76 #if defined(LZ4_DLL_EXPORT) && (LZ4_DLL_EXPORT==1)
77 # define LZ4LIB_API __declspec(dllexport)
78 #elif defined(LZ4_DLL_IMPORT) && (LZ4_DLL_IMPORT==1)
79 # define LZ4LIB_API __declspec(dllimport) /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
80 #else
81 # define LZ4LIB_API
82 #endif
83 
84 
85 /*========== Version =========== */
86 #define LZ4_VERSION_MAJOR 1 /* for breaking interface changes */
87 #define LZ4_VERSION_MINOR 7 /* for new (non-breaking) interface capabilities */
88 #define LZ4_VERSION_RELEASE 5 /* for tweaks, bug-fixes, or development */
89 
90 #define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE)
91 
92 #define LZ4_LIB_VERSION LZ4_VERSION_MAJOR.LZ4_VERSION_MINOR.LZ4_VERSION_RELEASE
93 #define LZ4_QUOTE(str) #str
94 #define LZ4_EXPAND_AND_QUOTE(str) LZ4_QUOTE(str)
95 #define LZ4_VERSION_STRING LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION)
96 
97 LZ4LIB_API int LZ4_versionNumber (void);
98 LZ4LIB_API const char* LZ4_versionString (void);
99 
100 
101 /*-************************************
102 * Tuning parameter
103 **************************************/
111 #define LZ4_MEMORY_USAGE 14
112 
113 
114 /*-************************************
115 * Simple Functions
116 **************************************/
130 LZ4LIB_API int LZ4_compress_default(const char* source, char* dest, int sourceSize, int maxDestSize);
131 
141 LZ4LIB_API int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxDecompressedSize);
142 
143 
144 /*-************************************
145 * Advanced Functions
146 **************************************/
147 #define LZ4_MAX_INPUT_SIZE 0x7E000000 /* 2 113 929 216 bytes */
148 #define LZ4_COMPRESSBOUND(isize) ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16)
149 
161 
170 LZ4LIB_API int LZ4_compress_fast (const char* source, char* dest, int sourceSize, int maxDestSize, int acceleration);
171 
172 
180 LZ4LIB_API int LZ4_sizeofState(void);
181 LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* source, char* dest, int inputSize, int maxDestSize, int acceleration);
182 
183 
195 LZ4LIB_API int LZ4_compress_destSize (const char* source, char* dest, int* sourceSizePtr, int targetDestSize);
196 
197 
209 LZ4LIB_API int LZ4_decompress_fast (const char* source, char* dest, int originalSize);
210 
223 LZ4LIB_API int LZ4_decompress_safe_partial (const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize);
224 
225 
226 /*-*********************************************
227 * Streaming Compression Functions
228 ***********************************************/
229 typedef union LZ4_stream_u LZ4_stream_t; /* incomplete type (defined later) */
230 
236 LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr);
237 
242 LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr);
243 
250 LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize);
251 
259 LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int maxDstSize, int acceleration);
260 
268 LZ4LIB_API int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int dictSize);
269 
270 
271 /*-**********************************************
272 * Streaming Decompression Functions
273 * Bufferless synchronous API
274 ************************************************/
275 typedef union LZ4_streamDecode_u LZ4_streamDecode_t; /* incomplete type (defined later) */
276 
277 /* creation / destruction of streaming decompression tracking structure */
280 
286 LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize);
287 
305 LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxDecompressedSize);
306 LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize);
307 
308 
314 LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* source, char* dest, int compressedSize, int maxDecompressedSize, const char* dictStart, int dictSize);
315 LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* source, char* dest, int originalSize, const char* dictStart, int dictSize);
316 
317 
318 /*^**********************************************
319  * !!!!!! STATIC LINKING ONLY !!!!!!
320  ***********************************************/
321 /*-************************************
322  * Private definitions
323  **************************************
324  * Do not use these definitions.
325  * They are exposed to allow static allocation of `LZ4_stream_t` and `LZ4_streamDecode_t`.
326  * Using these definitions will expose code to API and/or ABI break in future versions of the library.
327  **************************************/
328 #define LZ4_HASHLOG (LZ4_MEMORY_USAGE-2)
329 #define LZ4_HASHTABLESIZE (1 << LZ4_MEMORY_USAGE)
330 #define LZ4_HASH_SIZE_U32 (1 << LZ4_HASHLOG) /* required as macro for static allocation */
331 
332 #if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
333 #include <stdint.h>
334 
335 typedef struct {
336  uint32_t hashTable[LZ4_HASH_SIZE_U32];
337  uint32_t currentOffset;
338  uint32_t initCheck;
339  const uint8_t* dictionary;
340  uint8_t* bufferStart; /* obsolete, used for slideInputBuffer */
341  uint32_t dictSize;
343 
344 typedef struct {
345  const uint8_t* externalDict;
346  size_t extDictSize;
347  const uint8_t* prefixEnd;
348  size_t prefixSize;
350 
351 #else
352 
353 typedef struct {
354  unsigned int hashTable[LZ4_HASH_SIZE_U32];
355  unsigned int currentOffset;
356  unsigned int initCheck;
357  const unsigned char* dictionary;
358  unsigned char* bufferStart; /* obsolete, used for slideInputBuffer */
359  unsigned int dictSize;
361 
362 typedef struct {
363  const unsigned char* externalDict;
364  size_t extDictSize;
365  const unsigned char* prefixEnd;
366  size_t prefixSize;
368 
369 #endif
370 
379 #define LZ4_STREAMSIZE_U64 ((1 << (LZ4_MEMORY_USAGE-3)) + 4)
380 #define LZ4_STREAMSIZE (LZ4_STREAMSIZE_U64 * sizeof(unsigned long long))
382  unsigned long long table[LZ4_STREAMSIZE_U64];
384 } ; /* previously typedef'd to LZ4_stream_t */
385 
386 
395 #define LZ4_STREAMDECODESIZE_U64 4
396 #define LZ4_STREAMDECODESIZE (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long))
398  unsigned long long table[LZ4_STREAMDECODESIZE_U64];
400 } ; /* previously typedef'd to LZ4_streamDecode_t */
401 
402 
403 /*=************************************
404 * Obsolete Functions
405 **************************************/
406 /* Deprecation warnings */
407 /* Should these warnings be a problem,
408  it is generally possible to disable them,
409  typically with -Wno-deprecated-declarations for gcc
410  or _CRT_SECURE_NO_WARNINGS in Visual.
411  Otherwise, it's also possible to define LZ4_DISABLE_DEPRECATE_WARNINGS */
412 #ifdef LZ4_DISABLE_DEPRECATE_WARNINGS
413 # define LZ4_DEPRECATED(message) /* disable deprecation warnings */
414 #else
415 # define LZ4_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
416 # if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
417 # define LZ4_DEPRECATED(message) [[deprecated(message)]]
418 # elif (LZ4_GCC_VERSION >= 405) || defined(__clang__)
419 # define LZ4_DEPRECATED(message) __attribute__((deprecated(message)))
420 # elif (LZ4_GCC_VERSION >= 301)
421 # define LZ4_DEPRECATED(message) __attribute__((deprecated))
422 # elif defined(_MSC_VER)
423 # define LZ4_DEPRECATED(message) __declspec(deprecated(message))
424 # else
425 # pragma message("WARNING: You need to implement LZ4_DEPRECATED for this compiler")
426 # define LZ4_DEPRECATED(message)
427 # endif
428 #endif /* LZ4_DISABLE_DEPRECATE_WARNINGS */
429 
430 /* Obsolete compression functions */
431 LZ4_DEPRECATED("use LZ4_compress_default() instead") int LZ4_compress (const char* source, char* dest, int sourceSize);
432 LZ4_DEPRECATED("use LZ4_compress_default() instead") int LZ4_compress_limitedOutput (const char* source, char* dest, int sourceSize, int maxOutputSize);
433 LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize);
434 LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
435 LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize);
436 LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize);
437 
438 /* Obsolete decompression functions */
439 /* These function names are completely deprecated and must no longer be used.
440  They are only provided in lz4.c for compatibility with older programs.
441  - LZ4_uncompress is the same as LZ4_decompress_fast
442  - LZ4_uncompress_unknownOutputSize is the same as LZ4_decompress_safe
443  These function prototypes are now disabled; uncomment them only if you really need them.
444  It is highly recommended to stop using these prototypes and migrate to maintained ones */
445 /* int LZ4_uncompress (const char* source, char* dest, int outputSize); */
446 /* int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); */
447 
448 /* Obsolete streaming functions; use new streaming interface whenever possible */
449 LZ4_DEPRECATED("use LZ4_createStream() instead") void* LZ4_create (char* inputBuffer);
450 LZ4_DEPRECATED("use LZ4_createStream() instead") int LZ4_sizeofStreamState(void);
451 LZ4_DEPRECATED("use LZ4_resetStream() instead") int LZ4_resetStreamState(void* state, char* inputBuffer);
452 LZ4_DEPRECATED("use LZ4_saveDict() instead") char* LZ4_slideInputBuffer (void* state);
453 
454 /* Obsolete streaming decoding functions */
455 LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize);
456 LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize);
457 
458 
459 #if defined (__cplusplus)
460 }
461 #endif
462 
463 #endif /* LZ4_H_2983827168210 */
#define LZ4_HASH_SIZE_U32
Definition: compat-lz4.h:330
const unsigned char * prefixEnd
Definition: compat-lz4.h:365
LZ4LIB_API int LZ4_saveDict(LZ4_stream_t *streamPtr, char *safeBuffer, int dictSize)
char int int maxOutputSize
Definition: compat-lz4.h:432
LZ4LIB_API int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, const char *dictionary, int dictSize)
LZ4LIB_API int LZ4_decompress_fast(const char *source, char *dest, int originalSize)
char int sourceSize
Definition: compat-lz4.h:431
#define LZ4_DEPRECATED(message)
Definition: compat-lz4.h:426
const unsigned char * dictionary
Definition: compat-lz4.h:357
LZ4LIB_API int LZ4_decompress_safe_usingDict(const char *source, char *dest, int compressedSize, int maxDecompressedSize, const char *dictStart, int dictSize)
LZ4LIB_API int LZ4_decompress_safe_partial(const char *source, char *dest, int compressedSize, int targetOutputSize, int maxDecompressedSize)
char int int maxDstSize
Definition: compat-lz4.h:455
unsigned int initCheck
Definition: compat-lz4.h:356
const char char int inputSize
Definition: compat-lz4.h:433
char int originalSize
Definition: compat-lz4.h:456
LZ4LIB_API int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int compressedSize, int maxDecompressedSize)
LZ4LIB_API const char * LZ4_versionString(void)
LZ4LIB_API int LZ4_decompress_safe(const char *source, char *dest, int compressedSize, int maxDecompressedSize)
LZ4LIB_API int LZ4_compress_fast_continue(LZ4_stream_t *streamPtr, const char *src, char *dst, int srcSize, int maxDstSize, int acceleration)
char * inputBuffer
Definition: compat-lz4.h:451
LZ4_stream_t_internal internal_donotuse
Definition: compat-lz4.h:383
LZ4LIB_API int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int originalSize)
LZ4LIB_API void LZ4_resetStream(LZ4_stream_t *streamPtr)
LZ4LIB_API int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stream)
LZ4LIB_API int LZ4_compressBound(int inputSize)
unsigned long long table[LZ4_STREAMDECODESIZE_U64]
Definition: compat-lz4.h:398
LZ4LIB_API LZ4_streamDecode_t * LZ4_createStreamDecode(void)
LZ4LIB_API int LZ4_versionNumber(void)
LZ4LIB_API LZ4_stream_t * LZ4_createStream(void)
char int compressedSize
Definition: compat-lz4.h:455
unsigned __int32 uint32_t
Definition: config-msvc.h:121
LZ4LIB_API int LZ4_compress_fast_extState(void *state, const char *source, char *dest, int inputSize, int maxDestSize, int acceleration)
unsigned int currentOffset
Definition: compat-lz4.h:355
LZ4LIB_API int LZ4_decompress_fast_usingDict(const char *source, char *dest, int originalSize, const char *dictStart, int dictSize)
const char * source
Definition: compat-lz4.h:433
LZ4LIB_API int LZ4_compress_fast(const char *source, char *dest, int sourceSize, int maxDestSize, int acceleration)
LZ4LIB_API int LZ4_freeStream(LZ4_stream_t *streamPtr)
LZ4LIB_API int LZ4_sizeofState(void)
#define LZ4LIB_API
Introduction.
Definition: compat-lz4.h:81
unsigned __int8 uint8_t
Definition: config-msvc.h:123
LZ4LIB_API int LZ4_compress_default(const char *source, char *dest, int sourceSize, int maxDestSize)
LZ4LIB_API int LZ4_loadDict(LZ4_stream_t *streamPtr, const char *dictionary, int dictSize)
LZ4_streamDecode_t_internal internal_donotuse
Definition: compat-lz4.h:399
LZ4LIB_API int LZ4_compress_destSize(const char *source, char *dest, int *sourceSizePtr, int targetDestSize)
#define LZ4_STREAMDECODESIZE_U64
Definition: compat-lz4.h:395
unsigned int dictSize
Definition: compat-lz4.h:359
char * dst
Definition: compat-lz4.h:455
const unsigned char * externalDict
Definition: compat-lz4.h:363
unsigned char * bufferStart
Definition: compat-lz4.h:358
char * dest
Definition: compat-lz4.h:431
#define LZ4_STREAMSIZE_U64
Definition: compat-lz4.h:379