Nick Terrell
b42dd27ef5
Add include guards and extern C
2017-01-27 16:00:19 -08:00
Yann Collet
f6d4a786fc
reduced zstdmt latency when using small custom section sizes with high compression levels
...
Previous version was requiring a fairly large initial amount of input data
before starting to create compression jobs.
This new version starts the process much sooner.
2017-01-27 15:55:30 -08:00
Yann Collet
717c65d690
Merge pull request #519 from inikep/dev11
...
Dev11
2017-01-26 14:23:44 -08:00
Yann Collet
8dafb1acf5
CLI : automatically set overlap size to max (windowSize) for max compression level
2017-01-25 17:01:13 -08:00
Yann Collet
06e7697f96
added test of new parameter ZSTD_p_forceWindow
2017-01-25 16:39:03 -08:00
Yann Collet
bb0027405a
fixed zstdmt corruption issue when enabling overlapped sections
...
see Asana board for detailed explanation on why and how to fix it
2017-01-25 16:25:38 -08:00
Yann Collet
943cff9c37
fixed zstdmt cli freeze issue with large nb of threads
...
fileio.c was continually pushing more content without giving a chance to flush compressed one.
It would block the job queue when input data was accumulated too fast (requiring to define many threads).
Fixed : fileio flushes whatever it can after each input attempt.
2017-01-25 12:35:19 -08:00
Yann Collet
dc8dae596a
overlapped section, for improved compression
...
Sections 2+ read a bit of data from previous section
in order to improve compression ratio.
This also costs some CPU, to reference read data.
Read data is currently fixed to window>>3 size
2017-01-24 22:32:12 -08:00
Yann Collet
f14a669054
refactor job creation
...
code shared accross ZSTDMT_{compress,flush,end}Stream(),
for easier maintenance
2017-01-24 17:41:49 -08:00
Yann Collet
512cbe8c10
zstdmt cli and API allow selection of section sizes
...
By default, section sizes are 4x window size.
This new setting allow manual selection of section sizes.
The larger they are, the (slightly) better the compression ratio,
but also the higher the memory allocation cost,
and eventually the lesser the nb of possible threads,
since each section is compressed by a single thread.
It also introduces a prototype to set generic parameters,
ZSTDMT_setMTCtxParameter()
The idea is that it's possible to add enums
to extend the list of parameters that can be set this way.
This is more long-term oriented than a fixed-size struct.
Consider it as a test.
2017-01-24 17:08:53 -08:00
Yann Collet
3488a4a473
ZSTDMT now supports frame checksum
2017-01-24 11:48:40 -08:00
Przemyslaw Skibinski
96f152f708
improved ZSTD_compressBlock_opt_extDict_generic
2017-01-24 13:18:50 +01:00
Yann Collet
94364bf87a
refactor ZSTDMT streaming flush code
...
now shared by both ZSTDMT_compressStream() and ZSTDMT_flushStream()
2017-01-23 11:50:44 -08:00
Yann Collet
1cbf251e43
ZSTDMT streaming : fall back to (regular) single thread mode
...
when nbThreads==1
2017-01-23 01:43:58 -08:00
Yann Collet
84581ff8d7
ZSTDMT_compressCCtx : fallback to single-thread mode when nbChunks==1
2017-01-23 01:20:27 -08:00
Yann Collet
1a2547f654
ZSTDMT_compressStream() becomes blocking when required to ensure forward progresses
...
In some (rare) cases, job list could be blocked by a first job still being processed,
while all following ones are completed, waiting to be flushed.
In such case, the current job-table implementation is unable to accept new job.
As a consequence, a call to ZSTDMT_compressStream() can be useless (nothing read, nothing flushed),
with the risk to trigger a busy-wait on the caller side
(needlessly loop over ZSTDMT_compressStream() ).
In such a case, ZSTDMT_compressStream() will block until the first job is completed and ready to flush.
It ensures some forward progress by guaranteeing it will flush at least a part of the completed job.
Energy-wasting busy-wait is avoided.
2017-01-22 23:49:52 -08:00
Yann Collet
c593348722
ZSTDMT_initCStream_usingDict() can outlive dict
...
Like ZSTD_initCStream_usingDict(),
ZSTDMT_initCStream_usingDict() now keep a copy of dict internally.
This way, dict can be released :
it does not longer have to outlive all future compression sessions.
2017-01-22 16:44:15 -08:00
Yann Collet
9d6f7637ec
protected (mutex) read to jobCompleted, as suggested by @terrelln
2017-01-21 22:14:08 -08:00
Yann Collet
0cf74fa957
optimized pool allocation by 1 slot
2017-01-21 22:06:49 -08:00
Yann Collet
6ed29a8f44
minor : tab to spaces
2017-01-21 21:56:36 -08:00
Yann Collet
317604e0ad
fixed : compilation of zstreamtest in dll mode
2017-01-20 17:18:41 -08:00
Yann Collet
d7e3cb58c5
Resolved merge conflict dev+zstdmt
2017-01-20 16:44:50 -08:00
cyan4973
2e3b659ae1
fixed minor warnings (Visual, conversion, doxygen)
2017-01-20 14:43:09 -08:00
cyan4973
5fba09fa41
updated util's time for Windows compatibility
...
Correctly measures time on Posix systems when running with
Multi-threading
Todo : check Windows measurement under multi-threading
2017-01-20 12:57:31 -08:00
Yann Collet
b459aad5b4
renamed savedRep into repToConfirm
2017-01-19 17:33:37 -08:00
Yann Collet
500014af49
zstd cli can now compress using multi-threading
...
added : command -T#
added : ZSTD_resetCStream() (zstdmt_compress)
added : FIO_setNbThreads() (fileio)
2017-01-19 17:04:28 -08:00
Yann Collet
19d670ba9d
Added ZSTDMT_initCStream_advanced() variant
...
Correctly compress with custom params and dictionary
Added relevant fuzzer test in zstreamtest
Also :
new macro ZSTDMT_SECTION_LOGSIZE_MIN, which sets a minimum size for a full job
(note : a flush() command can still generate a partial job anytime)
2017-01-19 15:32:07 -08:00
Yann Collet
736788f8e8
added streaming fuzzer tests for MT API
...
Also : fixed corner case, where nb of jobs completed becomes > jobQueueSize
which is possible when many flushes are issued
while there is not enough dst buffer to flush completed ones.
2017-01-19 12:15:29 -08:00
Yann Collet
32dfae6f98
fixed Multi-threaded compression
...
MT compression generates a single frame.
Multi-threading operates by breaking the frames into independent sections.
But from a decoder perspective, there is no difference :
it's just a suite of blocks.
Problem is, decoder preserves repCodes from previous block to start decoding next block.
This is also valid between sections, since they are no different than changing block.
Previous version would incorrectly initialize repcodes to their default value at the beginning of each section.
When using them, there was a mismatch between encoder (default values) and decoder (values from previous block).
This change ensures that repcodes won't be used at the beginning of a new section.
It works by setting them to 0.
This only works with regular (single segment) variants : extDict variants will fail !
Fortunately, sections beyond the 1st one belong to this category.
To be checked : btopt strategy.
This change was only validated from fast to btlazy2 strategies.
2017-01-19 10:32:55 -08:00
Yann Collet
37226c1e9f
Simplified compressChunk job
...
minor refactoring : compression done in a single call on first chunk
Avoid a mutable hSize variable and eventual recombination to cSize at the end
2017-01-19 10:18:17 -08:00
Yann Collet
6073b3e6b8
ZSTDMT_endStream : nullify input buffer after flush
...
There will be no more input after ZSTDMT_endStream invocation :
only flush/end is allowed (to fully collect compressed result).
2017-01-18 15:32:38 -08:00
Yann Collet
3a01c46b26
ZSTDMT_initCStream() supports restart from invalid state
...
ZSTDMT_initCStream() will correcly scrub for resources
when it detects that previous compression was not properly finished.
2017-01-18 15:18:17 -08:00
Yann Collet
4885f591b3
trap compression errors, collect back resources from workers
2017-01-18 14:11:37 -08:00
Yann Collet
563ef8acf4
CCtxPool starts empty, as suggested by @terrelln
...
Also : make zstdmt now a target from root
2017-01-18 12:12:10 -08:00
Yann Collet
a6db7a7b9b
fixed cmaketest
...
(buffer_t){NULL,0} is not considered a constant.
{NULL,0} is.
2017-01-18 11:57:34 -08:00
Yann Collet
0d6b8f65a9
ZSTDMT_free() scrubs potentially unfinished jobs to release their resources
...
In some complex scenarios (free() without finishing compression),
it is possible that some resources are still into jobs
and not collected back into pools.
In which case, previous version of free() would miss them.
This would be equivalent to a leak.
New version ensures that it even foes after such resource.
It requires job consumers to properly mark resources as released,
by replacing entries by NULL after releasing back to the pool.
Obviously, it's not recommended to free() zstdmt context mid-term,
still that's now a supported scenario.
The same methodology is also used to ensure proper resource collection
after an error is detected.
Still to do :
- detect compression errors (not just allocation ones)
- properly manage resource when init() is called without finishing previous compression.
2017-01-17 17:46:33 -08:00
Yann Collet
d0a1d45582
ZSTDMT_{flush,end}Stream() now block on next job completion when nothing to flush
...
The main issue was to avoid a caller to continually loop on {flush,end}Stream()
when there was nothing ready to be flushed but still some compression work ongoing in a worker thread.
The continuous loop would have resulted in wasted energy.
The new version makes call to {flush,end}Stream blocking when there is nothing ready to be flushed.
Of course, if all worker threads have exhausted job, it will return zero (all flush completed).
Note : There are still some remaining issues to report error codes
and properly collect back resources into pools when an error is triggered.
2017-01-17 16:15:18 -08:00
Yann Collet
a73c412932
completed ZSTDMT streaming compression
...
Provides the baseline compression API :
size_t ZSTDMT_initCStream(ZSTDMT_CCtx* zcs, int compressionLevel);
size_t ZSTDMT_compressStream(ZSTDMT_CCtx* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input);
size_t ZSTDMT_flushStream(ZSTDMT_CCtx* zcs, ZSTD_outBuffer* output);
size_t ZSTDMT_endStream(ZSTDMT_CCtx* zcs, ZSTD_outBuffer* output);
Not tested yet
2017-01-17 15:31:16 -08:00
Sean Purcell
57d423c5df
Don't create dict in streaming apis if dictSize == 0
2017-01-17 14:31:35 -08:00
Gregory Szorc
7d6f478d15
Set dictionary ID in ZSTD_initCStream_usingCDict()
...
When porting python-zstandard to use ZSTD_initCStream_usingCDict()
so compression dictionaries could be reused, an automated test
failed due to compressed content changing.
I tracked this down to ZSTD_initCStream_usingCDict() not
setting the dictID field of the ZSTD_CCtx attached to the
ZSTD_CStream instance.
I'm not 100% convinced this is the correct or full solution,
as I'm still seeing one automated test failing with this change.
2017-01-14 17:44:54 -08:00
Yann Collet
5b726dbe4d
fix gcc-arm warning "suggest braces around empty body"
2017-01-12 17:46:46 +01:00
Yann Collet
ad9f6bd123
zstdmt : fix : resources properly collected even when early fail
...
In previous version, main function would return early when detecting a job error.
Late threads resources were therefore not collected back into pools.
New version just register the error, but continue the collecting process.
All buffers and context should be released back to pool before leaving main function.
2017-01-12 03:06:35 +01:00
Yann Collet
b05c4828ea
zstdmt : correctly check for cctx and buffer allocation
...
Result from getBuffer and getCCtx could be NULL when allocation fails.
Now correctly checks : job creation stop and last job reports an allocation error.
releaseBuffer and releaseCCtx are now also compatible with NULL input.
Identified a new potential issue :
when early job fails, later jobs are not collected for resource retrieval.
2017-01-12 02:01:28 +01:00
Yann Collet
107bcbbbc2
zstdmt : changed internal naming from frame to chunk
...
Since the result of mt compression is a single frame,
changed naming, which implied the concatenation of multiple frames.
minor : ensures that content size is written in header
2017-01-12 01:25:46 +01:00
Yann Collet
5eb749e734
ZSTDMT_compress() creates a single frame
...
The new strategy involves cutting frame at block level.
The result is a single frame, preserving ZSTD_getDecompressedSize()
As a consequence, bench can now make a full round-trip,
since the result is compatible with ZSTD_decompress().
This strategy will not make it possible to decode the frame with multiple threads
since the exact cut between independent blocks is not known.
MT decoding needs further discussions.
2017-01-11 18:21:25 +01:00
Yann Collet
04cbc36499
minor refactor (release CCtx 1st) and comment clarification
2017-01-11 16:08:08 +01:00
Yann Collet
085179bb78
fixed ZSTDMT_createCCtx() : checked inner objects are properly created
2017-01-11 15:58:05 +01:00
Yann Collet
8ce1cc2bec
improved ZSTD_createCCtxPool() cancellation
...
use ZSTD_freeCCtxPool() to release the partially created pool.
avoids to duplicate logic.
Also : identified a new difficult corner case :
when freeing the Pool, all CCtx should be previously released back to the pool.
Otherwise, it means some CCtx are still in use.
There is currently no clear policy on what to do in such a case.
Note : it's supposed to never happen.
Since pool creation/usage is static, it has no external user,
which limits risks.
2017-01-11 15:44:26 +01:00
Yann Collet
47557ba2b2
fixed ZSTDMT_createCCtxPool() when inner CCtx creation fails
2017-01-11 15:35:56 +01:00
Yann Collet
f1cb55192c
fixed linux warnings
2017-01-02 01:11:55 +01:00
Yann Collet
0ec6a95ba1
minor fixes
2017-01-02 00:49:42 +01:00
Yann Collet
2ec635a162
use pthread_cond to send signals between threads
2017-01-01 17:31:33 +01:00
Yann Collet
3b9d434356
extended ZSTDMT code support for non-MT systems and WIN32 (preliminary)
2016-12-31 16:32:19 +01:00
Yann Collet
c8efc1c874
simplified Buffer Pool
2016-12-31 14:45:33 +01:00
Yann Collet
3b29dbd9e8
new zstdmt version using generic treadpool
2016-12-31 06:04:25 +01:00
Yann Collet
c6a6417458
bench correctly measures time for multi-threaded compression (posix only)
2016-12-31 03:31:26 +01:00
Yann Collet
e70912c72b
Changed : input divided into roughly equal parts.
...
Debug : can measure time waiting for mutexes to unlock.
2016-12-29 01:24:01 +01:00
Yann Collet
6c0ed9483a
compression threads use ZSTD_compressCCtx()
2016-12-28 17:08:28 +01:00
Yann Collet
ce9e1452fd
protect buffer pool with a mutex
2016-12-28 15:31:19 +01:00
Yann Collet
3d93f2fce7
first zstdmt sketch
2016-12-27 07:19:36 +01:00
Yann Collet
aca113f4f5
fixed ZSTD_sizeof_?Dict()
2016-12-23 22:25:03 +01:00
Yann Collet
4e5eea61a8
added ZSTD_createDDict_byReference()
2016-12-21 16:44:35 +01:00
Yann Collet
1f57c2ed32
added : ZSTD_createCDict_byReference()
2016-12-21 16:20:11 +01:00
Nick Terrell
8157a4c3cc
Fix dictionary loading bug causing an MSAN failure
...
Offset rep codes must be in the range `[1, dictSize)`.
Fix dictionary loading to reject `0` as a offset rep code.
2016-12-20 10:47:52 -08:00
Yann Collet
d564faa3c6
fix : ZSTD_initCStream_srcSize() correctly set srcSize in frame header
2016-12-18 21:39:15 +01:00
Yann Collet
e795c8a5f6
Added ZSTD_initCStream_srcSize().
...
Added relevant test cases in zstreamtest
2016-12-13 17:00:14 +01:00
Yann Collet
c3a5c4bef8
introduced cycleLog
2016-12-12 00:47:30 +01:00
Yann Collet
c261f71f6a
minor variation of rescale fix
2016-12-12 00:25:07 +01:00
Nick Terrell
3826207a70
Simplify segfault fix
...
Take advantage of the fact that `chainLog <= windowLog`.
2016-12-10 18:46:55 -08:00
Nick Terrell
0012332ce0
Fix compression segfault
...
When the overflow protection kicks in, it makes sure that ip - ctx->base
isn't too large. However, it didn't ensure that saved offsets are
still valid. This change ensures that any valid offsets (<= windowLog)
are still representable after the update.
The bug would shop up on line 1056, when `offset_1 > current + 1`, which
causes an underflow. This in turn, would cause a segfault on line 1063.
The input must necessarily be longer than 1 GB for this issue to occur.
Even then, it only occurs if one of the last 3 matches is larger than
the chain size and block size.
2016-12-09 17:15:33 -08:00
Yann Collet
825dffbc43
moved zbuff source files into lib/deprecated
2016-12-05 19:28:19 -08:00
Yann Collet
a0d742b1e4
introduced HUF_buildCTable_wksp(), to reduce stack memory usage
2016-12-01 17:47:30 -08:00
Yann Collet
643d9a234b
replaced usage of FSE_buildCTable by FSE_buildCTable_wksp, using less stack space in the process
2016-12-01 16:24:04 -08:00
Yann Collet
e928f7e16d
introduced ext_wksp variants of count to reduce stack memory usage
2016-12-01 16:13:35 -08:00
Yann Collet
979cab412b
fixed some minor visual silent cast warnings.
...
introduced FSE_count_parallel_wksp().
2016-11-30 18:10:38 -08:00
Yann Collet
5e00b848a8
FSE_compress_wksp() uses less stack space
2016-11-30 16:46:13 -08:00
Yann Collet
d79a9a00d9
Introduced FSE_compress_wksp() and FSE_buildCTable_wksp() to reduce stack memory usage
2016-11-30 15:52:20 -08:00
Yann Collet
25f46dcc0f
minor const
2016-11-29 16:59:27 -08:00
Przemyslaw Skibinski
fc4193bda5
fixed g++ warnings
2016-11-23 18:17:18 +01:00
Przemyslaw Skibinski
9ca65af810
zstd_opt.h: improved price function
2016-11-23 17:22:54 +01:00
Przemyslaw Skibinski
ad3e94512c
fixed warnings from static analyzer in zstd_opt.h
2016-11-21 20:22:12 +01:00
Przemyslaw Skibinski
3d18088b38
updated windres
2016-11-17 18:04:41 +01:00
Yann Collet
407a11f63e
fixed Visual compatibility
2016-11-03 15:52:01 -07:00
Nick Terrell
d82efd8a70
ZSTD_compress_usingDict() when dict gets loaded
...
Specify that when `dict == NULL || dictSize < 8` no dictionary
gets loaded.
Also add some periods.
2016-11-02 18:07:16 -07:00
Yann Collet
ee5b725823
ZSTD_initCStream() optimization : do not allocate a CDict when no dictionary used
2016-10-27 14:20:55 -07:00
Yann Collet
335ad5d4d4
added ZSTD_initDStream_usingDDict() .
...
slightly optimized ZSTD_initDStream() when no dictionary .
fixed ZSTD_sizeof_CStream() .
2016-10-25 17:47:02 -07:00
Yann Collet
9516234e67
first sketch for ZSTD_initCStream_usingCDict()
2016-10-25 16:19:52 -07:00
Yann Collet
62d9a7ddfd
Merge pull request #429 from inikep/btopt2
...
Btopt2
2016-10-25 14:48:43 -07:00
Przemyslaw Skibinski
5c5f01f3da
added ZSTD_btopt2 strategy
2016-10-25 12:25:07 +02:00
Nick Terrell
b2c39a22b0
Fix compiler narrowing warning
2016-10-24 14:50:13 -07:00
Nick Terrell
f698ad6deb
Merge remote-tracking branch 'upstream/dev' into fixes
...
* upstream/dev:
added doc\zstd_manual.html
added contrib\gen_html
zstd_compression_format.md moved to doc/
Fix small bug in ZSTD_execSequence()
improved ZSTD_compressBlock_opt_extDict_generic
protect ZSTD_decodeFrameHeader() from invalid usage, as suggested by @spaskob
zstd_opt.h: small improvement in compression ratio
improved dicitonary segment merge
use implicit rules to compile zstd_decompress.c
detect early impossible decompression scenario in legacy decoder v0.5
no repeat mode in legacy v0.5
fixed invalid invocation of dictionary in legacy decoder v0.5
fix edge case
fix command line interpretation
fixed minor corner case
zstd.h: added the Introduction section
fixed clang 3.5 warnings
zstd.h: updated comments
2016-10-24 13:10:13 -07:00
Nick Terrell
f9c9af3c2e
Reject dictionaries with incomplete entropy tables
...
If a dictionary specifies that a symbol has probability zero in its
`matchLength`, `literalLength`, or `offset` FSE table, but the symbol
appears when compressing input, the compressor fails.
Ensure that dictionaries support all `matchLength`, and `literalLength`
codes. They must also support all of the `offset` codes required to
represent every possible offset that can appear in the first block.
2016-10-24 10:42:44 -07:00
Przemyslaw Skibinski
3ee94a7600
zstd_compression_format.md moved to doc/
2016-10-24 15:58:07 +02:00
Przemyslaw Skibinski
4732074a71
improved ZSTD_compressBlock_opt_extDict_generic
2016-10-21 11:19:00 +02:00
Przemyslaw Skibinski
d365ae3497
zstd_opt.h: small improvement in compression ratio
2016-10-20 11:49:02 +02:00
Yann Collet
197a55ee7b
fix edge case
2016-10-18 11:27:52 -07:00
Nick Terrell
fd98087047
Fix stack buffer overflow in HUF_readCTable()
...
If `w ==0` on line 153, then `CTable[n].nbBits == tableLog + 1`.
Then `nbPerRank[CTable[n].nbBits]` and `valPerRank[CTable[n].nbBits]`
are stack buffer overflows.
2016-10-17 18:16:59 -07:00
Nick Terrell
bfd943ace5
Fix buffer overrun in ZSTD_loadDictEntropyStats()
...
The table log set by `FSE_readNCount()` was not checked in
`ZSTD_loadDictEntropyStats()`. This caused `FSE_buildCTable()`
to stack/heap overflow in a few places.
The benchmarks look good, there is no obvious compression performance regression:
> ./zstds/zstd.opt.0 -i10 -b1 -e10 ~/bench/silesia.tar
1#silesia.tar : 211988480 -> 73656930 (2.878), 271.6 MB/s , 716.8 MB/s
2#silesia.tar : 211988480 -> 70162842 (3.021), 204.8 MB/s , 671.1 MB/s
3#silesia.tar : 211988480 -> 66997986 (3.164), 156.8 MB/s , 658.6 MB/s
4#silesia.tar : 211988480 -> 66002591 (3.212), 136.4 MB/s , 665.3 MB/s
5#silesia.tar : 211988480 -> 65008480 (3.261), 98.9 MB/s , 647.0 MB/s
6#silesia.tar : 211988480 -> 62979643 (3.366), 65.2 MB/s , 670.4 MB/s
7#silesia.tar : 211988480 -> 61974560 (3.421), 44.9 MB/s , 688.2 MB/s
8#silesia.tar : 211988480 -> 61028308 (3.474), 32.4 MB/s , 711.9 MB/s
9#silesia.tar : 211988480 -> 60416751 (3.509), 21.1 MB/s , 718.1 MB/s
10#silesia.tar : 211988480 -> 60174239 (3.523), 22.2 MB/s , 721.8 MB/s
> ./compress_zstds/zstd.opt.1 -i10 -b1 -e10 ~/bench/silesia.tar
1#silesia.tar : 211988480 -> 73656930 (2.878), 273.8 MB/s , 722.0 MB/s
2#silesia.tar : 211988480 -> 70162842 (3.021), 203.2 MB/s , 666.6 MB/s
3#silesia.tar : 211988480 -> 66997986 (3.164), 157.4 MB/s , 666.5 MB/s
4#silesia.tar : 211988480 -> 66002591 (3.212), 132.1 MB/s , 661.9 MB/s
5#silesia.tar : 211988480 -> 65008480 (3.261), 96.8 MB/s , 641.6 MB/s
6#silesia.tar : 211988480 -> 62979643 (3.366), 63.1 MB/s , 677.0 MB/s
7#silesia.tar : 211988480 -> 61974560 (3.421), 44.3 MB/s , 678.2 MB/s
8#silesia.tar : 211988480 -> 61028308 (3.474), 33.1 MB/s , 708.9 MB/s
9#silesia.tar : 211988480 -> 60416751 (3.509), 21.5 MB/s , 710.1 MB/s
10#silesia.tar : 211988480 -> 60174239 (3.523), 21.9 MB/s , 723.9 MB/s
2016-10-17 16:55:52 -07:00
Yann Collet
2b361cf2f1
minor opt
2016-10-14 16:09:07 -07:00
Nick Terrell
3b9cdf9220
Fix ubsan failures (pass NULL to memcpy)
2016-10-12 20:54:42 -07:00
Yann Collet
cf409a7e2a
fixed : init*_advanced() followed by reset() with different pledgedSrcSiz
2016-09-26 16:41:05 +02:00
Yann Collet
97b378a6f8
Streaming : dictionary compression on multiple files / segments can correctly provide srcSize into header (when provided) using pledgedSrcSize.
2016-09-21 17:20:19 +02:00
Yann Collet
993060e0f2
cli : better adaptation to small files
2016-09-21 16:46:08 +02:00
Yann Collet
a6bdf55759
fixed memory leak
2016-09-15 17:02:06 +02:00
Yann Collet
644a8da88a
fixed minor conversion warning
2016-09-15 16:16:21 +02:00
Yann Collet
4cb212938c
introduced ZSTD_resetCStream()
2016-09-15 14:54:07 +02:00
Yann Collet
fa0c09760c
variable renaming
2016-09-15 14:11:01 +02:00
Yann Collet
d7c6589df8
support ZSTD_sizeof_*() on NULL
...
added ZSTD_sizeof_CDict()
2016-09-15 02:57:27 +02:00
Yann Collet
64deef3bee
Fixed srcSize=1
2016-09-14 00:16:07 +02:00
Yann Collet
ac8bace6b1
support large skippable frames
2016-09-07 14:54:23 +02:00
Yann Collet
95d07d7447
introduced CHECK_E
2016-09-06 16:38:51 +02:00
Yann Collet
3e21ec5b01
introduced CHECK_F
2016-09-06 15:36:19 +02:00
Yann Collet
5c956d593c
FORCE_INLINE common definition
2016-09-06 15:05:19 +02:00
Yann Collet
edbcd9f5b2
fixed zbufftest
2016-09-06 14:30:57 +02:00
Yann Collet
b624922b14
fixed checksum
2016-09-06 11:16:57 +02:00
Yann Collet
a7737f6a60
improved compression on small files when using same parameters
2016-09-06 09:44:59 +02:00
Yann Collet
7ae67bb18a
small compression speed gains with using_CDict
2016-09-06 06:28:05 +02:00
Yann Collet
855766d73d
clarified dictionary in format description
2016-09-02 17:04:49 -07:00
Yann Collet
1563bfeabc
fixing FORCE_INLINE for older compilers ( #330 )
2016-09-02 11:44:21 -07:00
David Lam
e10f7f3dcb
merge
2016-08-30 12:03:36 -07:00
Yann Collet
4ded9e591c
added boilerplate
2016-08-30 11:06:28 -07:00
Yann Collet
14200a20f0
Fixed issue #304 , reported by @borzunov
2016-08-30 06:51:00 -07:00
David Lam
da9d3b7057
Cleanup some errors in typedef comments and remove duplicated HOWTO from zbuff_decompress.c
2016-08-29 17:31:51 -07:00
Yann Collet
23b6e05d8e
ZSTD_malloc() and ZSTD_free(), to simplify customMem
2016-08-28 21:05:43 -07:00
Yann Collet
e19a9ef05d
update compression level table
2016-08-26 20:02:49 +02:00
Yann Collet
87c18b2ebd
fixed multiple minor warnings for XCode
2016-08-26 01:43:47 +02:00
Yann Collet
0d59a6f73a
removed debug strings
2016-08-25 22:42:46 +02:00
Yann Collet
5a02b69215
reinforced fix for huge files
2016-08-25 22:24:59 +02:00
Yann Collet
96bdd87de4
fixed : compression bug on very large files
2016-08-25 14:34:42 +02:00
inikep
a3a47ec4d0
Merge remote-tracking branch 'refs/remotes/Cyan4973/dev' into Other
2016-08-24 21:25:49 +02:00
Yann Collet
a2cdffe556
fixed wrong parameter issue
2016-08-24 19:42:15 +02:00
inikep
e416e30019
remove unnecessary comments
2016-08-24 17:32:09 +02:00
inikep
4e90f6c1e0
removed ZSTD_LOG_ENCODE and ZSTD_LOG_BLOCK
2016-08-24 17:24:11 +02:00
inikep
83388e109f
removed ZSTD_LOG_PARSER
2016-08-24 17:22:20 +02:00
inikep
8a36f8527c
removed stats in debug mode
2016-08-24 17:19:12 +02:00
Yann Collet
24b68a5b23
update cLevel table for 256KB
2016-08-24 14:22:26 +02:00
Yann Collet
c54692faeb
improved level 3
2016-08-24 01:45:46 +02:00
Yann Collet
70e3b31306
fixed playtests on os-x
2016-08-23 01:18:06 +02:00
Yann Collet
cb3276329a
added sizeof CStream and DStream
2016-08-23 00:31:59 +02:00
Yann Collet
d1733f7417
fixed crc bug in rare timing conditions within bench.c
2016-08-21 01:04:46 +02:00
Yann Collet
c411902230
fixed g++ conversion warning
2016-08-17 01:50:54 +02:00
Yann Collet
53e17fbd5e
updated streaming API
2016-08-17 01:39:22 +02:00
Yann Collet
104e5b072d
added : streaming decompression API
2016-08-16 15:11:28 +02:00
Yann Collet
5a0c8e2439
new streaming API (compression)
2016-08-16 15:11:27 +02:00
inikep
5f49eba512
added usage of rep[0]-1 for the optimal parser
2016-08-10 15:01:53 +02:00
inikep
98e08cbe34
fixed: tree not updated after finding very long rep matches
2016-08-10 15:00:30 +02:00
Yann Collet
280f9a8754
minor comment
2016-08-08 00:44:00 +02:00
Yann Collet
0763905f44
ZSTD_compress_usingCDict() correctly provides original size by default in frame header
...
Fixed dictionary examples
2016-08-03 01:57:57 +02:00
Yann Collet
346efccc35
fixed doc typo
2016-08-02 14:26:00 +02:00
Yann Collet
c55eb18c11
Merge pull request #267 from inikep/dev08
...
fixed ZSTD_compressBlock_opt_extDict_generic
2016-07-31 22:00:16 +02:00
inikep
056df510aa
fixed ZSTD_compressBlock_opt_extDict_generic
2016-07-31 20:08:53 +02:00
Yann Collet
917fe188f1
Implemented repOffset "minus 1" on ll==0
2016-07-31 04:01:57 +02:00
Yann Collet
3b2bd1d11c
zstd_opt uses same tables as zstd_compress
2016-07-30 13:21:41 +02:00
Yann Collet
3c6b808870
minor decompression speed gains
2016-07-30 03:20:47 +02:00
Yann Collet
c0ce4f1211
slightly improved compression speed
2016-07-30 00:55:13 +02:00
Yann Collet
ed57d8530a
new seqStore
2016-07-29 21:22:17 +02:00
Yann Collet
c00d30fbe4
Merge pull request #264 from inikep/dev08
...
Dev08
2016-07-29 17:42:30 +02:00
inikep
6b68ba2079
zstd_opt.h: fixed checking of rep codes (2)
2016-07-29 16:45:39 +02:00
inikep
59b86fc141
zstd_opt.h: fixed checking of rep codes
2016-07-29 11:00:33 +02:00
Yann Collet
60ba31c570
zbuff uses ZSTD_compressEnd()
2016-07-28 19:55:09 +02:00
Yann Collet
16e73033ad
introduced stage zbf_end
2016-07-28 16:32:34 +02:00
Yann Collet
62470b4bab
Changed ZSTD_compressEnd()
2016-07-28 15:29:08 +02:00
Yann Collet
19c1002e46
applied ZSTD_compressContinueThenEnd()
2016-07-28 01:25:46 +02:00
Yann Collet
5b56739b63
created ZSTD_compressContinueThenEnd()
2016-07-28 01:17:22 +02:00
Yann Collet
c991cc1828
new frame end, 32-bits checksums
2016-07-28 00:55:43 +02:00
Yann Collet
d4180cad9c
minor code refactoring
2016-07-27 21:21:36 +02:00
Yann Collet
731ef16fc1
minor code style refactoring
2016-07-27 21:05:12 +02:00
Yann Collet
4110534886
ZSTD_maxCLevel() is promoted to "stable" API ( #254 , by @FrancescAlted)
2016-07-27 15:09:11 +02:00
Yann Collet
c154d9d6a2
better support for large dictionaries (> 128 KB)
2016-07-27 14:37:00 +02:00
inikep
003c7a8568
optimal parser: removed ZSTD_REP_INIT
2016-07-27 11:07:13 +02:00
Eric Biggers
e4d0265ea9
Replace remaining references to "direct mode" with "single segment mode"
2016-07-26 13:22:27 -07:00
Yann Collet
38b75ddeb2
removed special case all-1 huffman distribution
2016-07-24 15:35:59 +02:00
Yann Collet
7ed5e33b89
minor comment changes
2016-07-24 14:26:11 +02:00
Yann Collet
f8e7b5363f
unified encoding types
2016-07-23 16:31:49 +02:00
Yann Collet
c2e1a68d81
changed streamNb order to 1-4-4-4
2016-07-22 17:30:52 +02:00
Yann Collet
32faf6c8e7
fixed conversion warnings
2016-07-22 14:37:09 +02:00
Yann Collet
198e6aac44
Literals header fields use little endian convention
2016-07-22 14:37:09 +02:00
Yann Collet
6fa05a2371
cBlockSize uses little-endian convention
2016-07-22 14:37:09 +02:00
Yann Collet
5894ea8d01
updated cLevels
2016-07-22 14:36:46 +02:00
Yann Collet
d5c5a77990
minor comments clarifications
2016-07-20 13:35:14 +02:00
Yann Collet
cf05b9d477
ZSTD_getBlockSizeMax()
2016-07-18 16:52:10 +02:00
Yann Collet
e557fd5e92
minor compression level corrections
2016-07-17 16:21:37 +02:00
Yann Collet
6cacd34d44
minor formatting changes
2016-07-15 17:58:13 +02:00
Yann Collet
98c8884999
added target zstd in root Makefile
2016-07-15 16:12:38 +02:00
Yann Collet
961b6a0e34
ZSTD_compressBlock() limits block size depending on windowLog parameter
2016-07-15 11:58:49 +02:00
Yann Collet
227cc39e15
improved efficiency for large messages with small dictionaries
2016-07-15 11:27:09 +02:00
Yann Collet
ea2ecdc315
fixed issue with small dictionary
2016-07-14 23:27:31 +02:00
Yann Collet
b23e1ce319
removed debugging traces
2016-07-14 17:46:38 +02:00
Yann Collet
8847238cac
simplified ZSTD_estimateCCtxSize()
2016-07-14 17:05:38 +02:00
Yann Collet
69c2cdb45c
fixed conversion warning
2016-07-14 16:52:45 +02:00
Yann Collet
5e80dd3261
fixed minor coverity warnings
2016-07-13 19:21:57 +02:00
Yann Collet
2b1a3638e6
changed macro name to ZSTDCLI_CLEVEL_DEFAULT
2016-07-13 15:16:00 +02:00
Yann Collet
3c242e79d3
updated compression levels table
2016-07-13 14:56:24 +02:00
Yann Collet
eed2081e55
fixed conversion warning
2016-07-12 15:11:40 +02:00
Yann Collet
a43a854cdb
updated paramgrill
2016-07-12 13:42:10 +02:00
Yann Collet
73d74a05b9
fixed dfast strategy
2016-07-12 13:03:48 +02:00
Yann Collet
45dc35628c
first version of doubleFast
2016-07-12 09:47:31 +02:00
Yann Collet
3ae543ce75
added ZSTD_estimateCCtxSize()
2016-07-11 03:12:17 +02:00
Yann Collet
e09d38e921
removed mem.h
dependency from zbuff.h
(experimental section)
2016-07-07 13:17:37 +02:00
Yann Collet
52c04fe58f
removed mem.h
dependency from zstd.h
(experimental section)
2016-07-07 11:53:18 +02:00
Yann Collet
d57dffbe76
ZSTD_storeSeq takes an U32 as offset type
2016-07-03 01:48:26 +02:00
Yann Collet
302ff036f6
simplified repcodes for lazy_extDict
2016-07-03 01:28:16 +02:00
Yann Collet
9634f67107
fix lazy parser
2016-07-03 01:23:58 +02:00
Yann Collet
92d75667e4
fix for fast mode
2016-07-03 01:10:53 +02:00
Yann Collet
5e734ad09b
revert fix
2016-07-02 23:55:34 +02:00
Yann Collet
0d5bf8f06f
fixed risk of segfault on very large files (multiple GB)
2016-07-02 21:39:47 +02:00
Yann Collet
2fa9904844
update specification and comments
2016-07-01 20:55:28 +02:00
Yann Collet
c093208ab8
fix : potential leak ( #229 )
2016-06-30 14:07:30 +02:00
Yann Collet
6c6e1751f6
use ZSTD_getParams() to simplify code
2016-06-27 15:28:45 +02:00
Yann Collet
3d2cd7f816
Introduced ZSTD_getParams()
...
bench now uses ZSTD_createCDict_advanced()
2016-06-27 15:12:26 +02:00
Yann Collet
d4f4e58ee1
fixed ZSTD_decompressBlock() using multiple blocks
2016-06-27 01:31:35 +02:00
Yann Collet
3755eb8fea
fixed strict-aliasing warning on gcc6
2016-06-22 13:15:53 +02:00
Yann Collet
391a128794
fix : segfault in command line during automatic overwrite protection mode
2016-06-21 17:06:25 +02:00
Yann Collet
bda68c253b
refactored ZBUFF_compressEnd() for better maintainability
2016-06-21 15:18:11 +02:00
Yann Collet
aa29226b7c
fix : ZBUFF_compressEnd() gives right amount remaining to flush, including future epilogue
2016-06-21 14:04:57 +02:00
Yann Collet
f15c1cb00c
Fixed : ZBUFF_compressEnd() called multiple times with too small dst buffer ( #206 )
2016-06-21 13:11:48 +02:00
Yann Collet
22d76322ce
minor refactor
2016-06-21 08:01:51 +02:00
Yann Collet
a436a529bc
minor : fast_extDict does no longer skip first byte
2016-06-20 23:34:04 +02:00
Yann Collet
4623d11571
new correction, less extreme replacement value
2016-06-20 19:15:37 +02:00
Yann Collet
5477cc25f7
fixed corruption error related to inter-blocks rep-offset
2016-06-20 18:31:25 +02:00
Yann Collet
06d9a73b48
minor refactor, using WILDCOPY_OVERLENGTH
macro instead of hard-coded 8
2016-06-19 14:27:21 +02:00
Yann Collet
19cab46f2f
Joined seqStore
initialization at dispatch point
2016-06-17 12:54:52 +02:00
Yann Collet
23ba41533a
Fixed zstd_opt encoding error with repeat-offsets
2016-06-16 13:20:46 +02:00
Yann Collet
736d419289
strengthened dict loading on decompresson side
2016-06-16 01:05:04 +02:00
Yann Collet
52a0622beb
RepsCodes are saved into Dict
...
(uncomplete : need decompression to regenerate them)
2016-06-16 01:05:04 +02:00
Yann Collet
efd0b4993a
fixed fuzzer error (inter-block repeated offsets)
2016-06-16 00:53:56 +02:00
Yann Collet
d059092897
fixed conversion warnings
2016-06-14 15:34:24 +02:00
Yann Collet
45c03c564f
fixed corruption with inter-blocks repeated offsets
2016-06-14 13:46:11 +02:00
Yann Collet
4266c0a2fd
adding inter-blocks rep-offsets
2016-06-14 01:49:25 +02:00
Yann Collet
43dfe01919
Check repIndex
for validity
2016-06-13 21:43:06 +02:00
Yann Collet
9dd12742f3
litBlockType_t
is an enum
2016-06-10 00:12:26 +02:00
Yann Collet
302fb53a76
Removed ZSTD_*_usingPrepared?Ctx()
declaration from public space
2016-06-07 12:16:49 +02:00
Yann Collet
81e13ef7cf
first implementation of the new dictionary API (untested)
2016-06-07 00:51:51 +02:00
Yann Collet
2cc72f1fd3
fixed initialization issue in bench
2016-06-06 17:50:07 +02:00
Yann Collet
e3d529403d
fixed initialization mismatch in ZSTD_copyCCtx()
2016-06-06 11:07:33 +02:00
Yann Collet
142acbdea7
fixed minor visual conversion warning
2016-06-06 00:46:56 +02:00
Yann Collet
673f0d7cdc
new frame format, allowing custom window size
2016-06-06 00:26:38 +02:00
Yann Collet
d0e2cd15cb
Merged fse_static
into fse.h
. Now requires FSE_STATIC_LINKING_ONLY
macro.
2016-06-05 00:58:01 +02:00
Yann Collet
130fe11394
merged huf_static.h
into huf.h
. Requires HUF_STATIC_LINKING_ONLY
macro.
2016-06-05 00:42:28 +02:00
Yann Collet
dc048d18d3
minor comment (detailing an #include
motivation)
2016-06-05 00:32:23 +02:00
Yann Collet
49bb0041af
removed ZSTD_highbit()
from zstd_internal.h
, as it is only used by zstd_compress.c
2016-06-04 20:17:38 +02:00
Yann Collet
d3b7f8d21f
Merged zstd_static.h
into zstd.h
. Now requires ZSTD_STATIC_LINKING_ONLY
macro
2016-06-04 19:47:02 +02:00
Yann Collet
ac110a1f21
Removed ZBUFF internal util function from public area
2016-06-04 19:16:49 +02:00
Yann Collet
5347aee8f7
merged zbuff_static.h
into zbuff.h
. Now requires ZBUFF_STATIC_LINKING_ONLY
macro
2016-06-04 19:12:48 +02:00
Yann Collet
f4f5affdf7
restore ZBUFF full-block-size, for better performance on small input
2016-06-03 23:09:28 +02:00
inikep
3640396b1a
fixed: deallocation of structures in case of error in ZBUFF_createCCtx and ZBUFF_createDCtx
2016-06-03 16:36:50 +02:00
inikep
3763c77f6b
defaultCustomNULL replaced with defaultCustomMem
2016-06-03 13:28:20 +02:00
inikep
36fac00149
removed calloc calls from lib/
2016-06-03 13:23:04 +02:00
inikep
db2f540414
added defaultCustomNULL
2016-06-03 12:56:56 +02:00
inikep
b74a468fad
Merge remote-tracking branch 'refs/remotes/Cyan4973/dev070' into dev070
2016-06-02 22:09:09 +02:00