extzstd 0.0.3.CONCEPT-x86-mingw32 → 0.1-x86-mingw32
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/HISTORY.ja +5 -0
- data/LICENSE +6 -6
- data/README.md +35 -22
- data/contrib/zstd/LICENSE +13 -9
- data/contrib/zstd/README.md +37 -44
- data/contrib/zstd/common/entropy_common.c +33 -39
- data/contrib/zstd/common/error_private.c +43 -0
- data/contrib/zstd/common/error_private.h +11 -60
- data/contrib/zstd/common/fse.h +11 -5
- data/contrib/zstd/common/fse_decompress.c +14 -16
- data/contrib/zstd/common/huf.h +1 -1
- data/contrib/zstd/common/mem.h +36 -43
- data/contrib/zstd/common/xxhash.c +31 -18
- data/contrib/zstd/common/xxhash.h +71 -35
- data/contrib/zstd/common/zbuff.h +29 -35
- data/contrib/zstd/common/zstd_common.c +24 -32
- data/contrib/zstd/common/zstd_errors.h +60 -0
- data/contrib/zstd/common/zstd_internal.h +109 -80
- data/contrib/zstd/compress/fse_compress.c +9 -6
- data/contrib/zstd/compress/huf_compress.c +30 -74
- data/contrib/zstd/compress/zbuff_compress.c +43 -51
- data/contrib/zstd/compress/zstd_compress.c +953 -763
- data/contrib/zstd/compress/zstd_opt.h +115 -261
- data/contrib/zstd/decompress/huf_decompress.c +29 -40
- data/contrib/zstd/decompress/zbuff_decompress.c +36 -78
- data/contrib/zstd/decompress/zstd_decompress.c +976 -496
- data/contrib/zstd/dictBuilder/divsufsort.h +5 -5
- data/contrib/zstd/dictBuilder/zdict.c +194 -229
- data/contrib/zstd/dictBuilder/zdict.h +66 -68
- data/contrib/zstd/legacy/zstd_legacy.h +168 -49
- data/contrib/zstd/legacy/zstd_v01.c +95 -178
- data/contrib/zstd/legacy/zstd_v01.h +12 -32
- data/contrib/zstd/legacy/zstd_v02.c +48 -274
- data/contrib/zstd/legacy/zstd_v02.h +12 -32
- data/contrib/zstd/legacy/zstd_v03.c +48 -274
- data/contrib/zstd/legacy/zstd_v03.h +12 -32
- data/contrib/zstd/legacy/zstd_v04.c +63 -320
- data/contrib/zstd/legacy/zstd_v04.h +13 -33
- data/contrib/zstd/legacy/zstd_v05.c +80 -345
- data/contrib/zstd/legacy/zstd_v05.h +9 -31
- data/contrib/zstd/legacy/zstd_v06.c +48 -458
- data/contrib/zstd/legacy/zstd_v06.h +41 -67
- data/contrib/zstd/legacy/zstd_v07.c +4544 -0
- data/contrib/zstd/legacy/zstd_v07.h +173 -0
- data/contrib/zstd/zstd.h +640 -0
- data/ext/extconf.rb +7 -3
- data/ext/extzstd.c +263 -106
- data/ext/extzstd.h +8 -6
- data/ext/extzstd_nogvls.h +0 -117
- data/ext/extzstd_stream.c +347 -0
- data/ext/zstd_common.c +8 -0
- data/ext/zstd_compress.c +6 -0
- data/ext/zstd_decompress.c +5 -0
- data/ext/zstd_dictbuilder.c +5 -0
- data/ext/zstd_legacy_v07.c +1 -0
- data/gemstub.rb +18 -16
- data/lib/2.1/extzstd.so +0 -0
- data/lib/2.2/extzstd.so +0 -0
- data/lib/2.3/extzstd.so +0 -0
- data/lib/extzstd/version.rb +1 -1
- data/lib/extzstd.rb +77 -43
- data/test/test_basic.rb +11 -6
- metadata +23 -11
- data/contrib/zstd/common/error_public.h +0 -77
- data/contrib/zstd/common/zstd.h +0 -475
- data/ext/extzstd_buffered.c +0 -265
- data/ext/zstd_amalgam.c +0 -18
- data/lib/2.0/extzstd.so +0 -0
@@ -1,39 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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.
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
6
|
+
* LICENSE file in the root directory of this source tree. An additional grant
|
7
|
+
* of patent rights can be found in the PATENTS file in the same directory.
|
8
|
+
*/
|
30
9
|
|
31
|
-
You can contact the author at :
|
32
|
-
- Homepage : http://www.zstd.net/
|
33
|
-
****************************************************************** */
|
34
10
|
|
35
11
|
/*- Dependencies -*/
|
36
12
|
#include "zstd_v05.h"
|
13
|
+
#include "error_private.h"
|
37
14
|
|
38
15
|
|
39
16
|
/* ******************************************************************
|
@@ -140,7 +117,7 @@ extern "C" {
|
|
140
117
|
#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
|
141
118
|
# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
|
142
119
|
# define MEM_FORCE_MEMORY_ACCESS 2
|
143
|
-
# elif defined(__INTEL_COMPILER) || \
|
120
|
+
# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
|
144
121
|
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) ))
|
145
122
|
# define MEM_FORCE_MEMORY_ACCESS 1
|
146
123
|
# endif
|
@@ -250,18 +227,6 @@ MEM_STATIC U32 MEM_readLE32(const void* memPtr)
|
|
250
227
|
}
|
251
228
|
}
|
252
229
|
|
253
|
-
MEM_STATIC void MEM_writeLE32(void* memPtr, U32 val32)
|
254
|
-
{
|
255
|
-
if (MEM_isLittleEndian()) {
|
256
|
-
MEM_write32(memPtr, val32);
|
257
|
-
} else {
|
258
|
-
BYTE* p = (BYTE*)memPtr;
|
259
|
-
p[0] = (BYTE)val32;
|
260
|
-
p[1] = (BYTE)(val32>>8);
|
261
|
-
p[2] = (BYTE)(val32>>16);
|
262
|
-
p[3] = (BYTE)(val32>>24);
|
263
|
-
}
|
264
|
-
}
|
265
230
|
|
266
231
|
MEM_STATIC U64 MEM_readLE64(const void* memPtr)
|
267
232
|
{
|
@@ -274,22 +239,6 @@ MEM_STATIC U64 MEM_readLE64(const void* memPtr)
|
|
274
239
|
}
|
275
240
|
}
|
276
241
|
|
277
|
-
MEM_STATIC void MEM_writeLE64(void* memPtr, U64 val64)
|
278
|
-
{
|
279
|
-
if (MEM_isLittleEndian()) {
|
280
|
-
MEM_write64(memPtr, val64);
|
281
|
-
} else {
|
282
|
-
BYTE* p = (BYTE*)memPtr;
|
283
|
-
p[0] = (BYTE)val64;
|
284
|
-
p[1] = (BYTE)(val64>>8);
|
285
|
-
p[2] = (BYTE)(val64>>16);
|
286
|
-
p[3] = (BYTE)(val64>>24);
|
287
|
-
p[4] = (BYTE)(val64>>32);
|
288
|
-
p[5] = (BYTE)(val64>>40);
|
289
|
-
p[6] = (BYTE)(val64>>48);
|
290
|
-
p[7] = (BYTE)(val64>>56);
|
291
|
-
}
|
292
|
-
}
|
293
242
|
|
294
243
|
MEM_STATIC size_t MEM_readLEST(const void* memPtr)
|
295
244
|
{
|
@@ -299,13 +248,6 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr)
|
|
299
248
|
return (size_t)MEM_readLE64(memPtr);
|
300
249
|
}
|
301
250
|
|
302
|
-
MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val)
|
303
|
-
{
|
304
|
-
if (MEM_32bits())
|
305
|
-
MEM_writeLE32(memPtr, (U32)val);
|
306
|
-
else
|
307
|
-
MEM_writeLE64(memPtr, (U64)val);
|
308
|
-
}
|
309
251
|
|
310
252
|
#if defined (__cplusplus)
|
311
253
|
}
|
@@ -313,79 +255,6 @@ MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val)
|
|
313
255
|
|
314
256
|
#endif /* MEM_H_MODULE */
|
315
257
|
|
316
|
-
/* ******************************************************************
|
317
|
-
Error codes list
|
318
|
-
Copyright (C) 2016, Yann Collet
|
319
|
-
|
320
|
-
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
321
|
-
|
322
|
-
Redistribution and use in source and binary forms, with or without
|
323
|
-
modification, are permitted provided that the following conditions are
|
324
|
-
met:
|
325
|
-
|
326
|
-
* Redistributions of source code must retain the above copyright
|
327
|
-
notice, this list of conditions and the following disclaimer.
|
328
|
-
* Redistributions in binary form must reproduce the above
|
329
|
-
copyright notice, this list of conditions and the following disclaimer
|
330
|
-
in the documentation and/or other materials provided with the
|
331
|
-
distribution.
|
332
|
-
|
333
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
334
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
335
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
336
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
337
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
338
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
339
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
340
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
341
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
342
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
343
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
344
|
-
|
345
|
-
You can contact the author at :
|
346
|
-
- Source repository : https://github.com/Cyan4973/zstd
|
347
|
-
****************************************************************** */
|
348
|
-
#ifndef ERROR_PUBLIC_H_MODULE
|
349
|
-
#define ERROR_PUBLIC_H_MODULE
|
350
|
-
|
351
|
-
#if defined (__cplusplus)
|
352
|
-
extern "C" {
|
353
|
-
#endif
|
354
|
-
|
355
|
-
|
356
|
-
/* ****************************************
|
357
|
-
* error codes list
|
358
|
-
******************************************/
|
359
|
-
typedef enum {
|
360
|
-
ZSTDv05_error_no_error,
|
361
|
-
ZSTDv05_error_GENERIC,
|
362
|
-
ZSTDv05_error_prefix_unknown,
|
363
|
-
ZSTDv05_error_frameParameter_unsupported,
|
364
|
-
ZSTDv05_error_frameParameter_unsupportedBy32bits,
|
365
|
-
ZSTDv05_error_init_missing,
|
366
|
-
ZSTDv05_error_memory_allocation,
|
367
|
-
ZSTDv05_error_stage_wrong,
|
368
|
-
ZSTDv05_error_dstSize_tooSmall,
|
369
|
-
ZSTDv05_error_srcSize_wrong,
|
370
|
-
ZSTDv05_error_corruption_detected,
|
371
|
-
ZSTDv05_error_tableLog_tooLarge,
|
372
|
-
ZSTDv05_error_maxSymbolValue_tooLarge,
|
373
|
-
ZSTDv05_error_maxSymbolValue_tooSmall,
|
374
|
-
ZSTDv05_error_dictionary_corrupted,
|
375
|
-
ZSTDv05_error_maxCode
|
376
|
-
} ZSTDv05_ErrorCode;
|
377
|
-
|
378
|
-
/* note : functions provide error codes in reverse negative order,
|
379
|
-
so compare with (size_t)(0-enum) */
|
380
|
-
|
381
|
-
|
382
|
-
#if defined (__cplusplus)
|
383
|
-
}
|
384
|
-
#endif
|
385
|
-
|
386
|
-
#endif /* ERROR_PUBLIC_H_MODULE */
|
387
|
-
|
388
|
-
|
389
258
|
/*
|
390
259
|
zstd - standard compression library
|
391
260
|
Header File for static linking only
|
@@ -529,119 +398,6 @@ size_t ZSTDv05_decompressBlock(ZSTDv05_DCtx* dctx, void* dst, size_t dstCapacity
|
|
529
398
|
#endif /* ZSTDv05_STATIC_H */
|
530
399
|
|
531
400
|
|
532
|
-
|
533
|
-
/* ******************************************************************
|
534
|
-
Error codes and messages
|
535
|
-
Copyright (C) 2013-2016, Yann Collet
|
536
|
-
|
537
|
-
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
538
|
-
|
539
|
-
Redistribution and use in source and binary forms, with or without
|
540
|
-
modification, are permitted provided that the following conditions are
|
541
|
-
met:
|
542
|
-
|
543
|
-
* Redistributions of source code must retain the above copyright
|
544
|
-
notice, this list of conditions and the following disclaimer.
|
545
|
-
* Redistributions in binary form must reproduce the above
|
546
|
-
copyright notice, this list of conditions and the following disclaimer
|
547
|
-
in the documentation and/or other materials provided with the
|
548
|
-
distribution.
|
549
|
-
|
550
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
551
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
552
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
553
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
554
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
555
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
556
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
557
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
558
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
559
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
560
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
561
|
-
|
562
|
-
You can contact the author at :
|
563
|
-
- Source repository : https://github.com/Cyan4973/zstd
|
564
|
-
****************************************************************** */
|
565
|
-
/* Note : this module is expected to remain private, do not expose it */
|
566
|
-
|
567
|
-
#ifndef ERROR_H_MODULE
|
568
|
-
#define ERROR_H_MODULE
|
569
|
-
|
570
|
-
#if defined (__cplusplus)
|
571
|
-
extern "C" {
|
572
|
-
#endif
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
/* ****************************************
|
577
|
-
* Compiler-specific
|
578
|
-
******************************************/
|
579
|
-
#if defined(__GNUC__)
|
580
|
-
# define ERR_STATIC static __attribute__((unused))
|
581
|
-
#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
582
|
-
# define ERR_STATIC static inline
|
583
|
-
#elif defined(_MSC_VER)
|
584
|
-
# define ERR_STATIC static __inline
|
585
|
-
#else
|
586
|
-
# define ERR_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
587
|
-
#endif
|
588
|
-
|
589
|
-
|
590
|
-
/*-****************************************
|
591
|
-
* Customization
|
592
|
-
******************************************/
|
593
|
-
typedef ZSTDv05_ErrorCode ERR_enum;
|
594
|
-
#define PREFIX(name) ZSTDv05_error_##name
|
595
|
-
|
596
|
-
|
597
|
-
/*-****************************************
|
598
|
-
* Error codes handling
|
599
|
-
******************************************/
|
600
|
-
#ifdef ERROR
|
601
|
-
# undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
|
602
|
-
#endif
|
603
|
-
#define ERROR(name) (size_t)-PREFIX(name)
|
604
|
-
|
605
|
-
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
606
|
-
|
607
|
-
ERR_STATIC ERR_enum ERR_getError(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); }
|
608
|
-
|
609
|
-
|
610
|
-
/*-****************************************
|
611
|
-
* Error Strings
|
612
|
-
******************************************/
|
613
|
-
|
614
|
-
ERR_STATIC const char* ERR_getErrorName(size_t code)
|
615
|
-
{
|
616
|
-
static const char* notErrorCode = "Unspecified error code";
|
617
|
-
switch( ERR_getError(code) )
|
618
|
-
{
|
619
|
-
case PREFIX(no_error): return "No error detected";
|
620
|
-
case PREFIX(GENERIC): return "Error (generic)";
|
621
|
-
case PREFIX(prefix_unknown): return "Unknown frame descriptor";
|
622
|
-
case PREFIX(frameParameter_unsupported): return "Unsupported frame parameter";
|
623
|
-
case PREFIX(frameParameter_unsupportedBy32bits): return "Frame parameter unsupported in 32-bits mode";
|
624
|
-
case PREFIX(init_missing): return "Context should be init first";
|
625
|
-
case PREFIX(memory_allocation): return "Allocation error : not enough memory";
|
626
|
-
case PREFIX(stage_wrong): return "Operation not authorized at current processing stage";
|
627
|
-
case PREFIX(dstSize_tooSmall): return "Destination buffer is too small";
|
628
|
-
case PREFIX(srcSize_wrong): return "Src size incorrect";
|
629
|
-
case PREFIX(corruption_detected): return "Corrupted block detected";
|
630
|
-
case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory";
|
631
|
-
case PREFIX(maxSymbolValue_tooLarge): return "Unsupported max possible Symbol Value : too large";
|
632
|
-
case PREFIX(maxSymbolValue_tooSmall): return "Specified maxSymbolValue is too small";
|
633
|
-
case PREFIX(dictionary_corrupted): return "Dictionary is corrupted";
|
634
|
-
case PREFIX(maxCode):
|
635
|
-
default: return notErrorCode; /* should be impossible, due to ERR_getError() */
|
636
|
-
}
|
637
|
-
}
|
638
|
-
|
639
|
-
|
640
|
-
#if defined (__cplusplus)
|
641
|
-
}
|
642
|
-
#endif
|
643
|
-
|
644
|
-
#endif /* ERROR_H_MODULE */
|
645
401
|
/*
|
646
402
|
zstd_internal - common functions to include
|
647
403
|
Header File for include
|
@@ -763,28 +519,6 @@ MEM_STATIC void ZSTDv05_wildcopy(void* dst, const void* src, size_t length)
|
|
763
519
|
while (op < oend);
|
764
520
|
}
|
765
521
|
|
766
|
-
MEM_STATIC unsigned ZSTDv05_highbit(U32 val)
|
767
|
-
{
|
768
|
-
# if defined(_MSC_VER) /* Visual */
|
769
|
-
unsigned long r=0;
|
770
|
-
_BitScanReverse(&r, val);
|
771
|
-
return (unsigned)r;
|
772
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */
|
773
|
-
return 31 - __builtin_clz(val);
|
774
|
-
# else /* Software version */
|
775
|
-
static const int 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 };
|
776
|
-
U32 v = val;
|
777
|
-
int r;
|
778
|
-
v |= v >> 1;
|
779
|
-
v |= v >> 2;
|
780
|
-
v |= v >> 4;
|
781
|
-
v |= v >> 8;
|
782
|
-
v |= v >> 16;
|
783
|
-
r = DeBruijnClz[(U32)(v * 0x07C4ACDDU) >> 27];
|
784
|
-
return r;
|
785
|
-
# endif
|
786
|
-
}
|
787
|
-
|
788
522
|
|
789
523
|
/*-*******************************************
|
790
524
|
* Private interfaces
|
@@ -916,16 +650,16 @@ void FSEv05_freeDTable(FSEv05_DTable* dt);
|
|
916
650
|
/*!
|
917
651
|
FSEv05_buildDTable():
|
918
652
|
Builds 'dt', which must be already allocated, using FSEv05_createDTable()
|
919
|
-
return : 0,
|
920
|
-
|
653
|
+
@return : 0,
|
654
|
+
or an errorCode, which can be tested using FSEv05_isError() */
|
921
655
|
size_t FSEv05_buildDTable (FSEv05_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog);
|
922
656
|
|
923
657
|
/*!
|
924
658
|
FSEv05_decompress_usingDTable():
|
925
|
-
Decompress compressed source @cSrc of size @cSrcSize using
|
926
|
-
into
|
927
|
-
return : size of regenerated data (necessarily <= @dstCapacity)
|
928
|
-
|
659
|
+
Decompress compressed source @cSrc of size @cSrcSize using `dt`
|
660
|
+
into `dst` which must be already allocated.
|
661
|
+
@return : size of regenerated data (necessarily <= @dstCapacity)
|
662
|
+
or an errorCode, which can be tested using FSEv05_isError() */
|
929
663
|
size_t FSEv05_decompress_usingDTable(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, const FSEv05_DTable* dt);
|
930
664
|
|
931
665
|
|
@@ -1350,11 +1084,6 @@ MEM_STATIC void FSEv05_initDState(FSEv05_DState_t* DStatePtr, BITv05_DStream_t*
|
|
1350
1084
|
DStatePtr->table = dt + 1;
|
1351
1085
|
}
|
1352
1086
|
|
1353
|
-
MEM_STATIC size_t FSEv05_getStateValue(FSEv05_DState_t* DStatePtr)
|
1354
|
-
{
|
1355
|
-
return DStatePtr->state;
|
1356
|
-
}
|
1357
|
-
|
1358
1087
|
MEM_STATIC BYTE FSEv05_peakSymbol(FSEv05_DState_t* DStatePtr)
|
1359
1088
|
{
|
1360
1089
|
const FSEv05_decode_t DInfo = ((const FSEv05_decode_t*)(DStatePtr->table))[DStatePtr->state];
|
@@ -1466,12 +1195,15 @@ MEM_STATIC unsigned FSEv05_endOfDState(const FSEv05_DState_t* DStatePtr)
|
|
1466
1195
|
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
1467
1196
|
# pragma warning(disable : 4214) /* disable: C4214: non-int bitfields */
|
1468
1197
|
#else
|
1469
|
-
#
|
1470
|
-
#
|
1471
|
-
#
|
1198
|
+
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
1199
|
+
# ifdef __GNUC__
|
1200
|
+
# define FORCE_INLINE static inline __attribute__((always_inline))
|
1201
|
+
# else
|
1202
|
+
# define FORCE_INLINE static inline
|
1203
|
+
# endif
|
1472
1204
|
# else
|
1473
|
-
# define FORCE_INLINE static
|
1474
|
-
# endif
|
1205
|
+
# define FORCE_INLINE static
|
1206
|
+
# endif /* __STDC_VERSION__ */
|
1475
1207
|
#endif
|
1476
1208
|
|
1477
1209
|
|
@@ -2088,14 +1820,7 @@ size_t HUFv05_decompress1X4_usingDTable(void* dst, size_t maxDstSize, const void
|
|
2088
1820
|
|
2089
1821
|
|
2090
1822
|
#ifdef _MSC_VER /* Visual Studio */
|
2091
|
-
# define FORCE_INLINE static __forceinline
|
2092
1823
|
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
2093
|
-
#else
|
2094
|
-
# ifdef __GNUC__
|
2095
|
-
# define FORCE_INLINE static inline __attribute__((always_inline))
|
2096
|
-
# else
|
2097
|
-
# define FORCE_INLINE static inline
|
2098
|
-
# endif
|
2099
1824
|
#endif
|
2100
1825
|
|
2101
1826
|
|
@@ -2148,10 +1873,12 @@ static size_t HUFv05_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
|
|
2148
1873
|
U32 weightTotal;
|
2149
1874
|
U32 tableLog;
|
2150
1875
|
const BYTE* ip = (const BYTE*) src;
|
2151
|
-
size_t iSize
|
1876
|
+
size_t iSize;
|
2152
1877
|
size_t oSize;
|
2153
1878
|
U32 n;
|
2154
1879
|
|
1880
|
+
if (!srcSize) return ERROR(srcSize_wrong);
|
1881
|
+
iSize = ip[0];
|
2155
1882
|
//memset(huffWeight, 0, hwSize); /* is not necessary, even though some analyzer complain ... */
|
2156
1883
|
|
2157
1884
|
if (iSize >= 128) { /* special header */
|
@@ -2185,6 +1912,7 @@ static size_t HUFv05_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
|
|
2185
1912
|
rankStats[huffWeight[n]]++;
|
2186
1913
|
weightTotal += (1 << huffWeight[n]) >> 1;
|
2187
1914
|
}
|
1915
|
+
if (weightTotal == 0) return ERROR(corruption_detected);
|
2188
1916
|
|
2189
1917
|
/* get last non-null symbol weight (implied, total must be 2^n) */
|
2190
1918
|
tableLog = BITv05_highbit32(weightTotal) + 1;
|
@@ -2307,13 +2035,14 @@ size_t HUFv05_decompress1X2_usingDTable(
|
|
2307
2035
|
{
|
2308
2036
|
BYTE* op = (BYTE*)dst;
|
2309
2037
|
BYTE* const oend = op + dstSize;
|
2310
|
-
size_t errorCode;
|
2311
2038
|
const U32 dtLog = DTable[0];
|
2312
2039
|
const void* dtPtr = DTable;
|
2313
2040
|
const HUFv05_DEltX2* const dt = ((const HUFv05_DEltX2*)dtPtr)+1;
|
2314
2041
|
BITv05_DStream_t bitD;
|
2315
|
-
|
2316
|
-
if (
|
2042
|
+
|
2043
|
+
if (dstSize <= cSrcSize) return ERROR(dstSize_tooSmall);
|
2044
|
+
{ size_t const errorCode = BITv05_initDStream(&bitD, cSrc, cSrcSize);
|
2045
|
+
if (HUFv05_isError(errorCode)) return errorCode; }
|
2317
2046
|
|
2318
2047
|
HUFv05_decodeStreamX2(op, &bitD, oend, dt, dtLog);
|
2319
2048
|
|
@@ -2944,17 +2673,9 @@ size_t HUFv05_decompress (void* dst, size_t dstSize, const void* cSrc, size_t cS
|
|
2944
2673
|
* Compiler specifics
|
2945
2674
|
*********************************************************/
|
2946
2675
|
#ifdef _MSC_VER /* Visual Studio */
|
2947
|
-
# define FORCE_INLINE static __forceinline
|
2948
2676
|
# include <intrin.h> /* For Visual 2005 */
|
2949
2677
|
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
2950
2678
|
# pragma warning(disable : 4324) /* disable: C4324: padded structure */
|
2951
|
-
#else
|
2952
|
-
# define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
2953
|
-
# ifdef __GNUC__
|
2954
|
-
# define FORCE_INLINE static inline __attribute__((always_inline))
|
2955
|
-
# else
|
2956
|
-
# define FORCE_INLINE static inline
|
2957
|
-
# endif
|
2958
2679
|
#endif
|
2959
2680
|
|
2960
2681
|
|
@@ -2981,9 +2702,6 @@ static void ZSTDv05_copy4(void* dst, const void* src) { memcpy(dst, src, 4); }
|
|
2981
2702
|
* tells if a return value is an error code */
|
2982
2703
|
unsigned ZSTDv05_isError(size_t code) { return ERR_isError(code); }
|
2983
2704
|
|
2984
|
-
/*! ZSTDv05_getError() :
|
2985
|
-
* convert a `size_t` function result into a proper ZSTDv05_errorCode enum */
|
2986
|
-
ZSTDv05_ErrorCode ZSTDv05_getError(size_t code) { return ERR_getError(code); }
|
2987
2705
|
|
2988
2706
|
/*! ZSTDv05_getErrorName() :
|
2989
2707
|
* provides error code string (useful for debugging) */
|
@@ -3228,6 +2946,7 @@ size_t ZSTDv05_decodeLiteralsBlock(ZSTDv05_DCtx* dctx,
|
|
3228
2946
|
{
|
3229
2947
|
size_t litSize, litCSize, singleStream=0;
|
3230
2948
|
U32 lhSize = ((istart[0]) >> 4) & 3;
|
2949
|
+
if (srcSize < 5) return ERROR(corruption_detected); /* srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3 */
|
3231
2950
|
switch(lhSize)
|
3232
2951
|
{
|
3233
2952
|
case 0: case 1: default: /* note : default is impossible, since lhSize into [0..3] */
|
@@ -3251,6 +2970,7 @@ size_t ZSTDv05_decodeLiteralsBlock(ZSTDv05_DCtx* dctx,
|
|
3251
2970
|
break;
|
3252
2971
|
}
|
3253
2972
|
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
2973
|
+
if (litCSize + lhSize > srcSize) return ERROR(corruption_detected);
|
3254
2974
|
|
3255
2975
|
if (HUFv05_isError(singleStream ?
|
3256
2976
|
HUFv05_decompress1X2(dctx->litBuffer, litSize, istart+lhSize, litCSize) :
|
@@ -3276,6 +2996,7 @@ size_t ZSTDv05_decodeLiteralsBlock(ZSTDv05_DCtx* dctx,
|
|
3276
2996
|
lhSize=3;
|
3277
2997
|
litSize = ((istart[0] & 15) << 6) + (istart[1] >> 2);
|
3278
2998
|
litCSize = ((istart[1] & 3) << 8) + istart[2];
|
2999
|
+
if (litCSize + litSize > srcSize) return ERROR(corruption_detected);
|
3279
3000
|
|
3280
3001
|
errorCode = HUFv05_decompress1X4_usingDTable(dctx->litBuffer, litSize, istart+lhSize, litCSize, dctx->hufTableX4);
|
3281
3002
|
if (HUFv05_isError(errorCode)) return ERROR(corruption_detected);
|
@@ -3332,6 +3053,7 @@ size_t ZSTDv05_decodeLiteralsBlock(ZSTDv05_DCtx* dctx,
|
|
3332
3053
|
break;
|
3333
3054
|
case 3:
|
3334
3055
|
litSize = ((istart[0] & 15) << 16) + (istart[1] << 8) + istart[2];
|
3056
|
+
if (srcSize<4) return ERROR(corruption_detected); /* srcSize >= MIN_CBLOCK_SIZE == 3; here we need lhSize+1 = 4 */
|
3335
3057
|
break;
|
3336
3058
|
}
|
3337
3059
|
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
@@ -3349,7 +3071,7 @@ size_t ZSTDv05_decodeLiteralsBlock(ZSTDv05_DCtx* dctx,
|
|
3349
3071
|
|
3350
3072
|
size_t ZSTDv05_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumpsLengthPtr,
|
3351
3073
|
FSEv05_DTable* DTableLL, FSEv05_DTable* DTableML, FSEv05_DTable* DTableOffb,
|
3352
|
-
const void* src, size_t srcSize)
|
3074
|
+
const void* src, size_t srcSize, U32 flagStaticTable)
|
3353
3075
|
{
|
3354
3076
|
const BYTE* const istart = (const BYTE* const)src;
|
3355
3077
|
const BYTE* ip = istart;
|
@@ -3365,17 +3087,22 @@ size_t ZSTDv05_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumps
|
|
3365
3087
|
/* SeqHead */
|
3366
3088
|
*nbSeq = *ip++;
|
3367
3089
|
if (*nbSeq==0) return 1;
|
3368
|
-
if (*nbSeq >= 128)
|
3090
|
+
if (*nbSeq >= 128) {
|
3091
|
+
if (ip >= iend) return ERROR(srcSize_wrong);
|
3369
3092
|
*nbSeq = ((nbSeq[0]-128)<<8) + *ip++;
|
3093
|
+
}
|
3370
3094
|
|
3095
|
+
if (ip >= iend) return ERROR(srcSize_wrong);
|
3371
3096
|
LLtype = *ip >> 6;
|
3372
3097
|
Offtype = (*ip >> 4) & 3;
|
3373
3098
|
MLtype = (*ip >> 2) & 3;
|
3374
3099
|
if (*ip & 2) {
|
3100
|
+
if (ip+3 > iend) return ERROR(srcSize_wrong);
|
3375
3101
|
dumpsLength = ip[2];
|
3376
3102
|
dumpsLength += ip[1] << 8;
|
3377
3103
|
ip += 3;
|
3378
3104
|
} else {
|
3105
|
+
if (ip+2 > iend) return ERROR(srcSize_wrong);
|
3379
3106
|
dumpsLength = ip[1];
|
3380
3107
|
dumpsLength += (ip[0] & 1) << 8;
|
3381
3108
|
ip += 2;
|
@@ -3395,7 +3122,6 @@ size_t ZSTDv05_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumps
|
|
3395
3122
|
/* Build DTables */
|
3396
3123
|
switch(LLtype)
|
3397
3124
|
{
|
3398
|
-
U32 max;
|
3399
3125
|
case FSEv05_ENCODING_RLE :
|
3400
3126
|
LLlog = 0;
|
3401
3127
|
FSEv05_buildDTable_rle(DTableLL, *ip++);
|
@@ -3405,20 +3131,20 @@ size_t ZSTDv05_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumps
|
|
3405
3131
|
FSEv05_buildDTable_raw(DTableLL, LLbits);
|
3406
3132
|
break;
|
3407
3133
|
case FSEv05_ENCODING_STATIC:
|
3134
|
+
if (!flagStaticTable) return ERROR(corruption_detected);
|
3408
3135
|
break;
|
3409
3136
|
case FSEv05_ENCODING_DYNAMIC :
|
3410
3137
|
default : /* impossible */
|
3411
|
-
max = MaxLL;
|
3412
|
-
|
3413
|
-
|
3414
|
-
|
3415
|
-
|
3416
|
-
|
3417
|
-
}
|
3138
|
+
{ U32 max = MaxLL;
|
3139
|
+
headerSize = FSEv05_readNCount(norm, &max, &LLlog, ip, iend-ip);
|
3140
|
+
if (FSEv05_isError(headerSize)) return ERROR(GENERIC);
|
3141
|
+
if (LLlog > LLFSEv05Log) return ERROR(corruption_detected);
|
3142
|
+
ip += headerSize;
|
3143
|
+
FSEv05_buildDTable(DTableLL, norm, max, LLlog);
|
3144
|
+
} }
|
3418
3145
|
|
3419
3146
|
switch(Offtype)
|
3420
3147
|
{
|
3421
|
-
U32 max;
|
3422
3148
|
case FSEv05_ENCODING_RLE :
|
3423
3149
|
Offlog = 0;
|
3424
3150
|
if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */
|
@@ -3429,20 +3155,20 @@ size_t ZSTDv05_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumps
|
|
3429
3155
|
FSEv05_buildDTable_raw(DTableOffb, Offbits);
|
3430
3156
|
break;
|
3431
3157
|
case FSEv05_ENCODING_STATIC:
|
3158
|
+
if (!flagStaticTable) return ERROR(corruption_detected);
|
3432
3159
|
break;
|
3433
3160
|
case FSEv05_ENCODING_DYNAMIC :
|
3434
3161
|
default : /* impossible */
|
3435
|
-
max = MaxOff;
|
3436
|
-
|
3437
|
-
|
3438
|
-
|
3439
|
-
|
3440
|
-
|
3441
|
-
}
|
3162
|
+
{ U32 max = MaxOff;
|
3163
|
+
headerSize = FSEv05_readNCount(norm, &max, &Offlog, ip, iend-ip);
|
3164
|
+
if (FSEv05_isError(headerSize)) return ERROR(GENERIC);
|
3165
|
+
if (Offlog > OffFSEv05Log) return ERROR(corruption_detected);
|
3166
|
+
ip += headerSize;
|
3167
|
+
FSEv05_buildDTable(DTableOffb, norm, max, Offlog);
|
3168
|
+
} }
|
3442
3169
|
|
3443
3170
|
switch(MLtype)
|
3444
3171
|
{
|
3445
|
-
U32 max;
|
3446
3172
|
case FSEv05_ENCODING_RLE :
|
3447
3173
|
MLlog = 0;
|
3448
3174
|
if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */
|
@@ -3453,16 +3179,17 @@ size_t ZSTDv05_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumps
|
|
3453
3179
|
FSEv05_buildDTable_raw(DTableML, MLbits);
|
3454
3180
|
break;
|
3455
3181
|
case FSEv05_ENCODING_STATIC:
|
3182
|
+
if (!flagStaticTable) return ERROR(corruption_detected);
|
3456
3183
|
break;
|
3457
3184
|
case FSEv05_ENCODING_DYNAMIC :
|
3458
3185
|
default : /* impossible */
|
3459
|
-
max = MaxML;
|
3460
|
-
|
3461
|
-
|
3462
|
-
|
3463
|
-
|
3464
|
-
|
3465
|
-
} }
|
3186
|
+
{ U32 max = MaxML;
|
3187
|
+
headerSize = FSEv05_readNCount(norm, &max, &MLlog, ip, iend-ip);
|
3188
|
+
if (FSEv05_isError(headerSize)) return ERROR(GENERIC);
|
3189
|
+
if (MLlog > MLFSEv05Log) return ERROR(corruption_detected);
|
3190
|
+
ip += headerSize;
|
3191
|
+
FSEv05_buildDTable(DTableML, norm, max, MLlog);
|
3192
|
+
} } }
|
3466
3193
|
|
3467
3194
|
return ip-istart;
|
3468
3195
|
}
|
@@ -3601,7 +3328,12 @@ static size_t ZSTDv05_execSequence(BYTE* op,
|
|
3601
3328
|
op = oLitEnd + length1;
|
3602
3329
|
sequence.matchLength -= length1;
|
3603
3330
|
match = base;
|
3331
|
+
if (op > oend_8) {
|
3332
|
+
while (op < oMatchEnd) *op++ = *match++;
|
3333
|
+
return sequenceLength;
|
3334
|
+
}
|
3604
3335
|
} }
|
3336
|
+
/* Requirement: op <= oend_8 */
|
3605
3337
|
|
3606
3338
|
/* match within prefix */
|
3607
3339
|
if (sequence.offset < 8) {
|
@@ -3660,7 +3392,7 @@ static size_t ZSTDv05_decompressSequences(
|
|
3660
3392
|
/* Build Decoding Tables */
|
3661
3393
|
errorCode = ZSTDv05_decodeSeqHeaders(&nbSeq, &dumps, &dumpsLength,
|
3662
3394
|
DTableLL, DTableML, DTableOffb,
|
3663
|
-
ip, seqSize);
|
3395
|
+
ip, seqSize, dctx->flagStaticTables);
|
3664
3396
|
if (ZSTDv05_isError(errorCode)) return errorCode;
|
3665
3397
|
ip += errorCode;
|
3666
3398
|
|
@@ -3949,11 +3681,11 @@ static size_t ZSTDv05_loadEntropy(ZSTDv05_DCtx* dctx, const void* dict, size_t d
|
|
3949
3681
|
{
|
3950
3682
|
size_t hSize, offcodeHeaderSize, matchlengthHeaderSize, errorCode, litlengthHeaderSize;
|
3951
3683
|
short offcodeNCount[MaxOff+1];
|
3952
|
-
U32 offcodeMaxValue=MaxOff, offcodeLog
|
3684
|
+
U32 offcodeMaxValue=MaxOff, offcodeLog;
|
3953
3685
|
short matchlengthNCount[MaxML+1];
|
3954
|
-
unsigned matchlengthMaxValue = MaxML, matchlengthLog
|
3686
|
+
unsigned matchlengthMaxValue = MaxML, matchlengthLog;
|
3955
3687
|
short litlengthNCount[MaxLL+1];
|
3956
|
-
unsigned litlengthMaxValue = MaxLL, litlengthLog
|
3688
|
+
unsigned litlengthMaxValue = MaxLL, litlengthLog;
|
3957
3689
|
|
3958
3690
|
hSize = HUFv05_readDTableX4(dctx->hufTableX4, dict, dictSize);
|
3959
3691
|
if (HUFv05_isError(hSize)) return ERROR(dictionary_corrupted);
|
@@ -3962,6 +3694,7 @@ static size_t ZSTDv05_loadEntropy(ZSTDv05_DCtx* dctx, const void* dict, size_t d
|
|
3962
3694
|
|
3963
3695
|
offcodeHeaderSize = FSEv05_readNCount(offcodeNCount, &offcodeMaxValue, &offcodeLog, dict, dictSize);
|
3964
3696
|
if (FSEv05_isError(offcodeHeaderSize)) return ERROR(dictionary_corrupted);
|
3697
|
+
if (offcodeLog > OffFSEv05Log) return ERROR(dictionary_corrupted);
|
3965
3698
|
errorCode = FSEv05_buildDTable(dctx->OffTable, offcodeNCount, offcodeMaxValue, offcodeLog);
|
3966
3699
|
if (FSEv05_isError(errorCode)) return ERROR(dictionary_corrupted);
|
3967
3700
|
dict = (const char*)dict + offcodeHeaderSize;
|
@@ -3969,12 +3702,14 @@ static size_t ZSTDv05_loadEntropy(ZSTDv05_DCtx* dctx, const void* dict, size_t d
|
|
3969
3702
|
|
3970
3703
|
matchlengthHeaderSize = FSEv05_readNCount(matchlengthNCount, &matchlengthMaxValue, &matchlengthLog, dict, dictSize);
|
3971
3704
|
if (FSEv05_isError(matchlengthHeaderSize)) return ERROR(dictionary_corrupted);
|
3705
|
+
if (matchlengthLog > MLFSEv05Log) return ERROR(dictionary_corrupted);
|
3972
3706
|
errorCode = FSEv05_buildDTable(dctx->MLTable, matchlengthNCount, matchlengthMaxValue, matchlengthLog);
|
3973
3707
|
if (FSEv05_isError(errorCode)) return ERROR(dictionary_corrupted);
|
3974
3708
|
dict = (const char*)dict + matchlengthHeaderSize;
|
3975
3709
|
dictSize -= matchlengthHeaderSize;
|
3976
3710
|
|
3977
3711
|
litlengthHeaderSize = FSEv05_readNCount(litlengthNCount, &litlengthMaxValue, &litlengthLog, dict, dictSize);
|
3712
|
+
if (litlengthLog > LLFSEv05Log) return ERROR(dictionary_corrupted);
|
3978
3713
|
if (FSEv05_isError(litlengthHeaderSize)) return ERROR(dictionary_corrupted);
|
3979
3714
|
errorCode = FSEv05_buildDTable(dctx->LLTable, litlengthNCount, litlengthMaxValue, litlengthLog);
|
3980
3715
|
if (FSEv05_isError(errorCode)) return ERROR(dictionary_corrupted);
|
@@ -4092,7 +3827,7 @@ static size_t ZBUFFv05_limitCopy(void* dst, size_t maxDstSize, const void* src,
|
|
4092
3827
|
* The function will report how many bytes were read or written by modifying *srcSizePtr and *maxDstSizePtr.
|
4093
3828
|
* Note that it may not consume the entire input, in which case it's up to the caller to call again the function with remaining input.
|
4094
3829
|
* The content of dst will be overwritten (up to *maxDstSizePtr) at each function call, so save its content if it matters or change dst .
|
4095
|
-
*
|
3830
|
+
* return : a hint to preferred nb of bytes to use as input for next function call (it's only a hint, to improve latency)
|
4096
3831
|
* or 0 when a frame is completely decoded
|
4097
3832
|
* or an error code, which can be tested using ZBUFFv05_isError().
|
4098
3833
|
*
|