zstd-ruby 1.4.1.0 → 1.5.0.0
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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/ruby.yml +35 -0
- data/README.md +2 -2
- data/ext/zstdruby/libzstd/BUCK +5 -7
- data/ext/zstdruby/libzstd/Makefile +304 -113
- data/ext/zstdruby/libzstd/README.md +83 -20
- data/ext/zstdruby/libzstd/common/bitstream.h +59 -51
- data/ext/zstdruby/libzstd/common/compiler.h +150 -8
- data/ext/zstdruby/libzstd/common/cpu.h +1 -3
- data/ext/zstdruby/libzstd/common/debug.c +11 -31
- data/ext/zstdruby/libzstd/common/debug.h +22 -49
- data/ext/zstdruby/libzstd/common/entropy_common.c +201 -75
- data/ext/zstdruby/libzstd/common/error_private.c +3 -1
- data/ext/zstdruby/libzstd/common/error_private.h +8 -4
- data/ext/zstdruby/libzstd/common/fse.h +50 -42
- data/ext/zstdruby/libzstd/common/fse_decompress.c +149 -55
- data/ext/zstdruby/libzstd/common/huf.h +43 -39
- data/ext/zstdruby/libzstd/common/mem.h +69 -25
- data/ext/zstdruby/libzstd/common/pool.c +30 -20
- data/ext/zstdruby/libzstd/common/pool.h +3 -3
- data/ext/zstdruby/libzstd/common/threading.c +51 -4
- data/ext/zstdruby/libzstd/common/threading.h +36 -4
- data/ext/zstdruby/libzstd/common/xxhash.c +40 -92
- data/ext/zstdruby/libzstd/common/xxhash.h +12 -32
- data/ext/zstdruby/libzstd/common/zstd_common.c +10 -10
- data/ext/zstdruby/libzstd/common/zstd_deps.h +111 -0
- data/ext/zstdruby/libzstd/common/zstd_internal.h +230 -111
- data/ext/zstdruby/libzstd/common/zstd_trace.h +154 -0
- data/ext/zstdruby/libzstd/compress/fse_compress.c +47 -63
- data/ext/zstdruby/libzstd/compress/hist.c +41 -63
- data/ext/zstdruby/libzstd/compress/hist.h +13 -33
- data/ext/zstdruby/libzstd/compress/huf_compress.c +332 -193
- data/ext/zstdruby/libzstd/compress/zstd_compress.c +3614 -1696
- data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +546 -86
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +158 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +29 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +441 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +54 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +572 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +32 -0
- data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +662 -0
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +43 -41
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +2 -2
- data/ext/zstdruby/libzstd/compress/zstd_fast.c +85 -80
- data/ext/zstdruby/libzstd/compress/zstd_fast.h +2 -2
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +1184 -111
- data/ext/zstdruby/libzstd/compress/zstd_lazy.h +59 -1
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +333 -208
- data/ext/zstdruby/libzstd/compress/zstd_ldm.h +15 -3
- data/ext/zstdruby/libzstd/compress/zstd_ldm_geartab.h +103 -0
- data/ext/zstdruby/libzstd/compress/zstd_opt.c +228 -129
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +151 -440
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +32 -114
- data/ext/zstdruby/libzstd/decompress/huf_decompress.c +395 -276
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +20 -16
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +3 -3
- data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +630 -231
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +606 -380
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +8 -5
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +39 -9
- data/ext/zstdruby/libzstd/deprecated/zbuff.h +9 -8
- data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +2 -2
- data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +1 -1
- data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +1 -1
- data/ext/zstdruby/libzstd/dictBuilder/cover.c +55 -46
- data/ext/zstdruby/libzstd/dictBuilder/cover.h +20 -9
- data/ext/zstdruby/libzstd/dictBuilder/divsufsort.c +1 -1
- data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +43 -31
- data/ext/zstdruby/libzstd/dictBuilder/zdict.c +53 -30
- data/ext/zstdruby/libzstd/dll/example/Makefile +2 -1
- data/ext/zstdruby/libzstd/dll/example/README.md +16 -22
- data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +4 -4
- data/ext/zstdruby/libzstd/legacy/zstd_v01.c +24 -14
- data/ext/zstdruby/libzstd/legacy/zstd_v01.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v02.c +17 -8
- data/ext/zstdruby/libzstd/legacy/zstd_v02.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v03.c +17 -8
- data/ext/zstdruby/libzstd/legacy/zstd_v03.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v04.c +25 -11
- data/ext/zstdruby/libzstd/legacy/zstd_v04.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v05.c +43 -32
- data/ext/zstdruby/libzstd/legacy/zstd_v05.h +2 -2
- data/ext/zstdruby/libzstd/legacy/zstd_v06.c +27 -19
- data/ext/zstdruby/libzstd/legacy/zstd_v06.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v07.c +32 -20
- data/ext/zstdruby/libzstd/legacy/zstd_v07.h +1 -1
- data/ext/zstdruby/libzstd/libzstd.pc.in +2 -1
- data/ext/zstdruby/libzstd/{dictBuilder/zdict.h → zdict.h} +201 -31
- data/ext/zstdruby/libzstd/zstd.h +740 -153
- data/ext/zstdruby/libzstd/{common/zstd_errors.h → zstd_errors.h} +3 -1
- data/lib/zstd-ruby/version.rb +1 -1
- data/zstd-ruby.gemspec +1 -1
- metadata +21 -10
- data/.travis.yml +0 -14
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -18,9 +18,9 @@ extern "C" {
|
|
|
18
18
|
/* *************************************
|
|
19
19
|
* Includes
|
|
20
20
|
***************************************/
|
|
21
|
-
#include "mem.h" /* MEM_STATIC */
|
|
22
|
-
#include "error_private.h" /* ERROR */
|
|
23
|
-
#include "zstd_internal.h" /* ZSTD_inBuffer, ZSTD_outBuffer, ZSTD_frameSizeInfo */
|
|
21
|
+
#include "../common/mem.h" /* MEM_STATIC */
|
|
22
|
+
#include "../common/error_private.h" /* ERROR */
|
|
23
|
+
#include "../common/zstd_internal.h" /* ZSTD_inBuffer, ZSTD_outBuffer, ZSTD_frameSizeInfo */
|
|
24
24
|
|
|
25
25
|
#if !defined (ZSTD_LEGACY_SUPPORT) || (ZSTD_LEGACY_SUPPORT == 0)
|
|
26
26
|
# undef ZSTD_LEGACY_SUPPORT
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
******************************************/
|
|
15
15
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
|
16
16
|
#include "zstd_v01.h"
|
|
17
|
-
#include "error_private.h"
|
|
17
|
+
#include "../common/error_private.h"
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
/******************************************
|
|
@@ -257,7 +257,7 @@ static U64 FSE_read64(const void* memPtr)
|
|
|
257
257
|
U64 val; memcpy(&val, memPtr, sizeof(val)); return val;
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
#endif
|
|
260
|
+
#endif /* FSE_FORCE_MEMORY_ACCESS */
|
|
261
261
|
|
|
262
262
|
static U16 FSE_readLE16(const void* memPtr)
|
|
263
263
|
{
|
|
@@ -346,7 +346,7 @@ FORCE_INLINE unsigned FSE_highbit32 (U32 val)
|
|
|
346
346
|
_BitScanReverse ( &r, val );
|
|
347
347
|
return (unsigned) r;
|
|
348
348
|
# elif defined(__GNUC__) && (GCC_VERSION >= 304) /* GCC Intrinsic */
|
|
349
|
-
return
|
|
349
|
+
return __builtin_clz (val) ^ 31;
|
|
350
350
|
# else /* Software version */
|
|
351
351
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
|
352
352
|
U32 v = val;
|
|
@@ -1078,7 +1078,7 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|
|
1078
1078
|
BYTE* const ostart = (BYTE*) dst;
|
|
1079
1079
|
BYTE* op = ostart;
|
|
1080
1080
|
BYTE* const omax = op + maxDstSize;
|
|
1081
|
-
BYTE* const olimit = omax-15;
|
|
1081
|
+
BYTE* const olimit = maxDstSize < 15 ? op : omax-15;
|
|
1082
1082
|
|
|
1083
1083
|
const void* ptr = DTable;
|
|
1084
1084
|
const HUF_DElt* const dt = (const HUF_DElt*)(ptr)+1;
|
|
@@ -1092,7 +1092,7 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|
|
1092
1092
|
const size_t length1 = FSE_readLE16(jumpTable);
|
|
1093
1093
|
const size_t length2 = FSE_readLE16(jumpTable+1);
|
|
1094
1094
|
const size_t length3 = FSE_readLE16(jumpTable+2);
|
|
1095
|
-
const size_t length4 = cSrcSize - 6 - length1 - length2 - length3;
|
|
1095
|
+
const size_t length4 = cSrcSize - 6 - length1 - length2 - length3; /* check coherency !! */
|
|
1096
1096
|
const char* const start1 = (const char*)(cSrc) + 6;
|
|
1097
1097
|
const char* const start2 = start1 + length1;
|
|
1098
1098
|
const char* const start3 = start2 + length2;
|
|
@@ -1150,11 +1150,11 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|
|
1150
1150
|
|
|
1151
1151
|
/* tail */
|
|
1152
1152
|
{
|
|
1153
|
-
|
|
1153
|
+
/* bitTail = bitD1; */ /* *much* slower : -20% !??! */
|
|
1154
1154
|
FSE_DStream_t bitTail;
|
|
1155
1155
|
bitTail.ptr = bitD1.ptr;
|
|
1156
1156
|
bitTail.bitsConsumed = bitD1.bitsConsumed;
|
|
1157
|
-
bitTail.bitContainer = bitD1.bitContainer;
|
|
1157
|
+
bitTail.bitContainer = bitD1.bitContainer; /* required in case of FSE_DStream_endOfBuffer */
|
|
1158
1158
|
bitTail.start = start1;
|
|
1159
1159
|
for ( ; (FSE_reloadDStream(&bitTail) < FSE_DStream_completed) && (op<omax) ; op++)
|
|
1160
1160
|
{
|
|
@@ -1280,7 +1280,11 @@ static size_t HUF_decompress (void* dst, size_t maxDstSize, const void* cSrc, si
|
|
|
1280
1280
|
* Basic Types
|
|
1281
1281
|
*********************************************************/
|
|
1282
1282
|
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
1283
|
-
#
|
|
1283
|
+
# if defined(_AIX)
|
|
1284
|
+
# include <inttypes.h>
|
|
1285
|
+
# else
|
|
1286
|
+
# include <stdint.h> /* intptr_t */
|
|
1287
|
+
# endif
|
|
1284
1288
|
typedef uint8_t BYTE;
|
|
1285
1289
|
typedef uint16_t U16;
|
|
1286
1290
|
typedef int16_t S16;
|
|
@@ -1483,7 +1487,9 @@ static size_t ZSTDv01_getcBlockSize(const void* src, size_t srcSize, blockProper
|
|
|
1483
1487
|
static size_t ZSTD_copyUncompressedBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
|
1484
1488
|
{
|
|
1485
1489
|
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
|
1486
|
-
|
|
1490
|
+
if (srcSize > 0) {
|
|
1491
|
+
memcpy(dst, src, srcSize);
|
|
1492
|
+
}
|
|
1487
1493
|
return srcSize;
|
|
1488
1494
|
}
|
|
1489
1495
|
|
|
@@ -1502,7 +1508,7 @@ static size_t ZSTD_decompressLiterals(void* ctx,
|
|
|
1502
1508
|
if (srcSize <= 3) return ERROR(corruption_detected);
|
|
1503
1509
|
|
|
1504
1510
|
litSize = ip[1] + (ip[0]<<8);
|
|
1505
|
-
litSize += ((ip[-3] >> 3) & 7) << 16;
|
|
1511
|
+
litSize += ((ip[-3] >> 3) & 7) << 16; /* mmmmh.... */
|
|
1506
1512
|
op = oend - litSize;
|
|
1507
1513
|
|
|
1508
1514
|
(void)ctx;
|
|
@@ -1541,7 +1547,9 @@ static size_t ZSTDv01_decodeLiteralsBlock(void* ctx,
|
|
|
1541
1547
|
size_t rleSize = litbp.origSize;
|
|
1542
1548
|
if (rleSize>maxDstSize) return ERROR(dstSize_tooSmall);
|
|
1543
1549
|
if (!srcSize) return ERROR(srcSize_wrong);
|
|
1544
|
-
|
|
1550
|
+
if (rleSize > 0) {
|
|
1551
|
+
memset(oend - rleSize, *ip, rleSize);
|
|
1552
|
+
}
|
|
1545
1553
|
*litStart = oend - rleSize;
|
|
1546
1554
|
*litSize = rleSize;
|
|
1547
1555
|
ip++;
|
|
@@ -1901,8 +1909,10 @@ static size_t ZSTD_decompressSequences(
|
|
|
1901
1909
|
{
|
|
1902
1910
|
size_t lastLLSize = litEnd - litPtr;
|
|
1903
1911
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
|
1904
|
-
if (
|
|
1905
|
-
|
|
1912
|
+
if (lastLLSize > 0) {
|
|
1913
|
+
if (op != litPtr) memmove(op, litPtr, lastLLSize);
|
|
1914
|
+
op += lastLLSize;
|
|
1915
|
+
}
|
|
1906
1916
|
}
|
|
1907
1917
|
}
|
|
1908
1918
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
|
13
13
|
#include "zstd_v02.h"
|
|
14
|
-
#include "error_private.h"
|
|
14
|
+
#include "../common/error_private.h"
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
/******************************************
|
|
@@ -89,7 +89,11 @@ extern "C" {
|
|
|
89
89
|
* Basic Types
|
|
90
90
|
*****************************************************************/
|
|
91
91
|
#if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
92
|
-
#
|
|
92
|
+
# if defined(_AIX)
|
|
93
|
+
# include <inttypes.h>
|
|
94
|
+
# else
|
|
95
|
+
# include <stdint.h> /* intptr_t */
|
|
96
|
+
# endif
|
|
93
97
|
typedef uint8_t BYTE;
|
|
94
98
|
typedef uint16_t U16;
|
|
95
99
|
typedef int16_t S16;
|
|
@@ -189,7 +193,7 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
|
189
193
|
memcpy(memPtr, &value, sizeof(value));
|
|
190
194
|
}
|
|
191
195
|
|
|
192
|
-
#endif
|
|
196
|
+
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
|
193
197
|
|
|
194
198
|
|
|
195
199
|
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
|
@@ -353,7 +357,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
|
|
|
353
357
|
_BitScanReverse ( &r, val );
|
|
354
358
|
return (unsigned) r;
|
|
355
359
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
|
356
|
-
return
|
|
360
|
+
return __builtin_clz (val) ^ 31;
|
|
357
361
|
# else /* Software version */
|
|
358
362
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
|
359
363
|
U32 v = val;
|
|
@@ -2836,7 +2840,9 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie
|
|
|
2836
2840
|
static size_t ZSTD_copyUncompressedBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
|
2837
2841
|
{
|
|
2838
2842
|
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
|
2839
|
-
|
|
2843
|
+
if (srcSize > 0) {
|
|
2844
|
+
memcpy(dst, src, srcSize);
|
|
2845
|
+
}
|
|
2840
2846
|
return srcSize;
|
|
2841
2847
|
}
|
|
2842
2848
|
|
|
@@ -2889,6 +2895,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
|
2889
2895
|
const size_t litSize = (MEM_readLE32(istart) & 0xFFFFFF) >> 2; /* no buffer issue : srcSize >= MIN_CBLOCK_SIZE */
|
|
2890
2896
|
if (litSize > srcSize-11) /* risk of reading too far with wildcopy */
|
|
2891
2897
|
{
|
|
2898
|
+
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
|
2892
2899
|
if (litSize > srcSize-3) return ERROR(corruption_detected);
|
|
2893
2900
|
memcpy(dctx->litBuffer, istart, litSize);
|
|
2894
2901
|
dctx->litPtr = dctx->litBuffer;
|
|
@@ -3228,8 +3235,10 @@ static size_t ZSTD_decompressSequences(
|
|
|
3228
3235
|
size_t lastLLSize = litEnd - litPtr;
|
|
3229
3236
|
if (litPtr > litEnd) return ERROR(corruption_detected);
|
|
3230
3237
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
|
3231
|
-
if (
|
|
3232
|
-
|
|
3238
|
+
if (lastLLSize > 0) {
|
|
3239
|
+
if (op != litPtr) memmove(op, litPtr, lastLLSize);
|
|
3240
|
+
op += lastLLSize;
|
|
3241
|
+
}
|
|
3233
3242
|
}
|
|
3234
3243
|
}
|
|
3235
3244
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
|
13
13
|
#include "zstd_v03.h"
|
|
14
|
-
#include "error_private.h"
|
|
14
|
+
#include "../common/error_private.h"
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
/******************************************
|
|
@@ -90,7 +90,11 @@ extern "C" {
|
|
|
90
90
|
* Basic Types
|
|
91
91
|
*****************************************************************/
|
|
92
92
|
#if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
93
|
-
#
|
|
93
|
+
# if defined(_AIX)
|
|
94
|
+
# include <inttypes.h>
|
|
95
|
+
# else
|
|
96
|
+
# include <stdint.h> /* intptr_t */
|
|
97
|
+
# endif
|
|
94
98
|
typedef uint8_t BYTE;
|
|
95
99
|
typedef uint16_t U16;
|
|
96
100
|
typedef int16_t S16;
|
|
@@ -191,7 +195,7 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
|
191
195
|
}
|
|
192
196
|
|
|
193
197
|
|
|
194
|
-
#endif
|
|
198
|
+
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
|
195
199
|
|
|
196
200
|
|
|
197
201
|
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
|
@@ -356,7 +360,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
|
|
|
356
360
|
_BitScanReverse ( &r, val );
|
|
357
361
|
return (unsigned) r;
|
|
358
362
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
|
359
|
-
return
|
|
363
|
+
return __builtin_clz (val) ^ 31;
|
|
360
364
|
# else /* Software version */
|
|
361
365
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
|
362
366
|
U32 v = val;
|
|
@@ -2477,7 +2481,9 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie
|
|
|
2477
2481
|
static size_t ZSTD_copyUncompressedBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
|
2478
2482
|
{
|
|
2479
2483
|
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
|
2480
|
-
|
|
2484
|
+
if (srcSize > 0) {
|
|
2485
|
+
memcpy(dst, src, srcSize);
|
|
2486
|
+
}
|
|
2481
2487
|
return srcSize;
|
|
2482
2488
|
}
|
|
2483
2489
|
|
|
@@ -2530,6 +2536,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
|
2530
2536
|
const size_t litSize = (MEM_readLE32(istart) & 0xFFFFFF) >> 2; /* no buffer issue : srcSize >= MIN_CBLOCK_SIZE */
|
|
2531
2537
|
if (litSize > srcSize-11) /* risk of reading too far with wildcopy */
|
|
2532
2538
|
{
|
|
2539
|
+
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
|
2533
2540
|
if (litSize > srcSize-3) return ERROR(corruption_detected);
|
|
2534
2541
|
memcpy(dctx->litBuffer, istart, litSize);
|
|
2535
2542
|
dctx->litPtr = dctx->litBuffer;
|
|
@@ -2869,8 +2876,10 @@ static size_t ZSTD_decompressSequences(
|
|
|
2869
2876
|
size_t lastLLSize = litEnd - litPtr;
|
|
2870
2877
|
if (litPtr > litEnd) return ERROR(corruption_detected);
|
|
2871
2878
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
|
2872
|
-
if (
|
|
2873
|
-
|
|
2879
|
+
if (lastLLSize > 0) {
|
|
2880
|
+
if (op != litPtr) memmove(op, litPtr, lastLLSize);
|
|
2881
|
+
op += lastLLSize;
|
|
2882
|
+
}
|
|
2874
2883
|
}
|
|
2875
2884
|
}
|
|
2876
2885
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#include <string.h> /* memcpy */
|
|
17
17
|
|
|
18
18
|
#include "zstd_v04.h"
|
|
19
|
-
#include "error_private.h"
|
|
19
|
+
#include "../common/error_private.h"
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
/* ******************************************************************
|
|
@@ -52,7 +52,11 @@ extern "C" {
|
|
|
52
52
|
* Basic Types
|
|
53
53
|
*****************************************************************/
|
|
54
54
|
#if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
55
|
-
#
|
|
55
|
+
# if defined(_AIX)
|
|
56
|
+
# include <inttypes.h>
|
|
57
|
+
# else
|
|
58
|
+
# include <stdint.h> /* intptr_t */
|
|
59
|
+
# endif
|
|
56
60
|
typedef uint8_t BYTE;
|
|
57
61
|
typedef uint16_t U16;
|
|
58
62
|
typedef int16_t S16;
|
|
@@ -74,7 +78,7 @@ extern "C" {
|
|
|
74
78
|
/*-*************************************
|
|
75
79
|
* Debug
|
|
76
80
|
***************************************/
|
|
77
|
-
#include "debug.h"
|
|
81
|
+
#include "../common/debug.h"
|
|
78
82
|
#ifndef assert
|
|
79
83
|
# define assert(condition) ((void)0)
|
|
80
84
|
#endif
|
|
@@ -161,7 +165,7 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
|
161
165
|
memcpy(memPtr, &value, sizeof(value));
|
|
162
166
|
}
|
|
163
167
|
|
|
164
|
-
#endif
|
|
168
|
+
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
|
165
169
|
|
|
166
170
|
|
|
167
171
|
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
|
@@ -627,7 +631,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
|
|
|
627
631
|
_BitScanReverse ( &r, val );
|
|
628
632
|
return (unsigned) r;
|
|
629
633
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
|
630
|
-
return
|
|
634
|
+
return __builtin_clz (val) ^ 31;
|
|
631
635
|
# else /* Software version */
|
|
632
636
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
|
633
637
|
U32 v = val;
|
|
@@ -2603,7 +2607,9 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie
|
|
|
2603
2607
|
static size_t ZSTD_copyRawBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
|
2604
2608
|
{
|
|
2605
2609
|
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
|
2606
|
-
|
|
2610
|
+
if (srcSize > 0) {
|
|
2611
|
+
memcpy(dst, src, srcSize);
|
|
2612
|
+
}
|
|
2607
2613
|
return srcSize;
|
|
2608
2614
|
}
|
|
2609
2615
|
|
|
@@ -2655,6 +2661,7 @@ static size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
|
|
|
2655
2661
|
const size_t litSize = (MEM_readLE32(istart) & 0xFFFFFF) >> 2; /* no buffer issue : srcSize >= MIN_CBLOCK_SIZE */
|
|
2656
2662
|
if (litSize > srcSize-11) /* risk of reading too far with wildcopy */
|
|
2657
2663
|
{
|
|
2664
|
+
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
|
2658
2665
|
if (litSize > srcSize-3) return ERROR(corruption_detected);
|
|
2659
2666
|
memcpy(dctx->litBuffer, istart, litSize);
|
|
2660
2667
|
dctx->litPtr = dctx->litBuffer;
|
|
@@ -3007,8 +3014,10 @@ static size_t ZSTD_decompressSequences(
|
|
|
3007
3014
|
size_t lastLLSize = litEnd - litPtr;
|
|
3008
3015
|
if (litPtr > litEnd) return ERROR(corruption_detected);
|
|
3009
3016
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
|
3010
|
-
if (
|
|
3011
|
-
|
|
3017
|
+
if (lastLLSize > 0) {
|
|
3018
|
+
if (op != litPtr) memcpy(op, litPtr, lastLLSize);
|
|
3019
|
+
op += lastLLSize;
|
|
3020
|
+
}
|
|
3012
3021
|
}
|
|
3013
3022
|
}
|
|
3014
3023
|
|
|
@@ -3034,9 +3043,12 @@ static size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
|
|
|
3034
3043
|
{
|
|
3035
3044
|
/* blockType == blockCompressed */
|
|
3036
3045
|
const BYTE* ip = (const BYTE*)src;
|
|
3046
|
+
size_t litCSize;
|
|
3047
|
+
|
|
3048
|
+
if (srcSize > BLOCKSIZE) return ERROR(corruption_detected);
|
|
3037
3049
|
|
|
3038
3050
|
/* Decode literals sub-block */
|
|
3039
|
-
|
|
3051
|
+
litCSize = ZSTD_decodeLiteralsBlock(dctx, src, srcSize);
|
|
3040
3052
|
if (ZSTD_isError(litCSize)) return litCSize;
|
|
3041
3053
|
ip += litCSize;
|
|
3042
3054
|
srcSize -= litCSize;
|
|
@@ -3403,7 +3415,9 @@ static size_t ZBUFF_decompressWithDictionary(ZBUFF_DCtx* zbc, const void* src, s
|
|
|
3403
3415
|
static size_t ZBUFF_limitCopy(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
|
3404
3416
|
{
|
|
3405
3417
|
size_t length = MIN(maxDstSize, srcSize);
|
|
3406
|
-
|
|
3418
|
+
if (length > 0) {
|
|
3419
|
+
memcpy(dst, src, length);
|
|
3420
|
+
}
|
|
3407
3421
|
return length;
|
|
3408
3422
|
}
|
|
3409
3423
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
/*- Dependencies -*/
|
|
13
13
|
#include "zstd_v05.h"
|
|
14
|
-
#include "error_private.h"
|
|
14
|
+
#include "../common/error_private.h"
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
/* ******************************************************************
|
|
@@ -80,7 +80,11 @@ extern "C" {
|
|
|
80
80
|
* Basic Types
|
|
81
81
|
*****************************************************************/
|
|
82
82
|
#if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
83
|
-
#
|
|
83
|
+
# if defined(_AIX)
|
|
84
|
+
# include <inttypes.h>
|
|
85
|
+
# else
|
|
86
|
+
# include <stdint.h> /* intptr_t */
|
|
87
|
+
# endif
|
|
84
88
|
typedef uint8_t BYTE;
|
|
85
89
|
typedef uint16_t U16;
|
|
86
90
|
typedef int16_t S16;
|
|
@@ -218,11 +222,6 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val)
|
|
|
218
222
|
}
|
|
219
223
|
}
|
|
220
224
|
|
|
221
|
-
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
|
|
222
|
-
{
|
|
223
|
-
return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
225
|
MEM_STATIC U32 MEM_readLE32(const void* memPtr)
|
|
227
226
|
{
|
|
228
227
|
if (MEM_isLittleEndian())
|
|
@@ -761,7 +760,7 @@ MEM_STATIC unsigned BITv05_highbit32 (U32 val)
|
|
|
761
760
|
_BitScanReverse ( &r, val );
|
|
762
761
|
return (unsigned) r;
|
|
763
762
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
|
764
|
-
return
|
|
763
|
+
return __builtin_clz (val) ^ 31;
|
|
765
764
|
# else /* Software version */
|
|
766
765
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
|
767
766
|
U32 v = val;
|
|
@@ -1809,7 +1808,7 @@ static size_t HUFv05_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
|
|
|
1809
1808
|
|
|
1810
1809
|
if (!srcSize) return ERROR(srcSize_wrong);
|
|
1811
1810
|
iSize = ip[0];
|
|
1812
|
-
|
|
1811
|
+
/* memset(huffWeight, 0, hwSize); */ /* is not necessary, even though some analyzer complain ... */
|
|
1813
1812
|
|
|
1814
1813
|
if (iSize >= 128) { /* special header */
|
|
1815
1814
|
if (iSize >= (242)) { /* RLE */
|
|
@@ -1884,7 +1883,7 @@ size_t HUFv05_readDTableX2 (U16* DTable, const void* src, size_t srcSize)
|
|
|
1884
1883
|
HUFv05_DEltX2* const dt = (HUFv05_DEltX2*)dtPtr;
|
|
1885
1884
|
|
|
1886
1885
|
HUFv05_STATIC_ASSERT(sizeof(HUFv05_DEltX2) == sizeof(U16)); /* if compilation fails here, assertion is false */
|
|
1887
|
-
|
|
1886
|
+
/* memset(huffWeight, 0, sizeof(huffWeight)); */ /* is not necessary, even though some analyzer complain ... */
|
|
1888
1887
|
|
|
1889
1888
|
iSize = HUFv05_readStats(huffWeight, HUFv05_MAX_SYMBOL_VALUE + 1, rankVal, &nbSymbols, &tableLog, src, srcSize);
|
|
1890
1889
|
if (HUFv05_isError(iSize)) return iSize;
|
|
@@ -2215,7 +2214,7 @@ size_t HUFv05_readDTableX4 (unsigned* DTable, const void* src, size_t srcSize)
|
|
|
2215
2214
|
|
|
2216
2215
|
HUFv05_STATIC_ASSERT(sizeof(HUFv05_DEltX4) == sizeof(unsigned)); /* if compilation fails here, assertion is false */
|
|
2217
2216
|
if (memLog > HUFv05_ABSOLUTEMAX_TABLELOG) return ERROR(tableLog_tooLarge);
|
|
2218
|
-
|
|
2217
|
+
/* memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
|
|
2219
2218
|
|
|
2220
2219
|
iSize = HUFv05_readStats(weightList, HUFv05_MAX_SYMBOL_VALUE + 1, rankStats, &nbSymbols, &tableLog, src, srcSize);
|
|
2221
2220
|
if (HUFv05_isError(iSize)) return iSize;
|
|
@@ -2544,9 +2543,9 @@ size_t HUFv05_decompress (void* dst, size_t dstSize, const void* cSrc, size_t cS
|
|
|
2544
2543
|
|
|
2545
2544
|
return decompress[algoNb](dst, dstSize, cSrc, cSrcSize);
|
|
2546
2545
|
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2546
|
+
/* return HUFv05_decompress4X2(dst, dstSize, cSrc, cSrcSize); */ /* multi-streams single-symbol decoding */
|
|
2547
|
+
/* return HUFv05_decompress4X4(dst, dstSize, cSrc, cSrcSize); */ /* multi-streams double-symbols decoding */
|
|
2548
|
+
/* return HUFv05_decompress4X6(dst, dstSize, cSrc, cSrcSize); */ /* multi-streams quad-symbols decoding */
|
|
2550
2549
|
}
|
|
2551
2550
|
/*
|
|
2552
2551
|
zstd - standard compression library
|
|
@@ -2834,7 +2833,7 @@ static size_t ZSTDv05_decodeFrameHeader_Part2(ZSTDv05_DCtx* zc, const void* src,
|
|
|
2834
2833
|
|
|
2835
2834
|
static size_t ZSTDv05_getcBlockSize(const void* src, size_t srcSize, blockProperties_t* bpPtr)
|
|
2836
2835
|
{
|
|
2837
|
-
const BYTE* const in = (const BYTE*
|
|
2836
|
+
const BYTE* const in = (const BYTE*)src;
|
|
2838
2837
|
BYTE headerFlags;
|
|
2839
2838
|
U32 cSize;
|
|
2840
2839
|
|
|
@@ -3003,7 +3002,7 @@ static size_t ZSTDv05_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t
|
|
|
3003
3002
|
FSEv05_DTable* DTableLL, FSEv05_DTable* DTableML, FSEv05_DTable* DTableOffb,
|
|
3004
3003
|
const void* src, size_t srcSize, U32 flagStaticTable)
|
|
3005
3004
|
{
|
|
3006
|
-
const BYTE* const istart = (const BYTE*
|
|
3005
|
+
const BYTE* const istart = (const BYTE*)src;
|
|
3007
3006
|
const BYTE* ip = istart;
|
|
3008
3007
|
const BYTE* const iend = istart + srcSize;
|
|
3009
3008
|
U32 LLtype, Offtype, MLtype;
|
|
@@ -3158,10 +3157,14 @@ static void ZSTDv05_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
|
3158
3157
|
if (litLength == MaxLL) {
|
|
3159
3158
|
const U32 add = *dumps++;
|
|
3160
3159
|
if (add < 255) litLength += add;
|
|
3161
|
-
else if (dumps +
|
|
3162
|
-
litLength =
|
|
3163
|
-
|
|
3164
|
-
|
|
3160
|
+
else if (dumps + 2 <= de) {
|
|
3161
|
+
litLength = MEM_readLE16(dumps);
|
|
3162
|
+
dumps += 2;
|
|
3163
|
+
if ((litLength & 1) && dumps < de) {
|
|
3164
|
+
litLength += *dumps << 16;
|
|
3165
|
+
dumps += 1;
|
|
3166
|
+
}
|
|
3167
|
+
litLength>>=1;
|
|
3165
3168
|
}
|
|
3166
3169
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
|
3167
3170
|
}
|
|
@@ -3191,10 +3194,14 @@ static void ZSTDv05_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
|
3191
3194
|
if (matchLength == MaxML) {
|
|
3192
3195
|
const U32 add = dumps<de ? *dumps++ : 0;
|
|
3193
3196
|
if (add < 255) matchLength += add;
|
|
3194
|
-
else if (dumps +
|
|
3195
|
-
matchLength =
|
|
3196
|
-
|
|
3197
|
-
|
|
3197
|
+
else if (dumps + 2 <= de) {
|
|
3198
|
+
matchLength = MEM_readLE16(dumps);
|
|
3199
|
+
dumps += 2;
|
|
3200
|
+
if ((matchLength & 1) && dumps < de) {
|
|
3201
|
+
matchLength += *dumps << 16;
|
|
3202
|
+
dumps += 1;
|
|
3203
|
+
}
|
|
3204
|
+
matchLength >>= 1;
|
|
3198
3205
|
}
|
|
3199
3206
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
|
3200
3207
|
}
|
|
@@ -3303,7 +3310,7 @@ static size_t ZSTDv05_decompressSequences(
|
|
|
3303
3310
|
{
|
|
3304
3311
|
const BYTE* ip = (const BYTE*)seqStart;
|
|
3305
3312
|
const BYTE* const iend = ip + seqSize;
|
|
3306
|
-
BYTE* const ostart = (BYTE*
|
|
3313
|
+
BYTE* const ostart = (BYTE*)dst;
|
|
3307
3314
|
BYTE* op = ostart;
|
|
3308
3315
|
BYTE* const oend = ostart + maxDstSize;
|
|
3309
3316
|
size_t errorCode, dumpsLength=0;
|
|
@@ -3359,8 +3366,10 @@ static size_t ZSTDv05_decompressSequences(
|
|
|
3359
3366
|
size_t lastLLSize = litEnd - litPtr;
|
|
3360
3367
|
if (litPtr > litEnd) return ERROR(corruption_detected); /* too many literals already used */
|
|
3361
3368
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
|
3362
|
-
|
|
3363
|
-
|
|
3369
|
+
if (lastLLSize > 0) {
|
|
3370
|
+
memcpy(op, litPtr, lastLLSize);
|
|
3371
|
+
op += lastLLSize;
|
|
3372
|
+
}
|
|
3364
3373
|
}
|
|
3365
3374
|
|
|
3366
3375
|
return op-ostart;
|
|
@@ -3414,7 +3423,7 @@ static size_t ZSTDv05_decompress_continueDCtx(ZSTDv05_DCtx* dctx,
|
|
|
3414
3423
|
{
|
|
3415
3424
|
const BYTE* ip = (const BYTE*)src;
|
|
3416
3425
|
const BYTE* iend = ip + srcSize;
|
|
3417
|
-
BYTE* const ostart = (BYTE*
|
|
3426
|
+
BYTE* const ostart = (BYTE*)dst;
|
|
3418
3427
|
BYTE* op = ostart;
|
|
3419
3428
|
BYTE* const oend = ostart + maxDstSize;
|
|
3420
3429
|
size_t remainingSize = srcSize;
|
|
@@ -3788,7 +3797,9 @@ static size_t ZBUFFv05_blockHeaderSize = 3;
|
|
|
3788
3797
|
static size_t ZBUFFv05_limitCopy(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
|
3789
3798
|
{
|
|
3790
3799
|
size_t length = MIN(maxDstSize, srcSize);
|
|
3791
|
-
|
|
3800
|
+
if (length > 0) {
|
|
3801
|
+
memcpy(dst, src, length);
|
|
3802
|
+
}
|
|
3792
3803
|
return length;
|
|
3793
3804
|
}
|
|
3794
3805
|
|
|
@@ -3925,7 +3936,7 @@ size_t ZBUFFv05_decompressContinue(ZBUFFv05_DCtx* zbc, void* dst, size_t* maxDst
|
|
|
3925
3936
|
*maxDstSizePtr = 0;
|
|
3926
3937
|
return headerSize - zbc->hPos;
|
|
3927
3938
|
}
|
|
3928
|
-
|
|
3939
|
+
/* zbc->stage = ZBUFFv05ds_decodeHeader; break; */ /* useless : stage follows */
|
|
3929
3940
|
}
|
|
3930
3941
|
/* fall-through */
|
|
3931
3942
|
case ZBUFFv05ds_decodeHeader:
|
|
@@ -3998,7 +4009,7 @@ size_t ZBUFFv05_decompressContinue(ZBUFFv05_DCtx* zbc, void* dst, size_t* maxDst
|
|
|
3998
4009
|
if (!decodedSize) { zbc->stage = ZBUFFv05ds_read; break; } /* this was just a header */
|
|
3999
4010
|
zbc->outEnd = zbc->outStart + decodedSize;
|
|
4000
4011
|
zbc->stage = ZBUFFv05ds_flush;
|
|
4001
|
-
|
|
4012
|
+
/* break; */ /* ZBUFFv05ds_flush follows */
|
|
4002
4013
|
}
|
|
4003
4014
|
}
|
|
4004
4015
|
/* fall-through */
|