Yann Collet [Tue, 27 Feb 2018 00:40:32 +0000 (16:40 -0800)]
Merge pull request #479 from lz4/check
added target make check
Yann Collet [Mon, 26 Feb 2018 22:09:46 +0000 (14:09 -0800)]
added target make check
according to GNU Makefile conventions,
the Makefile should feature a make check target
to self-test the generated program:
https://www.gnu.org/prep/standards/html_node/Standard-Targets.html .
this is much less thorough and less taxing than `make test`,
and can be run on any target in a reasonable timeframe (several seconds).
Yann Collet [Mon, 26 Feb 2018 22:06:31 +0000 (14:06 -0800)]
Merge pull request #478 from lz4/mergeOpt
merge lz4opt.h into lz4hc.c
Yann Collet [Mon, 26 Feb 2018 21:50:04 +0000 (13:50 -0800)]
bumped version number to v1.8.2
updated NEWS was current progresses
Yann Collet [Mon, 26 Feb 2018 21:31:18 +0000 (13:31 -0800)]
update code comment on LZ4 streaming interface
notably regarding LZ4_saveDict() speed advantage,
answering #477.
Yann Collet [Mon, 26 Feb 2018 20:29:54 +0000 (12:29 -0800)]
Merge pull request #476 from lz4/mflimit
edge case fix : compress up to end-mflimit (12 bytes)
Yann Collet [Sun, 25 Feb 2018 08:32:09 +0000 (00:32 -0800)]
merge lz4opt.h into lz4hc.c
Having a dedicated file for optimal parser
made sense during its creation,
it allowed Przemyslaw to work more freely on lz4opt, with less dependency on lz4hc,
moreover, the optimal parser was more complex, with its own search functions.
Since the optimal was rewritten last year, it's now a lot lighter.
It makes more sense now to integrate it directly inside lz4hc.c,
making it easier to edit (editors are a bit "lost" inside a `*.h` dependent on its #include position),
it also reduces the number of files in the project,
which fits pretty well with lz4 objectives.
(adding lz4hc requires "just" lz4hc.h and lz4hc.c).
Yann Collet [Sat, 24 Feb 2018 19:47:53 +0000 (11:47 -0800)]
edge case : compress up to end-mflimit (12 bytes)
The LZ4 block format specification
states that the last match must start
at a minimum distance of 12 bytes from the end of the block.
However, out of an abundance of caution,
the reference implementation would actually stop searching matches
at 13 bytes from the end of the block.
This patch fixes this small detail.
The new version is now able to properly compress a limit case
such as `
aaaaaaaabaaa\n`
as reported by Gao Xiang (@hsiangkao).
Obviously, it doesn't change a lot of things.
This is just one additional match candidate per block, with a maximum match length of 7 (since last 5 bytes must remain literals).
With default policy, blocks are 4 MB long, so it doesn't happen too often
Compressing silesia.tar at default level 1 saves 5 bytes (
100930101 ->
100930096).
At max level 12, it saves a grand 16 bytes (
77389871 ->
77389855).
The impact is a bit more visible when blocks are smaller, hence more numerous.
For example, compressing silesia with blocks of 64 KB (using -12 -B4D) saves 543 bytes (
77304583 ->
77304040).
So the smaller the packet size, the more visible the impact.
And it happens we have a ton of scenarios with little blocks using LZ4 compression ...
And a useless "hooray" sidenote :
the patch improves the LZ4 compression record of silesia (using -12 -B7D --no-frame-crc) by 16 bytes (
77270672 ->
77270656)
and the record on enwik9 by 44 bytes (
371680396 ->
371680352) (previously claimed by [smallz4](http://create.stephan-brumme.com/smallz4/) ).
Yann Collet [Wed, 21 Feb 2018 13:48:58 +0000 (05:48 -0800)]
Merge pull request #475 from lz4/betterBench
Better bench measurements for small inputs
Yann Collet [Wed, 21 Feb 2018 05:04:07 +0000 (21:04 -0800)]
Merge pull request #471 from lz4/fasterHC
Faster HC
Yann Collet [Tue, 20 Feb 2018 23:26:59 +0000 (15:26 -0800)]
use TIMELOOP_NANOSEC,
as suggested by @terrelln
Yann Collet [Tue, 20 Feb 2018 23:25:45 +0000 (15:25 -0800)]
added one assert()
suggested by @terrelln
Yann Collet [Tue, 20 Feb 2018 22:13:13 +0000 (14:13 -0800)]
fixed minor conversion warning
Yann Collet [Tue, 20 Feb 2018 21:05:22 +0000 (13:05 -0800)]
ensure bench speed measurement is more accurate for small inputs
Previous method would produce too many time() invocations,
becoming a significant fraction of workload measured.
The new strategy is to use time() only once per batch,
and dynamically resize batch size so that each round lasts approximately 1 second.
This only matters for small inputs.
Measurement for large files (such as silesia.tar) are much less impacted
(though decoding speed is so fast that even medium-size files will notice an improvement).
Yann Collet [Tue, 20 Feb 2018 19:37:19 +0000 (11:37 -0800)]
update bench.c to use less time invocations
translating into more accurate speed measurements for small sources
Yann Collet [Sun, 18 Feb 2018 19:00:33 +0000 (11:00 -0800)]
update API doc regarding double-buffer strategy
answering question #473
Yann Collet [Wed, 14 Feb 2018 21:00:50 +0000 (13:00 -0800)]
Merge pull request #472 from hobomind/dev
fix: missed semicolon at programs/lz4io.c:954
hobomind [Wed, 14 Feb 2018 15:47:56 +0000 (18:47 +0300)]
fix: missed semicolon at programs/lz4io.c:954
Yann Collet [Tue, 13 Feb 2018 00:56:45 +0000 (16:56 -0800)]
Merge pull request #470 from lz4/fasterDec
Faster decoding speed
Yann Collet [Mon, 12 Feb 2018 05:03:39 +0000 (21:03 -0800)]
slight hc speed benefit (~+1%)
by optimizing countback
Yann Collet [Mon, 12 Feb 2018 06:20:09 +0000 (22:20 -0800)]
removed LZ4_copy8
better use memcpy() directly
Yann Collet [Sun, 11 Feb 2018 10:45:36 +0000 (02:45 -0800)]
slightly improved hc compression speed (+~1-2%)
by removing bad candidates faster.
Yann Collet [Sun, 11 Feb 2018 09:42:12 +0000 (01:42 -0800)]
slightly improved decompression speed (~+1-2%)
by making shortcut slightly more common
Yann Collet [Thu, 8 Feb 2018 16:45:25 +0000 (08:45 -0800)]
Merge pull request #469 from mathstuf/intel-windows-packing-selection
intel: do not use __attribute__((packed)) on Windows
Ben Boeckel [Thu, 8 Feb 2018 14:15:07 +0000 (09:15 -0500)]
intel: do not use __attribute__((packed)) on Windows
On Windows, the Intel compiler is closer to MSVC rather than GCC and
does not support the GCC attribute syntax.
Fixes #468
Yann Collet [Wed, 7 Feb 2018 10:21:25 +0000 (02:21 -0800)]
fixed code comment as detected in #466
Also clarified a few API code comments
and updated associated html documentation
Yann Collet [Fri, 2 Feb 2018 00:14:54 +0000 (16:14 -0800)]
Merge pull request #461 from terrelln/docs
Clarify the requirements of the LZ4 streaming API
Nick Terrell [Fri, 2 Feb 2018 00:08:59 +0000 (16:08 -0800)]
Clarify the requirements of the LZ4 streaming API
Yann Collet [Thu, 1 Feb 2018 18:55:02 +0000 (10:55 -0800)]
Merge pull request #458 from lz4/ff161
Minor change to LZ4 Frame format specification
Yann Collet [Thu, 1 Feb 2018 16:53:23 +0000 (08:53 -0800)]
Merge pull request #460 from lz4/frameCompress
refactored frameCompress.c example
Yann Collet [Thu, 1 Feb 2018 10:48:20 +0000 (02:48 -0800)]
modified decompression part of frameCompress.c
using same logic as prior modifications for compression part.
Yann Collet [Thu, 1 Feb 2018 09:36:38 +0000 (01:36 -0800)]
refactored ressource allocation to avoid goto
Yann Collet [Thu, 1 Feb 2018 07:17:52 +0000 (23:17 -0800)]
examples/Makefile : changed dependency order
static library *.a must come after source files *.c on linux
Yann Collet [Thu, 1 Feb 2018 01:18:57 +0000 (17:18 -0800)]
Merge branch 'dev' into frameCompress
Yann Collet [Thu, 1 Feb 2018 01:16:48 +0000 (17:16 -0800)]
travisci : ensure "clean" betweeb 2 tests
Yann Collet [Thu, 1 Feb 2018 01:15:02 +0000 (17:15 -0800)]
modified gpptest recipe
Yann Collet [Thu, 1 Feb 2018 00:42:13 +0000 (16:42 -0800)]
Merge pull request #459 from Tyilo/clang-stdc++14
Ensure LZ4_DEPRECATED("...") is before LZ4LIB_API
Yann Collet [Thu, 1 Feb 2018 00:39:37 +0000 (16:39 -0800)]
refactored frameCompress.c example code
compression function returns a struct.
Also : nested structure ressources->computation
to make it easier to manage multiple exit points.
Yann Collet [Thu, 1 Feb 2018 00:13:02 +0000 (16:13 -0800)]
fixed read size, as noticed by @terrelln
Yann Collet [Thu, 1 Feb 2018 00:11:45 +0000 (16:11 -0800)]
ensure proper dependencies are built for /examples
also : use liblz4.a static lib to share compilation time
Yann Collet [Wed, 31 Jan 2018 22:33:16 +0000 (14:33 -0800)]
refactored frameCompress example
to better reflect LZ4F API usage.
Asger Hautop Drewsen [Wed, 31 Jan 2018 19:23:20 +0000 (20:23 +0100)]
Always prefer c++14 attributes if available
Yann Collet [Wed, 31 Jan 2018 17:54:30 +0000 (09:54 -0800)]
fix typos as suggested by @psteinb
Asger Hautop Drewsen [Wed, 31 Jan 2018 12:33:07 +0000 (13:33 +0100)]
Ensure LZ4_DEPRECATED("...") is before LZ4LIB_API
When using clang++ with std c++14 or c++17 you would get the error "an attribute list cannot appear here" when including "lz4.h" as the visibility attribute is before the c++ attribute.
This ensures that the [[deprecated]] c++ attribute is before everything
else in the function declarations.
Yann Collet [Wed, 31 Jan 2018 01:53:00 +0000 (17:53 -0800)]
proposed a minor change to LZ4 Frame format specification
add new terms "LZ4 Frame Header" and "LZ4 Frame Footer"
Yann Collet [Mon, 22 Jan 2018 21:25:49 +0000 (13:25 -0800)]
Merge pull request #455 from terrelln/hc-default
[lz4hc] level == 0 means default, not level 1
Nick Terrell [Mon, 22 Jan 2018 20:50:06 +0000 (12:50 -0800)]
[lz4hc] level == 0 means default, not level 1
Yann Collet [Wed, 17 Jan 2018 20:45:09 +0000 (12:45 -0800)]
Merge pull request #453 from lz4/clockfix
fix #450 : use more restrictive conditions for clock_gettime()
Yann Collet [Wed, 17 Jan 2018 19:29:27 +0000 (11:29 -0800)]
Merge pull request #454 from sunpoet/dev
Change file format back to ASCII (from UTF-8)
Po-Chuan Hsieh [Wed, 17 Jan 2018 19:13:05 +0000 (03:13 +0800)]
Change file format back to ASCII (from UTF-8)
- Replace U+00A0 by space
- Fix build failure of archivers/py-borgbackup in FreeBSD
Reference: https://bugs.FreeBSD.org/225235
Yann Collet [Tue, 16 Jan 2018 18:21:37 +0000 (10:21 -0800)]
use more restrictive conditions for clock_gettime()
Yann Collet [Mon, 15 Jan 2018 00:57:25 +0000 (16:57 -0800)]
added checkTag
checkTag verifies that provided tag and library version match.
It's started automatically in circleCI when a new tag is created.
Yann Collet [Sun, 14 Jan 2018 08:21:43 +0000 (00:21 -0800)]
restored .travis
Yann Collet [Sun, 14 Jan 2018 08:15:07 +0000 (00:15 -0800)]
lz4frame : removed some intermediate stage from LZ4F_decompress()
ensure some strange jump cases are not possible
(they were already not possible, but static analyzer couldn't understand it).
Yann Collet [Sun, 14 Jan 2018 06:58:09 +0000 (22:58 -0800)]
Merge branch 'dev' into coverity_scan
Yann Collet [Sun, 14 Jan 2018 06:52:17 +0000 (22:52 -0800)]
minor : try to tell static analyzer that we don't care if fseek() fails
as already explained in comments.
Yann Collet [Sun, 14 Jan 2018 06:47:46 +0000 (22:47 -0800)]
ensure a ptr is non-null
with an assert()
to help static analyzer understanding this condition.
Yann Collet [Sun, 14 Jan 2018 06:39:39 +0000 (22:39 -0800)]
modified formulation for LZ4F_compressBound()
previous version used an intentional overflow,
which is defined since it uses unsigned type,
but static analyzer complain about it.
Yann Collet [Sun, 14 Jan 2018 06:24:32 +0000 (22:24 -0800)]
programs/datagen : attempt to please static analyzer
with an assert()
to reduce false positive
Yann Collet [Sun, 14 Jan 2018 06:18:04 +0000 (22:18 -0800)]
lz4io: fixed minor ressource leak
Yann Collet [Sun, 14 Jan 2018 05:40:04 +0000 (21:40 -0800)]
revert project name
Yann Collet [Sun, 14 Jan 2018 05:14:36 +0000 (21:14 -0800)]
minor name update
Yann Collet [Sun, 14 Jan 2018 05:09:02 +0000 (21:09 -0800)]
Merge branch 'master' into coverity_scan
Yann Collet [Sun, 14 Jan 2018 04:56:14 +0000 (20:56 -0800)]
Merge pull request #449 from lz4/dev
v1.8.1.2
Yann Collet [Sun, 14 Jan 2018 03:06:33 +0000 (19:06 -0800)]
update man page
Yann Collet [Sun, 14 Jan 2018 02:51:33 +0000 (18:51 -0800)]
nicer console message for `make clean`
Yann Collet [Sun, 14 Jan 2018 02:46:13 +0000 (18:46 -0800)]
updated manuals to v1.8.1
Yann Collet [Sun, 14 Jan 2018 00:33:56 +0000 (16:33 -0800)]
Merge pull request #448 from sunpoet/dev
Fix lz4 version
Po-Chuan Hsieh [Sat, 13 Jan 2018 22:38:03 +0000 (06:38 +0800)]
Fix lz4 version
Yann Collet [Sat, 13 Jan 2018 21:16:31 +0000 (13:16 -0800)]
updated LZ4F_decompress() documentation
Yann Collet [Sat, 13 Jan 2018 00:23:16 +0000 (16:23 -0800)]
Merge pull request #446 from lz4/dev
LZ4 v1.8.1
Yann Collet [Fri, 12 Jan 2018 22:36:10 +0000 (14:36 -0800)]
updated NEWS for v1.8.1
Yann Collet [Wed, 10 Jan 2018 18:09:13 +0000 (19:09 +0100)]
Merge pull request #442 from terrelln/441
[lz4io] Fix decompression file stat with --rm
Yann Collet [Wed, 10 Jan 2018 18:06:21 +0000 (19:06 +0100)]
Merge pull request #443 from terrelln/440
[lz4f] Skip memcpy() on empty dictionary
Yann Collet [Wed, 10 Jan 2018 17:48:11 +0000 (18:48 +0100)]
Merge pull request #444 from felixhandte/publish-static-functions
Add Option to Make lz4frame_static.h Functions Visible in Shared Objects
W. Felix Handte [Mon, 8 Jan 2018 19:46:22 +0000 (14:46 -0500)]
Add Option to Make lz4frame_static.h Functions Visible in Shared Objects
In some contexts, *cough*like at facebook*cough*, dynamic linking is used in
contexts which aren't truly dynamic. That is, the guarantee is maintained that
a program will only ever execute against the library version it was compiled
to interact with.
For those situations, introduce a compile-time flag that overrides hiding
these unstable APIs in shared objects.
Yann Collet [Sat, 6 Jan 2018 05:58:41 +0000 (06:58 +0100)]
Merge pull request #434 from lz4/pattern
conditional pattern analysis
Yann Collet [Sat, 6 Jan 2018 05:57:56 +0000 (06:57 +0100)]
Merge pull request #435 from lz4/destSize
lz4opt is now compatible with _destSize variant
Nick Terrell [Fri, 5 Jan 2018 22:30:49 +0000 (14:30 -0800)]
[lz4f] Skip memcpy() on empty dictionary
Nick Terrell [Fri, 5 Jan 2018 19:32:04 +0000 (11:32 -0800)]
[lz4io] Refuse to set file stat for non-regular files
Nick Terrell [Fri, 5 Jan 2018 19:27:24 +0000 (11:27 -0800)]
[lz4io] Fix decompression file stat with --rm
Yann Collet [Mon, 1 Jan 2018 23:19:59 +0000 (00:19 +0100)]
Merge pull request #439 from eli-b/doc-nohup-behavior
Docs: describe behavior under nohup
Yann Collet [Mon, 1 Jan 2018 23:17:57 +0000 (00:17 +0100)]
Merge pull request #438 from eli-b/grammar-fix
Grammar: "to silent" -> "to silence"
Eli Boyarski [Mon, 1 Jan 2018 13:34:16 +0000 (15:34 +0200)]
Docs: describe behavior under nohup
Eli Boyarski [Mon, 1 Jan 2018 12:15:31 +0000 (14:15 +0200)]
Grammar: "to silent" -> "to silence"
Yann Collet [Wed, 27 Dec 2017 12:02:40 +0000 (13:02 +0100)]
object files in /tests
object files created from /tests are compiled with specific flags (`-g -DLZ4_DEBUG=1`)
which are not welcomed in release binary.
`lib/*.o` files created from /tests are now stored in /tests, to avoid unintentional mix.
Yann Collet [Fri, 22 Dec 2017 11:47:59 +0000 (12:47 +0100)]
lz4opt supports _destSize
no longer limited to level 9
Yann Collet [Fri, 22 Dec 2017 10:54:43 +0000 (11:54 +0100)]
/tests programs compiled with LZ4_DEBUG=1
to enable assert() within /lib
Yann Collet [Fri, 22 Dec 2017 07:07:25 +0000 (08:07 +0100)]
conditional pattern analysis
Pattern analysis (currently limited to long ranges of identical bytes)
is actually detrimental to performance
when `nbSearches` is low.
Reason is : `nbSearches` provides a built-in protection for these cases.
The problem with patterns is that they dramatically increase the number of candidates to visit.
But with a low nbSearches, the match finder just aborts early.
In such cases, pattern analysis adds some complexity without reducing total nb of candidates.
It actually increases compression ratio a little bit, by filtering only "good" candidates,
but at a measurable speed cost, so it's not a good trade-off.
This patch makes pattern analysis optional.
It's enabled for levels 8+ only.
Yann Collet [Thu, 21 Dec 2017 08:46:25 +0000 (09:46 +0100)]
Merge pull request #431 from lz4/newopt
new level 10
Yann Collet [Wed, 20 Dec 2017 13:14:01 +0000 (14:14 +0100)]
new level 10
lz4opt is only competitive vs lz4hc level 10.
Below that level, it doesn't match the speed / compression effectiveness of regular hc parser.
This patch propose to extend lz4opt to levels 10-12.
The new level 10 tend to compress a bit better and a bit faster than previous one (mileage vary depending on file)
The only downside is that `limitedDestSize` mode is now limited to max level 9 (vs 10),
since it's only compatible with regular HC parser.
(Note : I suspect it's possible to convert lz4opt to support it too, but haven't spent time into it).
Yann Collet [Fri, 15 Dec 2017 22:46:00 +0000 (14:46 -0800)]
Merge pull request #427 from lz4/registerLess
remove `register` keyword
Yann Collet [Mon, 11 Dec 2017 18:07:03 +0000 (10:07 -0800)]
Merge pull request #424 from MaxRis/msbuild-properties-#423
Msbuild properties #423
Max Risuhin [Mon, 11 Dec 2017 12:57:19 +0000 (14:57 +0200)]
EnableWholeProgramOptimization and UseStaticCRT msbuild custom properties
Yann Collet [Tue, 5 Dec 2017 01:10:23 +0000 (17:10 -0800)]
remove `register` keyword
deprecated in newer C++ versions,
and dubious utility
Yann Collet [Mon, 4 Dec 2017 22:38:00 +0000 (14:38 -0800)]
Merge pull request #426 from aliceatlas/cli_chmod_fix
Fix cli sometimes calling UTIL_setFileStat on /dev/null
Alice Atlas [Mon, 4 Dec 2017 21:07:31 +0000 (16:07 -0500)]
Fix bug which could sometimes result in the lz4 cli chmodding /dev/null if running as root
Yann Collet [Sat, 25 Nov 2017 01:18:46 +0000 (17:18 -0800)]
minor updates to examples
see https://github.com/lz4/lz4/commit/
810e2ca27b3561e0f6bfa7a88e0fde6faf807064#commitcomment-
25810887
Yann Collet [Mon, 20 Nov 2017 18:27:05 +0000 (10:27 -0800)]
API : changed a few variables' names for clarity
updated relevant doc.
This patch has no impact on ABI/API, nor on binary generation.
Yann Collet [Mon, 13 Nov 2017 23:54:55 +0000 (15:54 -0800)]
updated NEWS