extzstd 0.3.3 → 0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -3
  3. data/contrib/zstd/CHANGELOG +39 -2
  4. data/contrib/zstd/CONTRIBUTING.md +3 -3
  5. data/contrib/zstd/Makefile +34 -20
  6. data/contrib/zstd/README.md +6 -2
  7. data/contrib/zstd/SECURITY.md +15 -0
  8. data/contrib/zstd/lib/Makefile +40 -28
  9. data/contrib/zstd/lib/README.md +14 -1
  10. data/contrib/zstd/lib/common/allocations.h +1 -1
  11. data/contrib/zstd/lib/common/bitstream.h +49 -29
  12. data/contrib/zstd/lib/common/compiler.h +114 -22
  13. data/contrib/zstd/lib/common/cpu.h +36 -0
  14. data/contrib/zstd/lib/common/debug.c +6 -0
  15. data/contrib/zstd/lib/common/debug.h +20 -11
  16. data/contrib/zstd/lib/common/error_private.h +45 -36
  17. data/contrib/zstd/lib/common/fse.h +3 -2
  18. data/contrib/zstd/lib/common/fse_decompress.c +19 -17
  19. data/contrib/zstd/lib/common/huf.h +14 -1
  20. data/contrib/zstd/lib/common/mem.h +0 -9
  21. data/contrib/zstd/lib/common/pool.c +1 -1
  22. data/contrib/zstd/lib/common/pool.h +1 -1
  23. data/contrib/zstd/lib/common/portability_macros.h +2 -0
  24. data/contrib/zstd/lib/common/threading.c +8 -2
  25. data/contrib/zstd/lib/common/xxhash.c +5 -11
  26. data/contrib/zstd/lib/common/xxhash.h +2341 -1007
  27. data/contrib/zstd/lib/common/zstd_internal.h +5 -5
  28. data/contrib/zstd/lib/compress/fse_compress.c +8 -7
  29. data/contrib/zstd/lib/compress/huf_compress.c +54 -25
  30. data/contrib/zstd/lib/compress/zstd_compress.c +282 -161
  31. data/contrib/zstd/lib/compress/zstd_compress_internal.h +29 -27
  32. data/contrib/zstd/lib/compress/zstd_compress_superblock.c +224 -113
  33. data/contrib/zstd/lib/compress/zstd_cwksp.h +19 -13
  34. data/contrib/zstd/lib/compress/zstd_double_fast.c +17 -5
  35. data/contrib/zstd/lib/compress/zstd_double_fast.h +11 -0
  36. data/contrib/zstd/lib/compress/zstd_fast.c +14 -6
  37. data/contrib/zstd/lib/compress/zstd_lazy.c +129 -87
  38. data/contrib/zstd/lib/compress/zstd_lazy.h +103 -28
  39. data/contrib/zstd/lib/compress/zstd_ldm.c +8 -2
  40. data/contrib/zstd/lib/compress/zstd_opt.c +216 -112
  41. data/contrib/zstd/lib/compress/zstd_opt.h +31 -7
  42. data/contrib/zstd/lib/compress/zstdmt_compress.c +94 -79
  43. data/contrib/zstd/lib/decompress/huf_decompress.c +188 -126
  44. data/contrib/zstd/lib/decompress/huf_decompress_amd64.S +38 -19
  45. data/contrib/zstd/lib/decompress/zstd_decompress.c +84 -32
  46. data/contrib/zstd/lib/decompress/zstd_decompress_block.c +231 -208
  47. data/contrib/zstd/lib/decompress/zstd_decompress_block.h +1 -1
  48. data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +2 -0
  49. data/contrib/zstd/lib/dictBuilder/cover.c +16 -12
  50. data/contrib/zstd/lib/dictBuilder/cover.h +2 -8
  51. data/contrib/zstd/lib/dictBuilder/fastcover.c +2 -2
  52. data/contrib/zstd/lib/dictBuilder/zdict.c +12 -6
  53. data/contrib/zstd/lib/legacy/zstd_legacy.h +30 -0
  54. data/contrib/zstd/lib/legacy/zstd_v01.c +2 -0
  55. data/contrib/zstd/lib/legacy/zstd_v02.c +4 -16
  56. data/contrib/zstd/lib/legacy/zstd_v03.c +4 -16
  57. data/contrib/zstd/lib/legacy/zstd_v04.c +4 -11
  58. data/contrib/zstd/lib/legacy/zstd_v05.c +1 -0
  59. data/contrib/zstd/lib/legacy/zstd_v06.c +2 -9
  60. data/contrib/zstd/lib/legacy/zstd_v07.c +2 -10
  61. data/contrib/zstd/lib/libzstd.mk +34 -11
  62. data/contrib/zstd/lib/zstd.h +129 -60
  63. data/ext/extconf.rb +19 -1
  64. data/ext/extzstd.c +38 -14
  65. data/ext/extzstd.h +33 -6
  66. data/ext/extzstd_stream.c +74 -31
  67. metadata +4 -5
  68. data/contrib/zstd/appveyor.yml +0 -205
  69. data/ext/depend +0 -2
@@ -47,7 +47,7 @@ typedef enum {
47
47
  */
48
48
  size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
49
49
  void* dst, size_t dstCapacity,
50
- const void* src, size_t srcSize, const int frame, const streaming_operation streaming);
50
+ const void* src, size_t srcSize, const streaming_operation streaming);
51
51
 
52
52
  /* ZSTD_buildFSETable() :
53
53
  * generate FSE decoding table for one symbol (ll, ml or off)
@@ -153,6 +153,7 @@ struct ZSTD_DCtx_s
153
153
  size_t litSize;
154
154
  size_t rleSize;
155
155
  size_t staticSize;
156
+ int isFrameDecompression;
156
157
  #if DYNAMIC_BMI2 != 0
157
158
  int bmi2; /* == 1 if the CPU supports BMI2 and 0 otherwise. CPU support is determined dynamically once per context lifetime. */
158
159
  #endif
@@ -166,6 +167,7 @@ struct ZSTD_DCtx_s
166
167
  ZSTD_DDictHashSet* ddictSet; /* Hash set for multiple ddicts */
167
168
  ZSTD_refMultipleDDicts_e refMultipleDDicts; /* User specified: if == 1, will allow references to multiple DDicts. Default == 0 (disabled) */
168
169
  int disableHufAsm;
170
+ int maxBlockSizeParam;
169
171
 
170
172
  /* streaming */
171
173
  ZSTD_dStreamStage streamStage;
@@ -31,8 +31,8 @@
31
31
  #endif
32
32
 
33
33
  #include "../common/mem.h" /* read */
34
- #include "../common/pool.h"
35
- #include "../common/threading.h"
34
+ #include "../common/pool.h" /* POOL_ctx */
35
+ #include "../common/threading.h" /* ZSTD_pthread_mutex_t */
36
36
  #include "../common/zstd_internal.h" /* includes zstd.h */
37
37
  #include "../common/bits.h" /* ZSTD_highbit32 */
38
38
  #include "../zdict.h"
@@ -78,7 +78,7 @@ static clock_t g_time = 0;
78
78
  #undef LOCALDISPLAYUPDATE
79
79
  #define LOCALDISPLAYUPDATE(displayLevel, l, ...) \
80
80
  if (displayLevel >= l) { \
81
- if ((clock() - g_time > g_refreshRate) || (displayLevel >= 4)) { \
81
+ if ((clock() - g_time > g_refreshRate) || (displayLevel >= 4)) { \
82
82
  g_time = clock(); \
83
83
  DISPLAY(__VA_ARGS__); \
84
84
  } \
@@ -301,9 +301,10 @@ static int WIN_CDECL COVER_strict_cmp8(const void *lp, const void *rp) {
301
301
  * Returns the first pointer in [first, last) whose element does not compare
302
302
  * less than value. If no such element exists it returns last.
303
303
  */
304
- static const size_t *COVER_lower_bound(const size_t *first, const size_t *last,
304
+ static const size_t *COVER_lower_bound(const size_t* first, const size_t* last,
305
305
  size_t value) {
306
- size_t count = last - first;
306
+ size_t count = (size_t)(last - first);
307
+ assert(last >= first);
307
308
  while (count != 0) {
308
309
  size_t step = count / 2;
309
310
  const size_t *ptr = first;
@@ -549,7 +550,8 @@ static void COVER_ctx_destroy(COVER_ctx_t *ctx) {
549
550
  */
550
551
  static size_t COVER_ctx_init(COVER_ctx_t *ctx, const void *samplesBuffer,
551
552
  const size_t *samplesSizes, unsigned nbSamples,
552
- unsigned d, double splitPoint) {
553
+ unsigned d, double splitPoint)
554
+ {
553
555
  const BYTE *const samples = (const BYTE *)samplesBuffer;
554
556
  const size_t totalSamplesSize = COVER_sum(samplesSizes, nbSamples);
555
557
  /* Split samples into testing and training sets */
@@ -733,7 +735,7 @@ static size_t COVER_buildDictionary(const COVER_ctx_t *ctx, U32 *freqs,
733
735
  return tail;
734
736
  }
735
737
 
736
- ZDICTLIB_API size_t ZDICT_trainFromBuffer_cover(
738
+ ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_cover(
737
739
  void *dictBuffer, size_t dictBufferCapacity,
738
740
  const void *samplesBuffer, const size_t *samplesSizes, unsigned nbSamples,
739
741
  ZDICT_cover_params_t parameters)
@@ -907,8 +909,10 @@ void COVER_best_start(COVER_best_t *best) {
907
909
  * Decrements liveJobs and signals any waiting threads if liveJobs == 0.
908
910
  * If this dictionary is the best so far save it and its parameters.
909
911
  */
910
- void COVER_best_finish(COVER_best_t *best, ZDICT_cover_params_t parameters,
911
- COVER_dictSelection_t selection) {
912
+ void COVER_best_finish(COVER_best_t* best,
913
+ ZDICT_cover_params_t parameters,
914
+ COVER_dictSelection_t selection)
915
+ {
912
916
  void* dict = selection.dictContent;
913
917
  size_t compressedSize = selection.totalCompressedSize;
914
918
  size_t dictSize = selection.dictSize;
@@ -980,8 +984,8 @@ COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBuffe
980
984
  size_t largestCompressed = 0;
981
985
  BYTE* customDictContentEnd = customDictContent + dictContentSize;
982
986
 
983
- BYTE * largestDictbuffer = (BYTE *)malloc(dictBufferCapacity);
984
- BYTE * candidateDictBuffer = (BYTE *)malloc(dictBufferCapacity);
987
+ BYTE* largestDictbuffer = (BYTE*)malloc(dictBufferCapacity);
988
+ BYTE* candidateDictBuffer = (BYTE*)malloc(dictBufferCapacity);
985
989
  double regressionTolerance = ((double)params.shrinkDictMaxRegression / 100.0) + 1.00;
986
990
 
987
991
  if (!largestDictbuffer || !candidateDictBuffer) {
@@ -1119,7 +1123,7 @@ _cleanup:
1119
1123
  free(freqs);
1120
1124
  }
1121
1125
 
1122
- ZDICTLIB_API size_t ZDICT_optimizeTrainFromBuffer_cover(
1126
+ ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_cover(
1123
1127
  void* dictBuffer, size_t dictBufferCapacity, const void* samplesBuffer,
1124
1128
  const size_t* samplesSizes, unsigned nbSamples,
1125
1129
  ZDICT_cover_params_t* parameters)
@@ -12,14 +12,8 @@
12
12
  # define ZDICT_STATIC_LINKING_ONLY
13
13
  #endif
14
14
 
15
- #include <stdio.h> /* fprintf */
16
- #include <stdlib.h> /* malloc, free, qsort */
17
- #include <string.h> /* memset */
18
- #include <time.h> /* clock */
19
- #include "../common/mem.h" /* read */
20
- #include "../common/pool.h"
21
- #include "../common/threading.h"
22
- #include "../common/zstd_internal.h" /* includes zstd.h */
15
+ #include "../common/threading.h" /* ZSTD_pthread_mutex_t */
16
+ #include "../common/mem.h" /* U32, BYTE */
23
17
  #include "../zdict.h"
24
18
 
25
19
  /**
@@ -545,7 +545,7 @@ FASTCOVER_convertToFastCoverParams(ZDICT_cover_params_t coverParams,
545
545
  }
546
546
 
547
547
 
548
- ZDICTLIB_API size_t
548
+ ZDICTLIB_STATIC_API size_t
549
549
  ZDICT_trainFromBuffer_fastCover(void* dictBuffer, size_t dictBufferCapacity,
550
550
  const void* samplesBuffer,
551
551
  const size_t* samplesSizes, unsigned nbSamples,
@@ -614,7 +614,7 @@ ZDICT_trainFromBuffer_fastCover(void* dictBuffer, size_t dictBufferCapacity,
614
614
  }
615
615
 
616
616
 
617
- ZDICTLIB_API size_t
617
+ ZDICTLIB_STATIC_API size_t
618
618
  ZDICT_optimizeTrainFromBuffer_fastCover(
619
619
  void* dictBuffer, size_t dictBufferCapacity,
620
620
  const void* samplesBuffer,
@@ -74,9 +74,9 @@ static const U32 g_selectivity_default = 9;
74
74
  * Console display
75
75
  ***************************************/
76
76
  #undef DISPLAY
77
- #define DISPLAY(...) { fprintf(stderr, __VA_ARGS__); fflush( stderr ); }
77
+ #define DISPLAY(...) do { fprintf(stderr, __VA_ARGS__); fflush( stderr ); } while (0)
78
78
  #undef DISPLAYLEVEL
79
- #define DISPLAYLEVEL(l, ...) if (notificationLevel>=l) { DISPLAY(__VA_ARGS__); } /* 0 : no display; 1: errors; 2: default; 3: details; 4: debug */
79
+ #define DISPLAYLEVEL(l, ...) do { if (notificationLevel>=l) { DISPLAY(__VA_ARGS__); } } while (0) /* 0 : no display; 1: errors; 2: default; 3: details; 4: debug */
80
80
 
81
81
  static clock_t ZDICT_clockSpan(clock_t nPrevious) { return clock() - nPrevious; }
82
82
 
@@ -477,10 +477,16 @@ static size_t ZDICT_trainBuffer_legacy(dictItem* dictList, U32 dictListSize,
477
477
  clock_t const refreshRate = CLOCKS_PER_SEC * 3 / 10;
478
478
 
479
479
  # undef DISPLAYUPDATE
480
- # define DISPLAYUPDATE(l, ...) if (notificationLevel>=l) { \
481
- if (ZDICT_clockSpan(displayClock) > refreshRate) \
482
- { displayClock = clock(); DISPLAY(__VA_ARGS__); \
483
- if (notificationLevel>=4) fflush(stderr); } }
480
+ # define DISPLAYUPDATE(l, ...) \
481
+ do { \
482
+ if (notificationLevel>=l) { \
483
+ if (ZDICT_clockSpan(displayClock) > refreshRate) { \
484
+ displayClock = clock(); \
485
+ DISPLAY(__VA_ARGS__); \
486
+ } \
487
+ if (notificationLevel>=4) fflush(stderr); \
488
+ } \
489
+ } while (0)
484
490
 
485
491
  /* init */
486
492
  DISPLAYLEVEL(2, "\r%70s\r", ""); /* clean display line */
@@ -124,6 +124,20 @@ MEM_STATIC size_t ZSTD_decompressLegacy(
124
124
  const void* dict,size_t dictSize)
125
125
  {
126
126
  U32 const version = ZSTD_isLegacy(src, compressedSize);
127
+ char x;
128
+ /* Avoid passing NULL to legacy decoding. */
129
+ if (dst == NULL) {
130
+ assert(dstCapacity == 0);
131
+ dst = &x;
132
+ }
133
+ if (src == NULL) {
134
+ assert(compressedSize == 0);
135
+ src = &x;
136
+ }
137
+ if (dict == NULL) {
138
+ assert(dictSize == 0);
139
+ dict = &x;
140
+ }
127
141
  (void)dst; (void)dstCapacity; (void)dict; (void)dictSize; /* unused when ZSTD_LEGACY_SUPPORT >= 8 */
128
142
  switch(version)
129
143
  {
@@ -287,6 +301,12 @@ MEM_STATIC size_t ZSTD_freeLegacyStreamContext(void* legacyContext, U32 version)
287
301
  MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U32 newVersion,
288
302
  const void* dict, size_t dictSize)
289
303
  {
304
+ char x;
305
+ /* Avoid passing NULL to legacy decoding. */
306
+ if (dict == NULL) {
307
+ assert(dictSize == 0);
308
+ dict = &x;
309
+ }
290
310
  DEBUGLOG(5, "ZSTD_initLegacyStream for v0.%u", newVersion);
291
311
  if (prevVersion != newVersion) ZSTD_freeLegacyStreamContext(*legacyContext, prevVersion);
292
312
  switch(newVersion)
@@ -346,6 +366,16 @@ MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U
346
366
  MEM_STATIC size_t ZSTD_decompressLegacyStream(void* legacyContext, U32 version,
347
367
  ZSTD_outBuffer* output, ZSTD_inBuffer* input)
348
368
  {
369
+ static char x;
370
+ /* Avoid passing NULL to legacy decoding. */
371
+ if (output->dst == NULL) {
372
+ assert(output->size == 0);
373
+ output->dst = &x;
374
+ }
375
+ if (input->src == NULL) {
376
+ assert(input->size == 0);
377
+ input->src = &x;
378
+ }
349
379
  DEBUGLOG(5, "ZSTD_decompressLegacyStream for v0.%u", version);
350
380
  switch(version)
351
381
  {
@@ -14,6 +14,7 @@
14
14
  ******************************************/
15
15
  #include <stddef.h> /* size_t, ptrdiff_t */
16
16
  #include "zstd_v01.h"
17
+ #include "../common/compiler.h"
17
18
  #include "../common/error_private.h"
18
19
 
19
20
 
@@ -2118,6 +2119,7 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi
2118
2119
  }
2119
2120
  ctx->phase = 1;
2120
2121
  ctx->expected = ZSTD_blockHeaderSize;
2122
+ if (ZSTDv01_isError(rSize)) return rSize;
2121
2123
  ctx->previousDstEnd = (void*)( ((char*)dst) + rSize);
2122
2124
  return rSize;
2123
2125
  }
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include <stddef.h> /* size_t, ptrdiff_t */
13
13
  #include "zstd_v02.h"
14
+ #include "../common/compiler.h"
14
15
  #include "../common/error_private.h"
15
16
 
16
17
 
@@ -71,20 +72,6 @@ extern "C" {
71
72
  #include <string.h> /* memcpy */
72
73
 
73
74
 
74
- /******************************************
75
- * Compiler-specific
76
- ******************************************/
77
- #if defined(__GNUC__)
78
- # define MEM_STATIC static __attribute__((unused))
79
- #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
80
- # define MEM_STATIC static inline
81
- #elif defined(_MSC_VER)
82
- # define MEM_STATIC static __inline
83
- #else
84
- # define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
85
- #endif
86
-
87
-
88
75
  /****************************************************************
89
76
  * Basic Types
90
77
  *****************************************************************/
@@ -875,7 +862,7 @@ extern "C" {
875
862
  * Streaming functions
876
863
  ***************************************/
877
864
 
878
- typedef struct ZSTD_DCtx_s ZSTD_DCtx;
865
+ typedef struct ZSTDv02_Dctx_s ZSTD_DCtx;
879
866
 
880
867
  /*
881
868
  Use above functions alternatively.
@@ -2750,7 +2737,7 @@ static unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
2750
2737
  /* *************************************************************
2751
2738
  * Decompression section
2752
2739
  ***************************************************************/
2753
- struct ZSTD_DCtx_s
2740
+ struct ZSTDv02_Dctx_s
2754
2741
  {
2755
2742
  U32 LLTable[FSE_DTABLE_SIZE_U32(LLFSELog)];
2756
2743
  U32 OffTable[FSE_DTABLE_SIZE_U32(OffFSELog)];
@@ -3431,6 +3418,7 @@ static size_t ZSTD_decompressContinue(ZSTD_DCtx* ctx, void* dst, size_t maxDstSi
3431
3418
  }
3432
3419
  ctx->phase = 1;
3433
3420
  ctx->expected = ZSTD_blockHeaderSize;
3421
+ if (ZSTD_isError(rSize)) return rSize;
3434
3422
  ctx->previousDstEnd = (void*)( ((char*)dst) + rSize);
3435
3423
  return rSize;
3436
3424
  }
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include <stddef.h> /* size_t, ptrdiff_t */
13
13
  #include "zstd_v03.h"
14
+ #include "../common/compiler.h"
14
15
  #include "../common/error_private.h"
15
16
 
16
17
 
@@ -72,20 +73,6 @@ extern "C" {
72
73
  #include <string.h> /* memcpy */
73
74
 
74
75
 
75
- /******************************************
76
- * Compiler-specific
77
- ******************************************/
78
- #if defined(__GNUC__)
79
- # define MEM_STATIC static __attribute__((unused))
80
- #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
81
- # define MEM_STATIC static inline
82
- #elif defined(_MSC_VER)
83
- # define MEM_STATIC static __inline
84
- #else
85
- # define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
86
- #endif
87
-
88
-
89
76
  /****************************************************************
90
77
  * Basic Types
91
78
  *****************************************************************/
@@ -875,7 +862,7 @@ extern "C" {
875
862
  * Streaming functions
876
863
  ***************************************/
877
864
 
878
- typedef struct ZSTD_DCtx_s ZSTD_DCtx;
865
+ typedef struct ZSTDv03_Dctx_s ZSTD_DCtx;
879
866
 
880
867
  /*
881
868
  Use above functions alternatively.
@@ -2390,7 +2377,7 @@ static unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
2390
2377
  /* *************************************************************
2391
2378
  * Decompression section
2392
2379
  ***************************************************************/
2393
- struct ZSTD_DCtx_s
2380
+ struct ZSTDv03_Dctx_s
2394
2381
  {
2395
2382
  U32 LLTable[FSE_DTABLE_SIZE_U32(LLFSELog)];
2396
2383
  U32 OffTable[FSE_DTABLE_SIZE_U32(OffFSELog)];
@@ -3071,6 +3058,7 @@ static size_t ZSTD_decompressContinue(ZSTD_DCtx* ctx, void* dst, size_t maxDstSi
3071
3058
  }
3072
3059
  ctx->phase = 1;
3073
3060
  ctx->expected = ZSTD_blockHeaderSize;
3061
+ if (ZSTD_isError(rSize)) return rSize;
3074
3062
  ctx->previousDstEnd = (void*)( ((char*)dst) + rSize);
3075
3063
  return rSize;
3076
3064
  }
@@ -16,6 +16,7 @@
16
16
  #include <string.h> /* memcpy */
17
17
 
18
18
  #include "zstd_v04.h"
19
+ #include "../common/compiler.h"
19
20
  #include "../common/error_private.h"
20
21
 
21
22
 
@@ -37,15 +38,6 @@ extern "C" {
37
38
  # include <stdlib.h> /* _byteswap_ulong */
38
39
  # include <intrin.h> /* _byteswap_* */
39
40
  #endif
40
- #if defined(__GNUC__)
41
- # define MEM_STATIC static __attribute__((unused))
42
- #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
43
- # define MEM_STATIC static inline
44
- #elif defined(_MSC_VER)
45
- # define MEM_STATIC static __inline
46
- #else
47
- # define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
48
- #endif
49
41
 
50
42
 
51
43
  /****************************************************************
@@ -3218,6 +3210,7 @@ static size_t ZSTD_decompressContinue(ZSTD_DCtx* ctx, void* dst, size_t maxDstSi
3218
3210
  }
3219
3211
  ctx->stage = ZSTDds_decodeBlockHeader;
3220
3212
  ctx->expected = ZSTD_blockHeaderSize;
3213
+ if (ZSTD_isError(rSize)) return rSize;
3221
3214
  ctx->previousDstEnd = (char*)dst + rSize;
3222
3215
  return rSize;
3223
3216
  }
@@ -3545,8 +3538,8 @@ static size_t ZBUFF_decompressContinue(ZBUFF_DCtx* zbc, void* dst, size_t* maxDs
3545
3538
  unsigned ZBUFFv04_isError(size_t errorCode) { return ERR_isError(errorCode); }
3546
3539
  const char* ZBUFFv04_getErrorName(size_t errorCode) { return ERR_getErrorName(errorCode); }
3547
3540
 
3548
- size_t ZBUFFv04_recommendedDInSize() { return BLOCKSIZE + 3; }
3549
- size_t ZBUFFv04_recommendedDOutSize() { return BLOCKSIZE; }
3541
+ size_t ZBUFFv04_recommendedDInSize(void) { return BLOCKSIZE + 3; }
3542
+ size_t ZBUFFv04_recommendedDOutSize(void) { return BLOCKSIZE; }
3550
3543
 
3551
3544
 
3552
3545
 
@@ -3600,6 +3600,7 @@ size_t ZSTDv05_decompressContinue(ZSTDv05_DCtx* dctx, void* dst, size_t maxDstSi
3600
3600
  }
3601
3601
  dctx->stage = ZSTDv05ds_decodeBlockHeader;
3602
3602
  dctx->expected = ZSTDv05_blockHeaderSize;
3603
+ if (ZSTDv05_isError(rSize)) return rSize;
3603
3604
  dctx->previousDstEnd = (char*)dst + rSize;
3604
3605
  return rSize;
3605
3606
  }
@@ -14,6 +14,7 @@
14
14
  #include <stddef.h> /* size_t, ptrdiff_t */
15
15
  #include <string.h> /* memcpy */
16
16
  #include <stdlib.h> /* malloc, free, qsort */
17
+ #include "../common/compiler.h"
17
18
  #include "../common/error_private.h"
18
19
 
19
20
 
@@ -67,15 +68,6 @@ extern "C" {
67
68
  # include <stdlib.h> /* _byteswap_ulong */
68
69
  # include <intrin.h> /* _byteswap_* */
69
70
  #endif
70
- #if defined(__GNUC__)
71
- # define MEM_STATIC static __attribute__((unused))
72
- #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
73
- # define MEM_STATIC static inline
74
- #elif defined(_MSC_VER)
75
- # define MEM_STATIC static __inline
76
- #else
77
- # define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
78
- #endif
79
71
 
80
72
 
81
73
  /*-**************************************************************
@@ -3745,6 +3737,7 @@ size_t ZSTDv06_decompressContinue(ZSTDv06_DCtx* dctx, void* dst, size_t dstCapac
3745
3737
  }
3746
3738
  dctx->stage = ZSTDds_decodeBlockHeader;
3747
3739
  dctx->expected = ZSTDv06_blockHeaderSize;
3740
+ if (ZSTDv06_isError(rSize)) return rSize;
3748
3741
  dctx->previousDstEnd = (char*)dst + rSize;
3749
3742
  return rSize;
3750
3743
  }
@@ -24,6 +24,7 @@
24
24
  #define HUFv07_STATIC_LINKING_ONLY /* HUFv07_TABLELOG_ABSOLUTEMAX */
25
25
  #define ZSTDv07_STATIC_LINKING_ONLY
26
26
 
27
+ #include "../common/compiler.h"
27
28
  #include "../common/error_private.h"
28
29
 
29
30
 
@@ -227,15 +228,6 @@ extern "C" {
227
228
  # include <stdlib.h> /* _byteswap_ulong */
228
229
  # include <intrin.h> /* _byteswap_* */
229
230
  #endif
230
- #if defined(__GNUC__)
231
- # define MEM_STATIC static __attribute__((unused))
232
- #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
233
- # define MEM_STATIC static inline
234
- #elif defined(_MSC_VER)
235
- # define MEM_STATIC static __inline
236
- #else
237
- # define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
238
- #endif
239
231
 
240
232
 
241
233
  /*-**************************************************************
@@ -4015,8 +4007,8 @@ size_t ZSTDv07_decompressContinue(ZSTDv07_DCtx* dctx, void* dst, size_t dstCapac
4015
4007
  }
4016
4008
  dctx->stage = ZSTDds_decodeBlockHeader;
4017
4009
  dctx->expected = ZSTDv07_blockHeaderSize;
4018
- dctx->previousDstEnd = (char*)dst + rSize;
4019
4010
  if (ZSTDv07_isError(rSize)) return rSize;
4011
+ dctx->previousDstEnd = (char*)dst + rSize;
4020
4012
  if (dctx->fParams.checksumFlag) XXH64_update(&dctx->xxhState, dst, rSize);
4021
4013
  return rSize;
4022
4014
  }
@@ -8,12 +8,21 @@
8
8
  # You may select, at your option, one of the above-listed licenses.
9
9
  # ################################################################
10
10
 
11
+ # This included Makefile provides the following variables :
12
+ # LIB_SRCDIR, LIB_BINDIR
13
+
14
+ # Ensure the file is not included twice
15
+ # Note : must be included after setting the default target
16
+ ifndef LIBZSTD_MK_INCLUDED
17
+ LIBZSTD_MK_INCLUDED := 1
18
+
11
19
  ##################################################################
12
20
  # Input Variables
13
21
  ##################################################################
14
22
 
15
- # Zstd lib directory
16
- LIBZSTD ?= ./
23
+ # By default, library's directory is same as this included makefile
24
+ LIB_SRCDIR ?= $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
25
+ LIB_BINDIR ?= $(LIBSRC_DIR)
17
26
 
18
27
  # ZSTD_LIB_MINIFY is a helper variable that
19
28
  # configures a bunch of other variables to space-optimized defaults.
@@ -47,6 +56,9 @@ endif
47
56
  # Assembly support
48
57
  ZSTD_NO_ASM ?= 0
49
58
 
59
+ ZSTD_LIB_EXCLUDE_COMPRESSORS_DFAST_AND_UP ?= 0
60
+ ZSTD_LIB_EXCLUDE_COMPRESSORS_GREEDY_AND_UP ?= 0
61
+
50
62
  ##################################################################
51
63
  # libzstd helpers
52
64
  ##################################################################
@@ -57,6 +69,7 @@ VOID ?= /dev/null
57
69
  NUM_SYMBOL := \#
58
70
 
59
71
  # define silent mode as default (verbose mode with V=1 or VERBOSE=1)
72
+ # Note : must be defined _after_ the default target
60
73
  $(V)$(VERBOSE).SILENT:
61
74
 
62
75
  # When cross-compiling from linux to windows,
@@ -66,7 +79,7 @@ $(V)$(VERBOSE).SILENT:
66
79
  TARGET_SYSTEM ?= $(OS)
67
80
 
68
81
  # Version numbers
69
- LIBVER_SRC := $(LIBZSTD)/zstd.h
82
+ LIBVER_SRC := $(LIB_SRCDIR)/zstd.h
70
83
  LIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
71
84
  LIBVER_MINOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
72
85
  LIBVER_PATCH_SCRIPT:=`sed -n '/define ZSTD_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
@@ -133,14 +146,14 @@ ifeq ($(HAVE_COLORNEVER), 1)
133
146
  endif
134
147
  GREP = grep $(GREP_OPTIONS)
135
148
 
136
- ZSTD_COMMON_FILES := $(sort $(wildcard $(LIBZSTD)/common/*.c))
137
- ZSTD_COMPRESS_FILES := $(sort $(wildcard $(LIBZSTD)/compress/*.c))
138
- ZSTD_DECOMPRESS_FILES := $(sort $(wildcard $(LIBZSTD)/decompress/*.c))
139
- ZSTD_DICTBUILDER_FILES := $(sort $(wildcard $(LIBZSTD)/dictBuilder/*.c))
140
- ZSTD_DEPRECATED_FILES := $(sort $(wildcard $(LIBZSTD)/deprecated/*.c))
149
+ ZSTD_COMMON_FILES := $(sort $(wildcard $(LIB_SRCDIR)/common/*.c))
150
+ ZSTD_COMPRESS_FILES := $(sort $(wildcard $(LIB_SRCDIR)/compress/*.c))
151
+ ZSTD_DECOMPRESS_FILES := $(sort $(wildcard $(LIB_SRCDIR)/decompress/*.c))
152
+ ZSTD_DICTBUILDER_FILES := $(sort $(wildcard $(LIB_SRCDIR)/dictBuilder/*.c))
153
+ ZSTD_DEPRECATED_FILES := $(sort $(wildcard $(LIB_SRCDIR)/deprecated/*.c))
141
154
  ZSTD_LEGACY_FILES :=
142
155
 
143
- ZSTD_DECOMPRESS_AMD64_ASM_FILES := $(sort $(wildcard $(LIBZSTD)/decompress/*_amd64.S))
156
+ ZSTD_DECOMPRESS_AMD64_ASM_FILES := $(sort $(wildcard $(LIB_SRCDIR)/decompress/*_amd64.S))
144
157
 
145
158
  ifneq ($(ZSTD_NO_ASM), 0)
146
159
  CPPFLAGS += -DZSTD_DISABLE_ASM
@@ -178,9 +191,17 @@ ifneq ($(ZSTD_LEGACY_MULTITHREADED_API), 0)
178
191
  CFLAGS += -DZSTD_LEGACY_MULTITHREADED_API
179
192
  endif
180
193
 
194
+ ifneq ($(ZSTD_LIB_EXCLUDE_COMPRESSORS_DFAST_AND_UP), 0)
195
+ CFLAGS += -DZSTD_EXCLUDE_DFAST_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_BTLAZY2_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_BTOPT_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_BTULTRA_BLOCK_COMPRESSOR
196
+ else
197
+ ifneq ($(ZSTD_LIB_EXCLUDE_COMPRESSORS_GREEDY_AND_UP), 0)
198
+ CFLAGS += -DZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_BTLAZY2_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_BTOPT_BLOCK_COMPRESSOR -DZSTD_EXCLUDE_BTULTRA_BLOCK_COMPRESSOR
199
+ endif
200
+ endif
201
+
181
202
  ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
182
203
  ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
183
- ZSTD_LEGACY_FILES += $(shell ls $(LIBZSTD)/legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
204
+ ZSTD_LEGACY_FILES += $(shell ls $(LIB_SRCDIR)/legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
184
205
  endif
185
206
  endif
186
207
  CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
@@ -209,6 +230,8 @@ ifeq ($(HAVE_HASH),0)
209
230
  endif
210
231
  endif # BUILD_DIR
211
232
 
212
- ZSTD_SUBDIR := $(LIBZSTD)/common $(LIBZSTD)/compress $(LIBZSTD)/decompress $(LIBZSTD)/dictBuilder $(LIBZSTD)/legacy $(LIBZSTD)/deprecated
233
+ ZSTD_SUBDIR := $(LIB_SRCDIR)/common $(LIB_SRCDIR)/compress $(LIB_SRCDIR)/decompress $(LIB_SRCDIR)/dictBuilder $(LIB_SRCDIR)/legacy $(LIB_SRCDIR)/deprecated
213
234
  vpath %.c $(ZSTD_SUBDIR)
214
235
  vpath %.S $(ZSTD_SUBDIR)
236
+
237
+ endif # LIBZSTD_MK_INCLUDED