Compare commits

...
23 Commits
Author SHA1 Message Date
Nick Terrell b53da1f6f4 Add extra space to match linux kernel 2022-02-22 19:58:18 -08:00
Nick Terrell 693aa7bad2 Add comment to unused variable suppression 2021-11-17 13:46:09 -08:00
Nick Terrell 1eba76a2d1 [linux-kernel] Don't add -O3 to CFLAGS
It is no longer necessary to get good performance, there is only a small
speed difference between -O2 and -O3, so just stick to the default of
-O2.

This also fixes the stack space usage on parisc. The compiler was buggy
for -O3 and used ~3KB of stack space for several functions. With -O2 the
problem is completely resolved, and stack space is back to a few hundred
bytes.

Additionally, we get a large code size win on gcc:

| Compiler | Before (Bytes) | After (Bytes) | Delta (Bytes) |
|----------|----------------|---------------|---------------|
| gcc-11   |         952754 |        738954 |       -213800 |
| clang-12 |         976290 |        938826 |        -37464 |
2021-11-16 14:29:35 -08:00
Nick Terrell b9302410bf [linux-kernel] Don't inline function in zstd_opt.c
The optimal parser is unlikely to be used in the linux kernel in
practice. There is no reason these functions should be force inlined,
since we aren't gaining anything, and are losing build size.

| Compiler | Before (Bytes) | After (Bytes) | Delta (Bytes) |
|----------|----------------|---------------|---------------|
| gcc-11   |        1142090 |        952754 |       -189336 |
| clang-12 |        1228402 |        976290 |       -252112 |

This is a temporary solution pending the resolution of Issue #2862 in
the `dev` branch.
2021-11-15 20:37:58 -08:00
Nick Terrell 0118fe65ff Fix unused variable warning
`litLengthSum` is unused when asserts are disabled. Already fixed in `dev` by
PR#2838. Found by the Kernel test robot [0].

[0] https://lore.kernel.org/linux-mm/202111120312.833wII4i-lkp@intel.com/T/

Reported-by: kernel test robot <lkp@intel.com>
2021-11-15 16:55:59 -08:00
Nick Terrell 608bacf6cb Backport zstd patch from LKML
Credit to Nathan Chancellor for the bug fix and Nick Desaulniers for the
bug report.

Link: ClangBuiltLinux/linux#1486
Link: https://lore.kernel.org/all/20211021202353.2356400-1-nathan@kernel.org/
2021-11-11 12:18:35 -08:00
Nick Terrell c0c38ba1db [binary-tree] Fix underflow of nbCompares
Fix underflow of `nbCompares` by switching to an `int` and comparing
`nbCompares > 0`. This is a minimal fix, because I don't want to change
the logic. These loops seem to be doing `nbCompares + 1` comparisons.

The bug was reported by Dan Carpenter and found by Smatch static
checker.

https://lore.kernel.org/all/20211008063704.GA5370@kili/
2021-10-11 15:57:35 -07:00
Nick Terrell 5a3e16f0c2 [ldm] Fix ZSTD_c_ldmHashRateLog bounds check
There is no minimum value check, so the parameter could be negative.
Switch to the standard pattern of using `BOUNDCHECK()`.

The bug was reported by Dan Carpenter and found by Smatch static
checker.

https://lore.kernel.org/all/20211008063704.GA5370@kili/
2021-10-11 15:43:57 -07:00
Nick Terrell 2c94f9fc61 [nit] Fix buggy indentation
The bug was reported by Dan Carpenter and found by Smatch static
checker.

https://lore.kernel.org/all/20211008063704.GA5370@kili/
2021-10-11 15:43:33 -07:00
Nick Terrell 695181c2e0 [multiple-ddicts] Fix NULL checks
The bug was reported by Dan Carpenter and found by Smatch static
checker.

https://lore.kernel.org/all/20211008063704.GA5370@kili/
2021-10-11 15:42:45 -07:00
Nick Terrell 20821a46f4 [lib] Make lib compatible with -Wfall-through excepting legacy
Switch to a macro `ZSTD_FALLTHROUGH;` instead of a comment. On supported
compilers this uses an attribute, otherwise it becomes a comment.

This is necessary to be compatible with clang's `-Wfall-through`, and
gcc's `-Wfall-through=2` which don't support comments. Without this the
linux build emits a bunch of warnings.
2021-09-23 11:54:14 -07:00
Nick Terrell 1715601e55 [contrib][linux] Reduce stack usage by 80 bytes
Instead of calling `ZSTD_compress_advanced()` and
`ZSTD_initCStream_advanced()`, which each take a `ZSTD_parameters` by
value, use the new advanced API.

Stack usage went from 2024 -> 1944.
2021-09-22 18:18:20 -07:00
Nick Terrell 07d7ebe448 [contrib][linux] Fix up SPDX license identifiers
Correctly identify that we are GPL v2+ or BSD 3 clause, as pointed out
in issue #2663.
2021-09-22 15:06:08 -07:00
Nick Terrell 67a426c322 [linux-kernel] Replace kernel-style comments
Replace kernel-style comments with regular comments.

E.g.

```
/** Before */

/* After */

/**
 * Before
 */

/*
 * After
 */

/***********************************
 * Before
 ***********************************/

/* *********************************
 * After
 ***********************************/
```
2021-04-29 15:53:38 -07:00
Nick Terrell 4432dac93b [contrib][linux-kernel] Add zstd_min_clevel() and zstd_max_clevel() 2021-03-30 10:37:45 -07:00
Nick Terrell de9de869a3 [copyright][license] Switch to yearless copyright and some cleanup in the linux-kernel files
* Switch to yearless copyright per FB policy
* Fix up SPDX-License-Identifier lines in `contrib/linux-kernel` sources
* Add zstd copyright/license header to the `contrib/linux-kernel` sources
* Update the `tests/test-license.py` to check for yearless copyright
* Improvements to `tests/test-license.py`
* Check `contrib/linux-kernel` in `tests/test-license.py`
2021-03-30 10:37:39 -07:00
Nick Terrell c1a244d534 Merge pull request #2539 from terrelln/linux-kernel-fixes
Fixes for the next linux kernel patch version
2021-03-24 16:29:38 -07:00
Nick Terrell ea288e0d8e [lib] Bump zstd version number 2021-03-16 11:47:27 -07:00
Nick Terrell cd1551d261 [lib][tracing] Add ZSTD_NO_TRACE macro
When defined, it disables tracing, and avoids including the header.
2021-03-16 11:47:27 -07:00
Nick Terrell 7222614a19 [contrib][freestanding] Remove tracing support
Remove tracing support from `freestanding.py` to keep things simple.
2021-03-16 11:47:27 -07:00
Nick Terrell e4b914e663 [contrib][linux] Expose zstd headers to avoid duplication
Expose the zstd headers in `include/linux` to avoid struct duplication.
This makes the member names not follow Kernel style guidelines, and
exposes the zstd symbols. But, the LMKL reviewers are okay with that.
2021-03-16 11:47:22 -07:00
Nick Terrell 49a9e070f5 [contrib][linux-kernel] Update test include stubs
Update the test include stubs so they are able to run the current zstd
version in the kernel, so I can compare stack usage.
2021-03-16 11:40:24 -07:00
Nick Terrell d2dd35ae65 [contrib][linux-kernel] Fix unaligned.h
Fix the `unaligned.h` shim in the tests that was causing corruption in
the tests. Note that this is a problem with the test shim, not the
kernel code.
2021-03-16 11:40:24 -07:00
195 changed files with 689 additions and 560 deletions
+62 -9
View File
@@ -27,6 +27,8 @@ SKIPPED_FILES = [
"common/pool.h", "common/pool.h",
"common/threading.c", "common/threading.c",
"common/threading.h", "common/threading.h",
"common/zstd_trace.c",
"common/zstd_trace.h",
"compress/zstdmt_compress.h", "compress/zstdmt_compress.h",
"compress/zstdmt_compress.c", "compress/zstdmt_compress.c",
] ]
@@ -430,7 +432,7 @@ class Freestanding(object):
external_xxhash: bool, xxh64_state: Optional[str], external_xxhash: bool, xxh64_state: Optional[str],
xxh64_prefix: Optional[str], rewritten_includes: [(str, str)], xxh64_prefix: Optional[str], rewritten_includes: [(str, str)],
defs: [(str, Optional[str])], replaces: [(str, str)], defs: [(str, Optional[str])], replaces: [(str, str)],
undefs: [str], excludes: [str] undefs: [str], excludes: [str], seds: [str],
): ):
self._zstd_deps = zstd_deps self._zstd_deps = zstd_deps
self._mem = mem self._mem = mem
@@ -444,6 +446,7 @@ class Freestanding(object):
self._replaces = replaces self._replaces = replaces
self._undefs = undefs self._undefs = undefs
self._excludes = excludes self._excludes = excludes
self._seds = seds
def _dst_lib_file_paths(self): def _dst_lib_file_paths(self):
""" """
@@ -471,7 +474,7 @@ class Freestanding(object):
dst_path = os.path.join(self._dst_lib, lib_path) dst_path = os.path.join(self._dst_lib, lib_path)
self._log(f"\tCopying: {src_path} -> {dst_path}") self._log(f"\tCopying: {src_path} -> {dst_path}")
shutil.copyfile(src_path, dst_path) shutil.copyfile(src_path, dst_path)
def _copy_source_lib(self): def _copy_source_lib(self):
self._log("Copying source library into output library") self._log("Copying source library into output library")
@@ -481,14 +484,14 @@ class Freestanding(object):
for subdir in INCLUDED_SUBDIRS: for subdir in INCLUDED_SUBDIRS:
src_dir = os.path.join(self._src_lib, subdir) src_dir = os.path.join(self._src_lib, subdir)
dst_dir = os.path.join(self._dst_lib, subdir) dst_dir = os.path.join(self._dst_lib, subdir)
assert os.path.exists(src_dir) assert os.path.exists(src_dir)
os.makedirs(dst_dir, exist_ok=True) os.makedirs(dst_dir, exist_ok=True)
for filename in os.listdir(src_dir): for filename in os.listdir(src_dir):
lib_path = os.path.join(subdir, filename) lib_path = os.path.join(subdir, filename)
self._copy_file(lib_path) self._copy_file(lib_path)
def _copy_zstd_deps(self): def _copy_zstd_deps(self):
dst_zstd_deps = os.path.join(self._dst_lib, "common", "zstd_deps.h") dst_zstd_deps = os.path.join(self._dst_lib, "common", "zstd_deps.h")
self._log(f"Copying zstd_deps: {self._zstd_deps} -> {dst_zstd_deps}") self._log(f"Copying zstd_deps: {self._zstd_deps} -> {dst_zstd_deps}")
@@ -508,7 +511,7 @@ class Freestanding(object):
assert not (undef and value is not None) assert not (undef and value is not None)
for filepath in self._dst_lib_file_paths(): for filepath in self._dst_lib_file_paths():
file = FileLines(filepath) file = FileLines(filepath)
def _hardwire_defines(self): def _hardwire_defines(self):
self._log("Hardwiring macros") self._log("Hardwiring macros")
partial_preprocessor = PartialPreprocessor(self._defs, self._replaces, self._undefs) partial_preprocessor = PartialPreprocessor(self._defs, self._replaces, self._undefs)
@@ -536,7 +539,7 @@ class Freestanding(object):
skipped.append(line) skipped.append(line)
if end_re.search(line) is not None: if end_re.search(line) is not None:
assert begin_re.search(line) is None assert begin_re.search(line) is None
self._log(f"\t\tRemoving excluded section: {exclude}") self._log(f"\t\tRemoving excluded section: {exclude}")
for s in skipped: for s in skipped:
self._log(f"\t\t\t- {s}") self._log(f"\t\t\t- {s}")
emit = True emit = True
@@ -559,12 +562,12 @@ class Freestanding(object):
e = match.end('include') e = match.end('include')
file.lines[i] = line[:s] + rewritten + line[e:] file.lines[i] = line[:s] + rewritten + line[e:]
file.write() file.write()
def _rewrite_includes(self): def _rewrite_includes(self):
self._log("Rewriting includes") self._log("Rewriting includes")
for original, rewritten in self._rewritten_includes: for original, rewritten in self._rewritten_includes:
self._rewrite_include(original, rewritten) self._rewrite_include(original, rewritten)
def _replace_xxh64_prefix(self): def _replace_xxh64_prefix(self):
if self._xxh64_prefix is None: if self._xxh64_prefix is None:
return return
@@ -596,6 +599,48 @@ class Freestanding(object):
file.lines[i] = line file.lines[i] = line
file.write() file.write()
def _parse_sed(self, sed):
assert sed[0] == 's'
delim = sed[1]
match = re.fullmatch(f's{delim}(.+){delim}(.*){delim}(.*)', sed)
assert match is not None
regex = re.compile(match.group(1))
format_str = match.group(2)
is_global = match.group(3) == 'g'
return regex, format_str, is_global
def _process_sed(self, sed):
self._log(f"Processing sed: {sed}")
regex, format_str, is_global = self._parse_sed(sed)
for filepath in self._dst_lib_file_paths():
file = FileLines(filepath)
for i, line in enumerate(file.lines):
modified = False
while True:
match = regex.search(line)
if match is None:
break
replacement = format_str.format(match.groups(''), match.groupdict(''))
b = match.start()
e = match.end()
line = line[:b] + replacement + line[e:]
modified = True
if not is_global:
break
if modified:
self._log(f"\t- {file.lines[i][:-1]}")
self._log(f"\t+ {line[:-1]}")
file.lines[i] = line
file.write()
def _process_seds(self):
self._log("Processing seds")
for sed in self._seds:
self._process_sed(sed)
def go(self): def go(self):
self._copy_source_lib() self._copy_source_lib()
self._copy_zstd_deps() self._copy_zstd_deps()
@@ -604,6 +649,7 @@ class Freestanding(object):
self._remove_excludes() self._remove_excludes()
self._rewrite_includes() self._rewrite_includes()
self._replace_xxh64_prefix() self._replace_xxh64_prefix()
self._process_seds()
def parse_optional_pair(defines: [str]) -> [(str, Optional[str])]: def parse_optional_pair(defines: [str]) -> [(str, Optional[str])]:
@@ -641,6 +687,7 @@ def main(name, args):
parser.add_argument("--xxh64-state", default=None, help="Alternate XXH64 state type (excluding _) e.g. --xxh64-state='struct xxh64_state'") parser.add_argument("--xxh64-state", default=None, help="Alternate XXH64 state type (excluding _) e.g. --xxh64-state='struct xxh64_state'")
parser.add_argument("--xxh64-prefix", default=None, help="Alternate XXH64 function prefix (excluding _) e.g. --xxh64-prefix=xxh64") parser.add_argument("--xxh64-prefix", default=None, help="Alternate XXH64 function prefix (excluding _) e.g. --xxh64-prefix=xxh64")
parser.add_argument("--rewrite-include", default=[], dest="rewritten_includes", action="append", help="Rewrite an include REGEX=NEW (e.g. '<stddef\\.h>=<linux/types.h>')") parser.add_argument("--rewrite-include", default=[], dest="rewritten_includes", action="append", help="Rewrite an include REGEX=NEW (e.g. '<stddef\\.h>=<linux/types.h>')")
parser.add_argument("--sed", default=[], dest="seds", action="append", help="Apply a sed replacement. Format: `s/REGEX/FORMAT/[g]`. REGEX is a Python regex. FORMAT is a Python format string formatted by the regex dict.")
parser.add_argument("-D", "--define", default=[], dest="defs", action="append", help="Pre-define this macro (can be passed multiple times)") parser.add_argument("-D", "--define", default=[], dest="defs", action="append", help="Pre-define this macro (can be passed multiple times)")
parser.add_argument("-U", "--undefine", default=[], dest="undefs", action="append", help="Pre-undefine this macro (can be passed mutliple times)") parser.add_argument("-U", "--undefine", default=[], dest="undefs", action="append", help="Pre-undefine this macro (can be passed mutliple times)")
parser.add_argument("-R", "--replace", default=[], dest="replaces", action="append", help="Pre-define this macro and replace the first ifndef block with its definition") parser.add_argument("-R", "--replace", default=[], dest="replaces", action="append", help="Pre-define this macro and replace the first ifndef block with its definition")
@@ -656,6 +703,11 @@ def main(name, args):
if name in args.undefs: if name in args.undefs:
raise RuntimeError(f"{name} is both defined and undefined!") raise RuntimeError(f"{name} is both defined and undefined!")
# Always set tracing to 0
if "ZSTD_NO_TRACE" not in (arg[0] for arg in args.defs):
args.defs.append(("ZSTD_NO_TRACE", None))
args.defs.append(("ZSTD_TRACE", "0"))
args.replaces = parse_pair(args.replaces) args.replaces = parse_pair(args.replaces)
for name, _ in args.replaces: for name, _ in args.replaces:
if name in args.undefs or name in args.defs: if name in args.undefs or name in args.defs:
@@ -688,7 +740,8 @@ def main(name, args):
args.defs, args.defs,
args.replaces, args.replaces,
args.undefs, args.undefs,
args.excludes args.excludes,
args.seds,
).go() ).go()
if __name__ == "__main__": if __name__ == "__main__":
+15 -4
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2015-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
@@ -22,6 +22,10 @@ libzstd:
--xxh64-prefix 'xxh64' \ --xxh64-prefix 'xxh64' \
--rewrite-include '<limits\.h>=<linux/limits.h>' \ --rewrite-include '<limits\.h>=<linux/limits.h>' \
--rewrite-include '<stddef\.h>=<linux/types.h>' \ --rewrite-include '<stddef\.h>=<linux/types.h>' \
--rewrite-include '"\.\./zstd.h"=<linux/zstd.h>' \
--rewrite-include '"(\.\./common/)?zstd_errors.h"=<linux/zstd_errors.h>' \
--sed 's,/\*\*\*,/* *,g' \
--sed 's,/\*\*,/*,g' \
-DZSTD_NO_INTRINSICS \ -DZSTD_NO_INTRINSICS \
-DZSTD_NO_UNUSED_FUNCTIONS \ -DZSTD_NO_UNUSED_FUNCTIONS \
-DZSTD_LEGACY_SUPPORT=0 \ -DZSTD_LEGACY_SUPPORT=0 \
@@ -35,7 +39,6 @@ libzstd:
-DZSTD_ADDRESS_SANITIZER=0 \ -DZSTD_ADDRESS_SANITIZER=0 \
-DZSTD_MEMORY_SANITIZER=0 \ -DZSTD_MEMORY_SANITIZER=0 \
-DZSTD_COMPRESS_HEAPMODE=1 \ -DZSTD_COMPRESS_HEAPMODE=1 \
-UZSTD_NO_INLINE \
-UNO_PREFETCH \ -UNO_PREFETCH \
-U__cplusplus \ -U__cplusplus \
-UZSTD_DLL_EXPORT \ -UZSTD_DLL_EXPORT \
@@ -46,8 +49,13 @@ libzstd:
-U_WIN32 \ -U_WIN32 \
-RZSTDLIB_VISIBILITY= \ -RZSTDLIB_VISIBILITY= \
-RZSTDERRORLIB_VISIBILITY= \ -RZSTDERRORLIB_VISIBILITY= \
-RZSTD_FALLTHROUGH=fallthrough \
-DZSTD_HAVE_WEAK_SYMBOLS=0 \ -DZSTD_HAVE_WEAK_SYMBOLS=0 \
-DZSTD_TRACE=0 -DZSTD_TRACE=0 \
-DZSTD_NO_TRACE \
-DZSTD_LINUX_KERNEL
mv linux/lib/zstd/zstd.h linux/include/linux/zstd_lib.h
mv linux/lib/zstd/common/zstd_errors.h linux/include/linux/
cp linux_zstd.h linux/include/linux/zstd.h cp linux_zstd.h linux/include/linux/zstd.h
cp zstd_compress_module.c linux/lib/zstd cp zstd_compress_module.c linux/lib/zstd
cp zstd_decompress_module.c linux/lib/zstd cp zstd_decompress_module.c linux/lib/zstd
@@ -62,15 +70,18 @@ import: libzstd
rm -f $(LINUX)/include/linux/zstd_errors.h rm -f $(LINUX)/include/linux/zstd_errors.h
rm -rf $(LINUX)/lib/zstd rm -rf $(LINUX)/lib/zstd
cp linux/include/linux/zstd.h $(LINUX)/include/linux cp linux/include/linux/zstd.h $(LINUX)/include/linux
cp linux/include/linux/zstd_lib.h $(LINUX)/include/linux
cp linux/include/linux/zstd_errors.h $(LINUX)/include/linux
cp -r linux/lib/zstd $(LINUX)/lib cp -r linux/lib/zstd $(LINUX)/lib
import-upstream: import-upstream:
rm -rf $(LINUX)/lib/zstd rm -rf $(LINUX)/lib/zstd
mkdir $(LINUX)/lib/zstd mkdir $(LINUX)/lib/zstd
cp ../../lib/zstd.h $(LINUX)/lib/zstd cp ../../lib/zstd.h $(LINUX)/include/linux/zstd_lib.h
cp -r ../../lib/common $(LINUX)/lib/zstd cp -r ../../lib/common $(LINUX)/lib/zstd
cp -r ../../lib/compress $(LINUX)/lib/zstd cp -r ../../lib/compress $(LINUX)/lib/zstd
cp -r ../../lib/decompress $(LINUX)/lib/zstd cp -r ../../lib/decompress $(LINUX)/lib/zstd
mv $(LINUX)/lib/zstd/common/zstd_errors.h $(LINUX)/include/linux
rm $(LINUX)/lib/zstd/common/threading.* rm $(LINUX)/lib/zstd/common/threading.*
rm $(LINUX)/lib/zstd/common/pool.* rm $(LINUX)/lib/zstd/common/pool.*
rm $(LINUX)/lib/zstd/common/xxhash.* rm $(LINUX)/lib/zstd/common/xxhash.*
+10 -1
View File
@@ -1,4 +1,13 @@
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
/*
* Copyright (c) Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
*/
/* /*
* This file includes every .c file needed for decompression. * This file includes every .c file needed for decompression.
+10 -3
View File
@@ -1,9 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
# ################################################################
# Copyright (c) Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under both the BSD-style license (found in the
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
# in the COPYING file in the root directory of this source tree).
# You may select, at your option, one of the above-listed licenses.
# ################################################################
obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o
obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o
ccflags-y += -O3
zstd_compress-y := \ zstd_compress-y := \
zstd_compress_module.o \ zstd_compress_module.o \
common/debug.o \ common/debug.o \
+91 -103
View File
@@ -1,18 +1,13 @@
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
/* /*
* Copyright (c) 2016-present, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under the BSD-style license found in the * This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of https://github.com/facebook/zstd. * LICENSE file in the root directory of https://github.com/facebook/zstd) and
* An additional grant of patent rights can be found in the PATENTS file in the * the GPLv2 (found in the COPYING file in the root directory of
* same directory. * https://github.com/facebook/zstd). You may select, at your option, one of the
* * above-listed licenses.
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2 as published by the
* Free Software Foundation. This program is dual-licensed; you may select
* either version 2 of the GNU General Public License ("GPL") or BSD license
* ("BSD").
*/ */
#ifndef LINUX_ZSTD_H #ifndef LINUX_ZSTD_H
@@ -27,6 +22,8 @@
/* ====== Dependency ====== */ /* ====== Dependency ====== */
#include <linux/types.h> #include <linux/types.h>
#include <linux/zstd_errors.h>
#include <linux/zstd_lib.h>
/* ====== Helper Functions ====== */ /* ====== Helper Functions ====== */
/** /**
@@ -45,13 +42,18 @@ size_t zstd_compress_bound(size_t src_size);
*/ */
unsigned int zstd_is_error(size_t code); unsigned int zstd_is_error(size_t code);
/**
* enum zstd_error_code - zstd error codes
*/
typedef ZSTD_ErrorCode zstd_error_code;
/** /**
* zstd_get_error_code() - translates an error function result to an error code * zstd_get_error_code() - translates an error function result to an error code
* @code: The function result for which zstd_is_error(code) is true. * @code: The function result for which zstd_is_error(code) is true.
* *
* Return: A unique error code for this error. * Return: A unique error code for this error.
*/ */
int zstd_get_error_code(size_t code); zstd_error_code zstd_get_error_code(size_t code);
/** /**
* zstd_get_error_name() - translates an error function result to a string * zstd_get_error_name() - translates an error function result to a string
@@ -61,76 +63,67 @@ int zstd_get_error_code(size_t code);
*/ */
const char *zstd_get_error_name(size_t code); const char *zstd_get_error_name(size_t code);
/**
* zstd_min_clevel() - minimum allowed compression level
*
* Return: The minimum allowed compression level.
*/
int zstd_min_clevel(void);
/**
* zstd_max_clevel() - maximum allowed compression level
*
* Return: The maximum allowed compression level.
*/
int zstd_max_clevel(void);
/* ====== Parameter Selection ====== */ /* ====== Parameter Selection ====== */
/** /**
* enum zstd_strategy - zstd compression search strategy * enum zstd_strategy - zstd compression search strategy
* *
* From faster to stronger. * From faster to stronger. See zstd_lib.h.
*/ */
enum zstd_strategy { typedef ZSTD_strategy zstd_strategy;
zstd_fast = 1,
zstd_dfast = 2,
zstd_greedy = 3,
zstd_lazy = 4,
zstd_lazy2 = 5,
zstd_btlazy2 = 6,
zstd_btopt = 7,
zstd_btultra = 8,
zstd_btultra2 = 9
};
/** /**
* struct zstd_compression_parameters - zstd compression parameters * struct zstd_compression_parameters - zstd compression parameters
* @window_log: Log of the largest match distance. Larger means more * @windowLog: Log of the largest match distance. Larger means more
* compression, and more memory needed during decompression. * compression, and more memory needed during decompression.
* @chain_log: Fully searched segment. Larger means more compression, * @chainLog: Fully searched segment. Larger means more compression,
* slower, and more memory (useless for fast). * slower, and more memory (useless for fast).
* @hash_log: Dispatch table. Larger means more compression, * @hashLog: Dispatch table. Larger means more compression,
* slower, and more memory. * slower, and more memory.
* @search_log: Number of searches. Larger means more compression and slower. * @searchLog: Number of searches. Larger means more compression and slower.
* @search_length: Match length searched. Larger means faster decompression, * @searchLength: Match length searched. Larger means faster decompression,
* sometimes less compression. * sometimes less compression.
* @target_length: Acceptable match size for optimal parser (only). Larger means * @targetLength: Acceptable match size for optimal parser (only). Larger means
* more compression, and slower. * more compression, and slower.
* @strategy: The zstd compression strategy. * @strategy: The zstd compression strategy.
*
* See zstd_lib.h.
*/ */
struct zstd_compression_parameters { typedef ZSTD_compressionParameters zstd_compression_parameters;
unsigned int window_log;
unsigned int chain_log;
unsigned int hash_log;
unsigned int search_log;
unsigned int search_length;
unsigned int target_length;
enum zstd_strategy strategy;
};
/** /**
* struct zstd_frame_parameters - zstd frame parameters * struct zstd_frame_parameters - zstd frame parameters
* @content_size_flag: Controls whether content size will be present in the * @contentSizeFlag: Controls whether content size will be present in the
* frame header (when known). * frame header (when known).
* @checksum_flag: Controls whether a 32-bit checksum is generated at the * @checksumFlag: Controls whether a 32-bit checksum is generated at the
* end of the frame for error detection. * end of the frame for error detection.
* @no_dict_id_flag: Controls whether dictID will be saved into the frame * @noDictIDFlag: Controls whether dictID will be saved into the frame
* header when using dictionary compression. * header when using dictionary compression.
* *
* The default value is all fields set to 0. * The default value is all fields set to 0. See zstd_lib.h.
*/ */
struct zstd_frame_parameters { typedef ZSTD_frameParameters zstd_frame_parameters;
unsigned int content_size_flag;
unsigned int checksum_flag;
unsigned int no_dict_id_flag;
};
/** /**
* struct zstd_parameters - zstd parameters * struct zstd_parameters - zstd parameters
* @cparams: The compression parameters. * @cParams: The compression parameters.
* @fparams: The frame parameters. * @fParams: The frame parameters.
*/ */
struct zstd_parameters { typedef ZSTD_parameters zstd_parameters;
struct zstd_compression_parameters cparams;
struct zstd_frame_parameters fparams;
};
/** /**
* zstd_get_params() - returns zstd_parameters for selected level * zstd_get_params() - returns zstd_parameters for selected level
@@ -140,12 +133,12 @@ struct zstd_parameters {
* *
* Return: The selected zstd_parameters. * Return: The selected zstd_parameters.
*/ */
struct zstd_parameters zstd_get_params(int level, zstd_parameters zstd_get_params(int level,
unsigned long long estimated_src_size); unsigned long long estimated_src_size);
/* ====== Single-pass Compression ====== */ /* ====== Single-pass Compression ====== */
typedef struct ZSTD_CCtx_s zstd_cctx; typedef ZSTD_CCtx zstd_cctx;
/** /**
* zstd_cctx_workspace_bound() - max memory needed to initialize a zstd_cctx * zstd_cctx_workspace_bound() - max memory needed to initialize a zstd_cctx
@@ -158,8 +151,7 @@ typedef struct ZSTD_CCtx_s zstd_cctx;
* Return: A lower bound on the size of the workspace that is passed to * Return: A lower bound on the size of the workspace that is passed to
* zstd_init_cctx(). * zstd_init_cctx().
*/ */
size_t zstd_cctx_workspace_bound( size_t zstd_cctx_workspace_bound(const zstd_compression_parameters *parameters);
const struct zstd_compression_parameters *parameters);
/** /**
* zstd_init_cctx() - initialize a zstd compression context * zstd_init_cctx() - initialize a zstd compression context
@@ -186,11 +178,11 @@ zstd_cctx *zstd_init_cctx(void *workspace, size_t workspace_size);
* zstd_is_error(). * zstd_is_error().
*/ */
size_t zstd_compress_cctx(zstd_cctx *cctx, void *dst, size_t dst_capacity, size_t zstd_compress_cctx(zstd_cctx *cctx, void *dst, size_t dst_capacity,
const void *src, size_t src_size, const struct zstd_parameters *parameters); const void *src, size_t src_size, const zstd_parameters *parameters);
/* ====== Single-pass Decompression ====== */ /* ====== Single-pass Decompression ====== */
typedef struct ZSTD_DCtx_s zstd_dctx; typedef ZSTD_DCtx zstd_dctx;
/** /**
* zstd_dctx_workspace_bound() - max memory needed to initialize a zstd_dctx * zstd_dctx_workspace_bound() - max memory needed to initialize a zstd_dctx
@@ -236,12 +228,10 @@ size_t zstd_decompress_dctx(zstd_dctx *dctx, void *dst, size_t dst_capacity,
* @size: Size of the input buffer. * @size: Size of the input buffer.
* @pos: Position where reading stopped. Will be updated. * @pos: Position where reading stopped. Will be updated.
* Necessarily 0 <= pos <= size. * Necessarily 0 <= pos <= size.
*
* See zstd_lib.h.
*/ */
struct zstd_in_buffer { typedef ZSTD_inBuffer zstd_in_buffer;
const void *src;
size_t size;
size_t pos;
};
/** /**
* struct zstd_out_buffer - output buffer for streaming * struct zstd_out_buffer - output buffer for streaming
@@ -249,16 +239,14 @@ struct zstd_in_buffer {
* @size: Size of the output buffer. * @size: Size of the output buffer.
* @pos: Position where writing stopped. Will be updated. * @pos: Position where writing stopped. Will be updated.
* Necessarily 0 <= pos <= size. * Necessarily 0 <= pos <= size.
*
* See zstd_lib.h.
*/ */
struct zstd_out_buffer { typedef ZSTD_outBuffer zstd_out_buffer;
void *dst;
size_t size;
size_t pos;
};
/* ====== Streaming Compression ====== */ /* ====== Streaming Compression ====== */
typedef struct ZSTD_CCtx_s zstd_cstream; typedef ZSTD_CStream zstd_cstream;
/** /**
* zstd_cstream_workspace_bound() - memory needed to initialize a zstd_cstream * zstd_cstream_workspace_bound() - memory needed to initialize a zstd_cstream
@@ -267,8 +255,7 @@ typedef struct ZSTD_CCtx_s zstd_cstream;
* Return: A lower bound on the size of the workspace that is passed to * Return: A lower bound on the size of the workspace that is passed to
* zstd_init_cstream(). * zstd_init_cstream().
*/ */
size_t zstd_cstream_workspace_bound( size_t zstd_cstream_workspace_bound(const zstd_compression_parameters *cparams);
const struct zstd_compression_parameters *cparams);
/** /**
* zstd_init_cstream() - initialize a zstd streaming compression context * zstd_init_cstream() - initialize a zstd streaming compression context
@@ -285,7 +272,7 @@ size_t zstd_cstream_workspace_bound(
* *
* Return: The zstd streaming compression context or NULL on error. * Return: The zstd streaming compression context or NULL on error.
*/ */
zstd_cstream *zstd_init_cstream(const struct zstd_parameters *parameters, zstd_cstream *zstd_init_cstream(const zstd_parameters *parameters,
unsigned long long pledged_src_size, void *workspace, size_t workspace_size); unsigned long long pledged_src_size, void *workspace, size_t workspace_size);
/** /**
@@ -320,8 +307,8 @@ size_t zstd_reset_cstream(zstd_cstream *cstream,
* function call or an error, which can be checked using * function call or an error, which can be checked using
* zstd_is_error(). * zstd_is_error().
*/ */
size_t zstd_compress_stream(zstd_cstream *cstream, size_t zstd_compress_stream(zstd_cstream *cstream, zstd_out_buffer *output,
struct zstd_out_buffer *output, struct zstd_in_buffer *input); zstd_in_buffer *input);
/** /**
* zstd_flush_stream() - flush internal buffers into output * zstd_flush_stream() - flush internal buffers into output
@@ -336,7 +323,7 @@ size_t zstd_compress_stream(zstd_cstream *cstream,
* Return: The number of bytes still present within internal buffers or an * Return: The number of bytes still present within internal buffers or an
* error, which can be checked using zstd_is_error(). * error, which can be checked using zstd_is_error().
*/ */
size_t zstd_flush_stream(zstd_cstream *cstream, struct zstd_out_buffer *output); size_t zstd_flush_stream(zstd_cstream *cstream, zstd_out_buffer *output);
/** /**
* zstd_end_stream() - flush internal buffers into output and end the frame * zstd_end_stream() - flush internal buffers into output and end the frame
@@ -350,11 +337,11 @@ size_t zstd_flush_stream(zstd_cstream *cstream, struct zstd_out_buffer *output);
* Return: The number of bytes still present within internal buffers or an * Return: The number of bytes still present within internal buffers or an
* error, which can be checked using zstd_is_error(). * error, which can be checked using zstd_is_error().
*/ */
size_t zstd_end_stream(zstd_cstream *cstream, struct zstd_out_buffer *output); size_t zstd_end_stream(zstd_cstream *cstream, zstd_out_buffer *output);
/* ====== Streaming Decompression ====== */ /* ====== Streaming Decompression ====== */
typedef struct ZSTD_DCtx_s zstd_dstream; typedef ZSTD_DStream zstd_dstream;
/** /**
* zstd_dstream_workspace_bound() - memory needed to initialize a zstd_dstream * zstd_dstream_workspace_bound() - memory needed to initialize a zstd_dstream
@@ -411,8 +398,8 @@ size_t zstd_reset_dstream(zstd_dstream *dstream);
* using zstd_is_error(). The size hint will never load more than the * using zstd_is_error(). The size hint will never load more than the
* frame. * frame.
*/ */
size_t zstd_decompress_stream(zstd_dstream *dstream, size_t zstd_decompress_stream(zstd_dstream *dstream, zstd_out_buffer *output,
struct zstd_out_buffer *output, struct zstd_in_buffer *input); zstd_in_buffer *input);
/* ====== Frame Inspection Functions ====== */ /* ====== Frame Inspection Functions ====== */
@@ -431,20 +418,21 @@ size_t zstd_find_frame_compressed_size(const void *src, size_t src_size);
/** /**
* struct zstd_frame_params - zstd frame parameters stored in the frame header * struct zstd_frame_params - zstd frame parameters stored in the frame header
* @frame_content_size: The frame content size, or 0 if not present. * @frameContentSize: The frame content size, or ZSTD_CONTENTSIZE_UNKNOWN if not
* @window_size: The window size, or 0 if the frame is a skippable frame. * present.
* @dict_id: The dictionary id, or 0 if not present. * @windowSize: The window size, or 0 if the frame is a skippable frame.
* @checksum_flag: Whether a checksum was used. * @blockSizeMax: The maximum block size.
* @frameType: The frame type (zstd or skippable)
* @headerSize: The size of the frame header.
* @dictID: The dictionary id, or 0 if not present.
* @checksumFlag: Whether a checksum was used.
*
* See zstd_lib.h.
*/ */
struct zstd_frame_params { typedef ZSTD_frameHeader zstd_frame_header;
unsigned long long frame_content_size;
unsigned int window_size;
unsigned int dict_id;
unsigned int checksum_flag;
};
/** /**
* zstd_get_frame_params() - extracts parameters from a zstd or skippable frame * zstd_get_frame_header() - extracts parameters from a zstd or skippable frame
* @params: On success the frame parameters are written here. * @params: On success the frame parameters are written here.
* @src: The source buffer. It must point to a zstd or skippable frame. * @src: The source buffer. It must point to a zstd or skippable frame.
* @src_size: The size of the source buffer. * @src_size: The size of the source buffer.
@@ -453,7 +441,7 @@ struct zstd_frame_params {
* must be provided to make forward progress. Otherwise it returns * must be provided to make forward progress. Otherwise it returns
* an error, which can be checked using zstd_is_error(). * an error, which can be checked using zstd_is_error().
*/ */
size_t zstd_get_frame_params(struct zstd_frame_params *params, const void *src, size_t zstd_get_frame_header(zstd_frame_header *params, const void *src,
size_t src_size); size_t src_size);
#endif /* LINUX_ZSTD_H */ #endif /* LINUX_ZSTD_H */
+2 -1
View File
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+13 -3
View File
@@ -1,3 +1,12 @@
# ################################################################
# Copyright (c) Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under both the BSD-style license (found in the
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
# in the COPYING file in the root directory of this source tree).
# You may select, at your option, one of the above-listed licenses.
# ################################################################
LINUX := ../linux LINUX := ../linux
LINUX_ZSTDLIB := $(LINUX)/lib/zstd LINUX_ZSTDLIB := $(LINUX)/lib/zstd
@@ -7,9 +16,9 @@ CPPFLAGS += -I$(LINUX)/include -I$(LINUX_ZSTDLIB) -Iinclude -DNDEBUG
CPPFLAGS += -DZSTD_ASAN_DONT_POISON_WORKSPACE CPPFLAGS += -DZSTD_ASAN_DONT_POISON_WORKSPACE
LINUX_ZSTD_MODULE := $(wildcard $(LINUX_ZSTDLIB)/*.c) LINUX_ZSTD_MODULE := $(wildcard $(LINUX_ZSTDLIB)/*.c)
LINUX_ZSTD_COMMON := $(wildcard $(LINUX_ZSTDLIB)/common/*.c) LINUX_ZSTD_COMMON := $(wildcard $(LINUX_ZSTDLIB)/common/*.c)
LINUX_ZSTD_COMPRESS := $(wildcard $(LINUX_ZSTDLIB)/compress/*.c) LINUX_ZSTD_COMPRESS := $(wildcard $(LINUX_ZSTDLIB)/compress/*.c)
LINUX_ZSTD_DECOMPRESS := $(wildcard $(LINUX_ZSTDLIB)/decompress/*.c) LINUX_ZSTD_DECOMPRESS := $(wildcard $(LINUX_ZSTDLIB)/decompress/*.c)
LINUX_ZSTD_FILES := $(LINUX_ZSTD_MODULE) $(LINUX_ZSTD_COMMON) $(LINUX_ZSTD_COMPRESS) $(LINUX_ZSTD_DECOMPRESS) LINUX_ZSTD_FILES := $(LINUX_ZSTD_MODULE) $(LINUX_ZSTD_COMMON) $(LINUX_ZSTD_COMPRESS) $(LINUX_ZSTD_DECOMPRESS)
LINUX_ZSTD_OBJECTS := $(LINUX_ZSTD_FILES:.c=.o) LINUX_ZSTD_OBJECTS := $(LINUX_ZSTD_FILES:.c=.o)
@@ -29,6 +38,7 @@ run-test: test static_test
.PHONY: .PHONY:
clean: clean:
$(RM) -f $(LINUX_ZSTDLIB)/*.o
$(RM) -f $(LINUX_ZSTDLIB)/**/*.o $(RM) -f $(LINUX_ZSTDLIB)/**/*.o
$(RM) -f *.o *.a $(RM) -f *.o *.a
$(RM) -f test $(RM) -f test
@@ -4,13 +4,23 @@
#include <assert.h> #include <assert.h>
#include <linux/types.h> #include <linux/types.h>
#define _LITTLE_ENDIAN 1 #ifndef __LITTLE_ENDIAN
# if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || defined(__LITTLE_ENDIAN__)
# define __LITTLE_ENDIAN 1
# endif
#endif
#ifdef __LITTLE_ENDIAN
# define _IS_LITTLE_ENDIAN 1
#else
# define _IS_LITTLE_ENDIAN 0
#endif
static unsigned _isLittleEndian(void) static unsigned _isLittleEndian(void)
{ {
const union { uint32_t u; uint8_t c[4]; } one = { 1 }; const union { uint32_t u; uint8_t c[4]; } one = { 1 };
assert(_LITTLE_ENDIAN == one.c[0]); assert(_IS_LITTLE_ENDIAN == one.c[0]);
return _LITTLE_ENDIAN; return _IS_LITTLE_ENDIAN;
} }
static uint16_t _swap16(uint16_t in) static uint16_t _swap16(uint16_t in)
@@ -165,7 +175,7 @@ extern void __bad_unaligned_access_size(void);
(void)0; \ (void)0; \
}) })
#if _LITTLE_ENDIAN #if _IS_LITTLE_ENDIAN
# define get_unaligned __get_unaligned_le # define get_unaligned __get_unaligned_le
# define put_unaligned __put_unaligned_le # define put_unaligned __put_unaligned_le
#else #else
@@ -14,4 +14,12 @@
#define inline __inline __attribute__((unused)) #define inline __inline __attribute__((unused))
#endif #endif
#ifndef noinline
#define noinline __attribute__((noinline))
#endif
#ifndef fallthrough
#define fallthrough __attribute__((__fallthrough__))
#endif
#endif #endif
@@ -12,4 +12,8 @@
#define WARN_ON(x) #define WARN_ON(x)
#define PTR_ALIGN(p, a) (typeof(p))ALIGN((unsigned long long)(p), (a))
#define ALIGN(x, a) ALIGN_MASK((x), (a) - 1)
#define ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask))
#endif #endif
-1
View File
@@ -36,7 +36,6 @@ test_not_present "ZSTD_NO_INTRINSICS"
test_not_present "ZSTD_NO_UNUSED_FUNCTIONS" test_not_present "ZSTD_NO_UNUSED_FUNCTIONS"
test_not_present "ZSTD_LEGACY_SUPPORT" test_not_present "ZSTD_LEGACY_SUPPORT"
test_not_present "STATIC_BMI2" test_not_present "STATIC_BMI2"
test_not_present "ZSTD_NO_INLINE"
test_not_present "ZSTD_DLL_EXPORT" test_not_present "ZSTD_DLL_EXPORT"
test_not_present "ZSTD_DLL_IMPORT" test_not_present "ZSTD_DLL_IMPORT"
test_not_present "__ICCARM__" test_not_present "__ICCARM__"
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+20 -11
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 7-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -57,10 +57,10 @@ static void test_btrfs(test_data_t const *data) {
fprintf(stderr, "testing btrfs use cases... "); fprintf(stderr, "testing btrfs use cases... ");
size_t const size = MIN(data->dataSize, 128 * 1024); size_t const size = MIN(data->dataSize, 128 * 1024);
for (int level = -1; level < 16; ++level) { for (int level = -1; level < 16; ++level) {
struct zstd_parameters params = zstd_get_params(level, size); zstd_parameters params = zstd_get_params(level, size);
CONTROL(params.cparams.window_log <= 17); CONTROL(params.cParams.windowLog <= 17);
size_t const workspaceSize = size_t const workspaceSize =
MAX(zstd_cstream_workspace_bound(&params.cparams), MAX(zstd_cstream_workspace_bound(&params.cParams),
zstd_dstream_workspace_bound(size)); zstd_dstream_workspace_bound(size));
void *workspace = malloc(workspaceSize); void *workspace = malloc(workspaceSize);
CONTROL(workspace != NULL); CONTROL(workspace != NULL);
@@ -72,8 +72,8 @@ static void test_btrfs(test_data_t const *data) {
{ {
zstd_cstream *cctx = zstd_init_cstream(&params, size, workspace, workspaceSize); zstd_cstream *cctx = zstd_init_cstream(&params, size, workspace, workspaceSize);
CONTROL(cctx != NULL); CONTROL(cctx != NULL);
struct zstd_out_buffer out = {NULL, 0, 0}; zstd_out_buffer out = {NULL, 0, 0};
struct zstd_in_buffer in = {NULL, 0, 0}; zstd_in_buffer in = {NULL, 0, 0};
for (;;) { for (;;) {
if (in.pos == in.size) { if (in.pos == in.size) {
in.src = ip; in.src = ip;
@@ -107,10 +107,10 @@ static void test_btrfs(test_data_t const *data) {
op = data->data2; op = data->data2;
oend = op + size; oend = op + size;
{ {
zstd_dstream *dctx = zstd_init_dstream(1ULL << params.cparams.window_log, workspace, workspaceSize); zstd_dstream *dctx = zstd_init_dstream(1ULL << params.cParams.windowLog, workspace, workspaceSize);
CONTROL(dctx != NULL); CONTROL(dctx != NULL);
struct zstd_out_buffer out = {NULL, 0, 0}; zstd_out_buffer out = {NULL, 0, 0};
struct zstd_in_buffer in = {NULL, 0, 0}; zstd_in_buffer in = {NULL, 0, 0};
for (;;) { for (;;) {
if (in.pos == in.size) { if (in.pos == in.size) {
in.src = ip; in.src = ip;
@@ -144,8 +144,8 @@ static void test_decompress_unzstd(test_data_t const *data) {
fprintf(stderr, "Testing decompress unzstd... "); fprintf(stderr, "Testing decompress unzstd... ");
size_t cSize; size_t cSize;
{ {
struct zstd_parameters params = zstd_get_params(19, 0); zstd_parameters params = zstd_get_params(19, 0);
size_t const wkspSize = zstd_cctx_workspace_bound(&params.cparams); size_t const wkspSize = zstd_cctx_workspace_bound(&params.cParams);
void* wksp = malloc(wkspSize); void* wksp = malloc(wkspSize);
CONTROL(wksp != NULL); CONTROL(wksp != NULL);
zstd_cctx* cctx = zstd_init_cctx(wksp, wkspSize); zstd_cctx* cctx = zstd_init_cctx(wksp, wkspSize);
@@ -169,6 +169,13 @@ static void test_decompress_unzstd(test_data_t const *data) {
fprintf(stderr, "Ok\n"); fprintf(stderr, "Ok\n");
} }
static void test_f2fs() {
fprintf(stderr, "testing f2fs uses... ");
CONTROL(zstd_min_clevel() < 0);
CONTROL(zstd_max_clevel() == 22);
fprintf(stderr, "Ok\n");
}
static char *g_stack = NULL; static char *g_stack = NULL;
static void __attribute__((noinline)) use(void *x) { static void __attribute__((noinline)) use(void *x) {
@@ -195,6 +202,7 @@ static void __attribute__((noinline)) check_stack() {
static void test_stack_usage(test_data_t const *data) { static void test_stack_usage(test_data_t const *data) {
set_stack(); set_stack();
test_f2fs();
test_btrfs(data); test_btrfs(data);
test_decompress_unzstd(data); test_decompress_unzstd(data);
check_stack(); check_stack();
@@ -202,6 +210,7 @@ static void test_stack_usage(test_data_t const *data) {
int main(void) { int main(void) {
test_data_t data = create_test_data(); test_data_t data = create_test_data();
test_f2fs();
test_btrfs(&data); test_btrfs(&data);
test_decompress_unzstd(&data); test_decompress_unzstd(&data);
test_stack_usage(&data); test_stack_usage(&data);
+75 -121
View File
@@ -1,102 +1,87 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
/*
* Copyright (c) Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
*/
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/zstd.h> #include <linux/zstd.h>
#include "zstd.h"
#include "common/zstd_deps.h" #include "common/zstd_deps.h"
#include "common/zstd_internal.h" #include "common/zstd_internal.h"
static void zstd_check_structs(void) { #define ZSTD_FORWARD_IF_ERR(ret) \
/* Check that the structs have the same size. */ do { \
ZSTD_STATIC_ASSERT(sizeof(ZSTD_parameters) == size_t const __ret = (ret); \
sizeof(struct zstd_parameters)); if (ZSTD_isError(__ret)) \
ZSTD_STATIC_ASSERT(sizeof(ZSTD_compressionParameters) == return __ret; \
sizeof(struct zstd_compression_parameters)); } while (0)
ZSTD_STATIC_ASSERT(sizeof(ZSTD_frameParameters) ==
sizeof(struct zstd_frame_parameters)); static size_t zstd_cctx_init(zstd_cctx *cctx, const zstd_parameters *parameters,
/* Zstd guarantees that the layout of the structs never change. Verify it. */ unsigned long long pledged_src_size)
ZSTD_STATIC_ASSERT(offsetof(ZSTD_parameters, cParams) == {
offsetof(struct zstd_parameters, cparams)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_reset(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_parameters, fParams) == cctx, ZSTD_reset_session_and_parameters));
offsetof(struct zstd_parameters, fparams)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setPledgedSrcSize(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_compressionParameters, windowLog) == cctx, pledged_src_size));
offsetof(struct zstd_compression_parameters, window_log)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_compressionParameters, chainLog) == cctx, ZSTD_c_windowLog, parameters->cParams.windowLog));
offsetof(struct zstd_compression_parameters, chain_log)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_compressionParameters, hashLog) == cctx, ZSTD_c_hashLog, parameters->cParams.hashLog));
offsetof(struct zstd_compression_parameters, hash_log)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_compressionParameters, searchLog) == cctx, ZSTD_c_chainLog, parameters->cParams.chainLog));
offsetof(struct zstd_compression_parameters, search_log)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_compressionParameters, minMatch) == cctx, ZSTD_c_searchLog, parameters->cParams.searchLog));
offsetof(struct zstd_compression_parameters, search_length)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_compressionParameters, targetLength) == cctx, ZSTD_c_minMatch, parameters->cParams.minMatch));
offsetof(struct zstd_compression_parameters, target_length)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_compressionParameters, strategy) == cctx, ZSTD_c_targetLength, parameters->cParams.targetLength));
offsetof(struct zstd_compression_parameters, strategy)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_frameParameters, contentSizeFlag) == cctx, ZSTD_c_strategy, parameters->cParams.strategy));
offsetof(struct zstd_frame_parameters, content_size_flag)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_frameParameters, checksumFlag) == cctx, ZSTD_c_contentSizeFlag, parameters->fParams.contentSizeFlag));
offsetof(struct zstd_frame_parameters, checksum_flag)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
ZSTD_STATIC_ASSERT(offsetof(ZSTD_frameParameters, noDictIDFlag) == cctx, ZSTD_c_checksumFlag, parameters->fParams.checksumFlag));
offsetof(struct zstd_frame_parameters, no_dict_id_flag)); ZSTD_FORWARD_IF_ERR(ZSTD_CCtx_setParameter(
/* Check that the strategies are the same. This can change. */ cctx, ZSTD_c_dictIDFlag, !parameters->fParams.noDictIDFlag));
ZSTD_STATIC_ASSERT((int)ZSTD_fast == (int)zstd_fast); return 0;
ZSTD_STATIC_ASSERT((int)ZSTD_dfast == (int)zstd_dfast);
ZSTD_STATIC_ASSERT((int)ZSTD_greedy == (int)zstd_greedy);
ZSTD_STATIC_ASSERT((int)ZSTD_lazy == (int)zstd_lazy);
ZSTD_STATIC_ASSERT((int)ZSTD_lazy2 == (int)zstd_lazy2);
ZSTD_STATIC_ASSERT((int)ZSTD_btlazy2 == (int)zstd_btlazy2);
ZSTD_STATIC_ASSERT((int)ZSTD_btopt == (int)zstd_btopt);
ZSTD_STATIC_ASSERT((int)ZSTD_btultra == (int)zstd_btultra);
ZSTD_STATIC_ASSERT((int)ZSTD_btultra2 == (int)zstd_btultra2);
/* Check input buffer */
ZSTD_STATIC_ASSERT(sizeof(ZSTD_inBuffer) == sizeof(struct zstd_in_buffer));
ZSTD_STATIC_ASSERT(offsetof(ZSTD_inBuffer, src) ==
offsetof(struct zstd_in_buffer, src));
ZSTD_STATIC_ASSERT(offsetof(ZSTD_inBuffer, size) ==
offsetof(struct zstd_in_buffer, size));
ZSTD_STATIC_ASSERT(offsetof(ZSTD_inBuffer, pos) ==
offsetof(struct zstd_in_buffer, pos));
/* Check output buffer */
ZSTD_STATIC_ASSERT(sizeof(ZSTD_outBuffer) ==
sizeof(struct zstd_out_buffer));
ZSTD_STATIC_ASSERT(offsetof(ZSTD_outBuffer, dst) ==
offsetof(struct zstd_out_buffer, dst));
ZSTD_STATIC_ASSERT(offsetof(ZSTD_outBuffer, size) ==
offsetof(struct zstd_out_buffer, size));
ZSTD_STATIC_ASSERT(offsetof(ZSTD_outBuffer, pos) ==
offsetof(struct zstd_out_buffer, pos));
} }
int zstd_min_clevel(void)
{
return ZSTD_minCLevel();
}
EXPORT_SYMBOL(zstd_min_clevel);
int zstd_max_clevel(void)
{
return ZSTD_maxCLevel();
}
EXPORT_SYMBOL(zstd_max_clevel);
size_t zstd_compress_bound(size_t src_size) size_t zstd_compress_bound(size_t src_size)
{ {
return ZSTD_compressBound(src_size); return ZSTD_compressBound(src_size);
} }
EXPORT_SYMBOL(zstd_compress_bound); EXPORT_SYMBOL(zstd_compress_bound);
struct zstd_parameters zstd_get_params(int level, zstd_parameters zstd_get_params(int level,
unsigned long long estimated_src_size) unsigned long long estimated_src_size)
{ {
const ZSTD_parameters params = ZSTD_getParams(level, estimated_src_size, 0); return ZSTD_getParams(level, estimated_src_size, 0);
struct zstd_parameters out;
/* no-op */
zstd_check_structs();
ZSTD_memcpy(&out, &params, sizeof(out));
return out;
} }
EXPORT_SYMBOL(zstd_get_params); EXPORT_SYMBOL(zstd_get_params);
size_t zstd_cctx_workspace_bound( size_t zstd_cctx_workspace_bound(const zstd_compression_parameters *cparams)
const struct zstd_compression_parameters *cparams)
{ {
ZSTD_compressionParameters p; return ZSTD_estimateCCtxSize_usingCParams(*cparams);
ZSTD_memcpy(&p, cparams, sizeof(p));
return ZSTD_estimateCCtxSize_usingCParams(p);
} }
EXPORT_SYMBOL(zstd_cctx_workspace_bound); EXPORT_SYMBOL(zstd_cctx_workspace_bound);
@@ -109,31 +94,23 @@ zstd_cctx *zstd_init_cctx(void *workspace, size_t workspace_size)
EXPORT_SYMBOL(zstd_init_cctx); EXPORT_SYMBOL(zstd_init_cctx);
size_t zstd_compress_cctx(zstd_cctx *cctx, void *dst, size_t dst_capacity, size_t zstd_compress_cctx(zstd_cctx *cctx, void *dst, size_t dst_capacity,
const void *src, size_t src_size, const struct zstd_parameters *parameters) const void *src, size_t src_size, const zstd_parameters *parameters)
{ {
ZSTD_parameters p; ZSTD_FORWARD_IF_ERR(zstd_cctx_init(cctx, parameters, src_size));
return ZSTD_compress2(cctx, dst, dst_capacity, src, src_size);
ZSTD_memcpy(&p, parameters, sizeof(p));
return ZSTD_compress_advanced(cctx, dst, dst_capacity, src, src_size, NULL, 0, p);
} }
EXPORT_SYMBOL(zstd_compress_cctx); EXPORT_SYMBOL(zstd_compress_cctx);
size_t zstd_cstream_workspace_bound( size_t zstd_cstream_workspace_bound(const zstd_compression_parameters *cparams)
const struct zstd_compression_parameters *cparams)
{ {
ZSTD_compressionParameters p; return ZSTD_estimateCStreamSize_usingCParams(*cparams);
ZSTD_memcpy(&p, cparams, sizeof(p));
return ZSTD_estimateCStreamSize_usingCParams(p);
} }
EXPORT_SYMBOL(zstd_cstream_workspace_bound); EXPORT_SYMBOL(zstd_cstream_workspace_bound);
zstd_cstream *zstd_init_cstream(const struct zstd_parameters *parameters, zstd_cstream *zstd_init_cstream(const zstd_parameters *parameters,
unsigned long long pledged_src_size, void *workspace, size_t workspace_size) unsigned long long pledged_src_size, void *workspace, size_t workspace_size)
{ {
ZSTD_parameters p;
zstd_cstream *cstream; zstd_cstream *cstream;
size_t ret;
if (workspace == NULL) if (workspace == NULL)
return NULL; return NULL;
@@ -146,9 +123,7 @@ zstd_cstream *zstd_init_cstream(const struct zstd_parameters *parameters,
if (pledged_src_size == 0) if (pledged_src_size == 0)
pledged_src_size = ZSTD_CONTENTSIZE_UNKNOWN; pledged_src_size = ZSTD_CONTENTSIZE_UNKNOWN;
ZSTD_memcpy(&p, parameters, sizeof(p)); if (ZSTD_isError(zstd_cctx_init(cstream, parameters, pledged_src_size)))
ret = ZSTD_initCStream_advanced(cstream, NULL, 0, p, pledged_src_size);
if (ZSTD_isError(ret))
return NULL; return NULL;
return cstream; return cstream;
@@ -162,43 +137,22 @@ size_t zstd_reset_cstream(zstd_cstream *cstream,
} }
EXPORT_SYMBOL(zstd_reset_cstream); EXPORT_SYMBOL(zstd_reset_cstream);
size_t zstd_compress_stream(zstd_cstream *cstream, size_t zstd_compress_stream(zstd_cstream *cstream, zstd_out_buffer *output,
struct zstd_out_buffer *output, struct zstd_in_buffer *input) zstd_in_buffer *input)
{ {
ZSTD_outBuffer o; return ZSTD_compressStream(cstream, output, input);
ZSTD_inBuffer i;
size_t ret;
ZSTD_memcpy(&o, output, sizeof(o));
ZSTD_memcpy(&i, input, sizeof(i));
ret = ZSTD_compressStream(cstream, &o, &i);
ZSTD_memcpy(output, &o, sizeof(o));
ZSTD_memcpy(input, &i, sizeof(i));
return ret;
} }
EXPORT_SYMBOL(zstd_compress_stream); EXPORT_SYMBOL(zstd_compress_stream);
size_t zstd_flush_stream(zstd_cstream *cstream, struct zstd_out_buffer *output) size_t zstd_flush_stream(zstd_cstream *cstream, zstd_out_buffer *output)
{ {
ZSTD_outBuffer o; return ZSTD_flushStream(cstream, output);
size_t ret;
ZSTD_memcpy(&o, output, sizeof(o));
ret = ZSTD_flushStream(cstream, &o);
ZSTD_memcpy(output, &o, sizeof(o));
return ret;
} }
EXPORT_SYMBOL(zstd_flush_stream); EXPORT_SYMBOL(zstd_flush_stream);
size_t zstd_end_stream(zstd_cstream *cstream, struct zstd_out_buffer *output) size_t zstd_end_stream(zstd_cstream *cstream, zstd_out_buffer *output)
{ {
ZSTD_outBuffer o; return ZSTD_endStream(cstream, output);
size_t ret;
ZSTD_memcpy(&o, output, sizeof(o));
ret = ZSTD_endStream(cstream, &o);
ZSTD_memcpy(output, &o, sizeof(o));
return ret;
} }
EXPORT_SYMBOL(zstd_end_stream); EXPORT_SYMBOL(zstd_end_stream);
+17 -34
View File
@@ -1,13 +1,20 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
/*
* Copyright (c) Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
*/
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/zstd.h> #include <linux/zstd.h>
#include "zstd.h"
#include "common/zstd_deps.h" #include "common/zstd_deps.h"
#include "common/zstd_errors.h"
/* Common symbols. zstd_compress must depend on zstd_decompress. */ /* Common symbols. zstd_compress must depend on zstd_decompress. */
@@ -17,7 +24,7 @@ unsigned int zstd_is_error(size_t code)
} }
EXPORT_SYMBOL(zstd_is_error); EXPORT_SYMBOL(zstd_is_error);
int zstd_get_error_code(size_t code) zstd_error_code zstd_get_error_code(size_t code)
{ {
return ZSTD_getErrorCode(code); return ZSTD_getErrorCode(code);
} }
@@ -74,19 +81,10 @@ size_t zstd_reset_dstream(zstd_dstream *dstream)
} }
EXPORT_SYMBOL(zstd_reset_dstream); EXPORT_SYMBOL(zstd_reset_dstream);
size_t zstd_decompress_stream(zstd_dstream *dstream, size_t zstd_decompress_stream(zstd_dstream *dstream, zstd_out_buffer *output,
struct zstd_out_buffer *output, struct zstd_in_buffer *input) zstd_in_buffer *input)
{ {
ZSTD_outBuffer o; return ZSTD_decompressStream(dstream, output, input);
ZSTD_inBuffer i;
size_t ret;
ZSTD_memcpy(&o, output, sizeof(o));
ZSTD_memcpy(&i, input, sizeof(i));
ret = ZSTD_decompressStream(dstream, &o, &i);
ZSTD_memcpy(output, &o, sizeof(o));
ZSTD_memcpy(input, &i, sizeof(i));
return ret;
} }
EXPORT_SYMBOL(zstd_decompress_stream); EXPORT_SYMBOL(zstd_decompress_stream);
@@ -96,27 +94,12 @@ size_t zstd_find_frame_compressed_size(const void *src, size_t src_size)
} }
EXPORT_SYMBOL(zstd_find_frame_compressed_size); EXPORT_SYMBOL(zstd_find_frame_compressed_size);
size_t zstd_get_frame_params(struct zstd_frame_params *params, const void *src, size_t zstd_get_frame_header(zstd_frame_header *header, const void *src,
size_t src_size) size_t src_size)
{ {
ZSTD_frameHeader h; return ZSTD_getFrameHeader(header, src, src_size);
const size_t ret = ZSTD_getFrameHeader(&h, src, src_size);
if (ret != 0)
return ret;
if (h.frameContentSize != ZSTD_CONTENTSIZE_UNKNOWN)
params->frame_content_size = h.frameContentSize;
else
params->frame_content_size = 0;
params->window_size = h.windowSize;
params->dict_id = h.dictID;
params->checksum_flag = h.checksumFlag;
return ret;
} }
EXPORT_SYMBOL(zstd_get_frame_params); EXPORT_SYMBOL(zstd_get_frame_header);
MODULE_LICENSE("Dual BSD/GPL"); MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("Zstd Decompressor"); MODULE_DESCRIPTION("Zstd Decompressor");
+5 -4
View File
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -71,7 +72,7 @@ static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) {
#endif /* ZSTD_DEPS_MATH64 */ #endif /* ZSTD_DEPS_MATH64 */
#endif /* ZSTD_DEPS_NEED_MATH64 */ #endif /* ZSTD_DEPS_NEED_MATH64 */
/* /*
* This is only requested when DEBUGLEVEL >= 1, meaning * This is only requested when DEBUGLEVEL >= 1, meaning
* it is disabled in production. * it is disabled in production.
* Need: * Need:
@@ -88,7 +89,7 @@ static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) {
#endif /* ZSTD_DEPS_ASSERT */ #endif /* ZSTD_DEPS_ASSERT */
#endif /* ZSTD_DEPS_NEED_ASSERT */ #endif /* ZSTD_DEPS_NEED_ASSERT */
/* /*
* This is only requested when DEBUGLEVEL >= 2, meaning * This is only requested when DEBUGLEVEL >= 2, meaning
* it is disabled in production. * it is disabled in production.
* Need: * Need:
@@ -105,7 +106,7 @@ static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) {
#endif /* ZSTD_DEPS_IO */ #endif /* ZSTD_DEPS_IO */
#endif /* ZSTD_DEPS_NEED_IO */ #endif /* ZSTD_DEPS_NEED_IO */
/* /*
* Only requested when MSAN is enabled. * Only requested when MSAN is enabled.
* Need: * Need:
* intptr_t * intptr_t
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. # Copyright (c) Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. # Copyright (c) Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021 Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021, Martin Liska, SUSE, Facebook, Inc. * Copyright (c) Martin Liska, SUSE, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. # Copyright (c) Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+7 -7
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* bitstream * bitstream
* Part of FSE library * Part of FSE library
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -293,22 +293,22 @@ MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, si
switch(srcSize) switch(srcSize)
{ {
case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16); case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
/* fall-through */ ZSTD_FALLTHROUGH;
case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24); case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
/* fall-through */ ZSTD_FALLTHROUGH;
case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32); case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
/* fall-through */ ZSTD_FALLTHROUGH;
case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24; case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
/* fall-through */ ZSTD_FALLTHROUGH;
case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16; case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
/* fall-through */ ZSTD_FALLTHROUGH;
case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8; case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8;
/* fall-through */ ZSTD_FALLTHROUGH;
default: break; default: break;
} }
+34 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -207,6 +207,39 @@
# define __has_feature(x) 0 # define __has_feature(x) 0
#endif #endif
/* C-language Attributes are added in C23. */
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L) && defined(__has_c_attribute)
# define ZSTD_HAS_C_ATTRIBUTE(x) __has_c_attribute(x)
#else
# define ZSTD_HAS_C_ATTRIBUTE(x) 0
#endif
/* Only use C++ attributes in C++. Some compilers report support for C++
* attributes when compiling with C.
*/
#if defined(__cplusplus) && defined(__has_cpp_attribute)
# define ZSTD_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
#else
# define ZSTD_HAS_CPP_ATTRIBUTE(x) 0
#endif
/* Define ZSTD_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute.
* - C23: https://en.cppreference.com/w/c/language/attributes/fallthrough
* - CPP17: https://en.cppreference.com/w/cpp/language/attributes/fallthrough
* - Else: __attribute__((__fallthrough__))
*/
#ifndef ZSTD_FALLTHROUGH
# if ZSTD_HAS_C_ATTRIBUTE(fallthrough)
# define ZSTD_FALLTHROUGH [[fallthrough]]
# elif ZSTD_HAS_CPP_ATTRIBUTE(fallthrough)
# define ZSTD_FALLTHROUGH [[fallthrough]]
# elif __has_attribute(__fallthrough__)
# define ZSTD_FALLTHROUGH __attribute__((__fallthrough__))
# else
# define ZSTD_FALLTHROUGH
# endif
#endif
/* detects whether we are being compiled under msan */ /* detects whether we are being compiled under msan */
#ifndef ZSTD_MEMORY_SANITIZER #ifndef ZSTD_MEMORY_SANITIZER
# if __has_feature(memory_sanitizer) # if __has_feature(memory_sanitizer)
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* debug * debug
* Part of FSE library * Part of FSE library
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* debug * debug
* Part of FSE library * Part of FSE library
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,6 +1,6 @@
/* ****************************************************************** /* ******************************************************************
* Common functions of New Generation Entropy library * Common functions of New Generation Entropy library
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* FSE : Finite State Entropy codec * FSE : Finite State Entropy codec
* Public Prototypes declaration * Public Prototypes declaration
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,6 +1,6 @@
/* ****************************************************************** /* ******************************************************************
* FSE : Finite State Entropy decoder * FSE : Finite State Entropy decoder
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* huff0 huffman codec, * huff0 huffman codec,
* part of Finite State Entropy library * part of Finite State Entropy library
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,6 +1,6 @@
/* /*
* xxHash - Fast Hash algorithm * xxHash - Fast Hash algorithm
* Copyright (c) 2012-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - xxHash homepage: http://www.xxhash.com * - xxHash homepage: http://www.xxhash.com
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* xxHash - Extremely Fast Hash algorithm * xxHash - Extremely Fast Hash algorithm
* Header File * Header File
* Copyright (c) 2012-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - xxHash source repository : https://github.com/Cyan4973/xxHash * - xxHash source repository : https://github.com/Cyan4973/xxHash
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+7 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -36,6 +36,11 @@
# define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */ # define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */
#endif #endif
#include "xxhash.h" /* XXH_reset, update, digest */ #include "xxhash.h" /* XXH_reset, update, digest */
#ifndef ZSTD_NO_TRACE
# include "zstd_trace.h"
#else
# define ZSTD_TRACE 0
#endif
#if defined (__cplusplus) #if defined (__cplusplus)
extern "C" { extern "C" {
@@ -365,7 +370,7 @@ typedef struct {
/* longLengthPos and longLengthID to allow us to represent either a single litLength or matchLength /* longLengthPos and longLengthID to allow us to represent either a single litLength or matchLength
* in the seqStore that has a value larger than U16 (if it exists). To do so, we increment * in the seqStore that has a value larger than U16 (if it exists). To do so, we increment
* the existing value of the litLength or matchLength by 0x10000. * the existing value of the litLength or matchLength by 0x10000.
*/ */
U32 longLengthID; /* 0 == no longLength; 1 == Represent the long literal; 2 == Represent the long match; */ U32 longLengthID; /* 0 == no longLength; 1 == Represent the long literal; 2 == Represent the long match; */
U32 longLengthPos; /* Index of the sequence to apply long length modification to */ U32 longLengthPos; /* Index of the sequence to apply long length modification to */
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,6 +1,6 @@
/* ****************************************************************** /* ******************************************************************
* FSE : Finite State Entropy encoder * FSE : Finite State Entropy encoder
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* hist : Histogram functions * hist : Histogram functions
* part of Finite State Entropy project * part of Finite State Entropy project
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
+1 -1
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* hist : Histogram functions * hist : Histogram functions
* part of Finite State Entropy project * part of Finite State Entropy project
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
+14 -11
View File
@@ -1,6 +1,6 @@
/* ****************************************************************** /* ******************************************************************
* Huffman encoder, part of New Generation Entropy library * Huffman encoder, part of New Generation Entropy library
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -596,16 +596,19 @@ HUF_compress1X_usingCTable_internal_body(void* dst, size_t dstSize,
n = srcSize & ~3; /* join to mod 4 */ n = srcSize & ~3; /* join to mod 4 */
switch (srcSize & 3) switch (srcSize & 3)
{ {
case 3 : HUF_encodeSymbol(&bitC, ip[n+ 2], CTable); case 3:
HUF_FLUSHBITS_2(&bitC); HUF_encodeSymbol(&bitC, ip[n+ 2], CTable);
/* fall-through */ HUF_FLUSHBITS_2(&bitC);
case 2 : HUF_encodeSymbol(&bitC, ip[n+ 1], CTable); ZSTD_FALLTHROUGH;
HUF_FLUSHBITS_1(&bitC); case 2:
/* fall-through */ HUF_encodeSymbol(&bitC, ip[n+ 1], CTable);
case 1 : HUF_encodeSymbol(&bitC, ip[n+ 0], CTable); HUF_FLUSHBITS_1(&bitC);
HUF_FLUSHBITS(&bitC); ZSTD_FALLTHROUGH;
/* fall-through */ case 1:
case 0 : /* fall-through */ HUF_encodeSymbol(&bitC, ip[n+ 0], CTable);
HUF_FLUSHBITS(&bitC);
ZSTD_FALLTHROUGH;
case 0: ZSTD_FALLTHROUGH;
default: break; default: break;
} }
+10 -7
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -14,7 +14,6 @@
#include "../common/zstd_deps.h" /* INT_MAX, ZSTD_memset, ZSTD_memcpy */ #include "../common/zstd_deps.h" /* INT_MAX, ZSTD_memset, ZSTD_memcpy */
#include "../common/cpu.h" #include "../common/cpu.h"
#include "../common/mem.h" #include "../common/mem.h"
#include "../common/zstd_trace.h"
#include "hist.h" /* HIST_countFast_wksp */ #include "hist.h" /* HIST_countFast_wksp */
#define FSE_STATIC_LINKING_ONLY /* FSE_encodeSymbol */ #define FSE_STATIC_LINKING_ONLY /* FSE_encodeSymbol */
#include "../common/fse.h" #include "../common/fse.h"
@@ -773,8 +772,8 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
return CCtxParams->ldmParams.bucketSizeLog; return CCtxParams->ldmParams.bucketSizeLog;
case ZSTD_c_ldmHashRateLog : case ZSTD_c_ldmHashRateLog :
RETURN_ERROR_IF(value > ZSTD_WINDOWLOG_MAX - ZSTD_HASHLOG_MIN, if (value!=0) /* 0 ==> default */
parameter_outOfBound, "Param out of bounds!"); BOUNDCHECK(ZSTD_c_ldmHashRateLog, value);
CCtxParams->ldmParams.hashRateLog = value; CCtxParams->ldmParams.hashRateLog = value;
return CCtxParams->ldmParams.hashRateLog; return CCtxParams->ldmParams.hashRateLog;
@@ -2978,7 +2977,9 @@ static size_t ZSTD_writeFrameHeader(void* dst, size_t dstCapacity,
if (!singleSegment) op[pos++] = windowLogByte; if (!singleSegment) op[pos++] = windowLogByte;
switch(dictIDSizeCode) switch(dictIDSizeCode)
{ {
default: assert(0); /* impossible */ default:
assert(0); /* impossible */
ZSTD_FALLTHROUGH;
case 0 : break; case 0 : break;
case 1 : op[pos] = (BYTE)(dictID); pos++; break; case 1 : op[pos] = (BYTE)(dictID); pos++; break;
case 2 : MEM_writeLE16(op+pos, (U16)dictID); pos+=2; break; case 2 : MEM_writeLE16(op+pos, (U16)dictID); pos+=2; break;
@@ -2986,7 +2987,9 @@ static size_t ZSTD_writeFrameHeader(void* dst, size_t dstCapacity,
} }
switch(fcsCode) switch(fcsCode)
{ {
default: assert(0); /* impossible */ default:
assert(0); /* impossible */
ZSTD_FALLTHROUGH;
case 0 : if (singleSegment) op[pos++] = (BYTE)(pledgedSrcSize); break; case 0 : if (singleSegment) op[pos++] = (BYTE)(pledgedSrcSize); break;
case 1 : MEM_writeLE16(op+pos, (U16)(pledgedSrcSize-256)); pos+=2; break; case 1 : MEM_writeLE16(op+pos, (U16)(pledgedSrcSize-256)); pos+=2; break;
case 2 : MEM_writeLE32(op+pos, (U32)(pledgedSrcSize)); pos+=4; break; case 2 : MEM_writeLE32(op+pos, (U32)(pledgedSrcSize)); pos+=4; break;
@@ -4333,7 +4336,7 @@ static size_t ZSTD_compressStream_generic(ZSTD_CStream* zcs,
zcs->outBuffFlushedSize = 0; zcs->outBuffFlushedSize = 0;
zcs->streamStage = zcss_flush; /* pass-through to flush stage */ zcs->streamStage = zcss_flush; /* pass-through to flush stage */
} }
/* fall-through */ ZSTD_FALLTHROUGH;
case zcss_flush: case zcss_flush:
DEBUGLOG(5, "flush stage"); DEBUGLOG(5, "flush stage");
assert(zcs->appliedParams.outBufferMode == ZSTD_bm_buffered); assert(zcs->appliedParams.outBufferMode == ZSTD_bm_buffered);
+2 -3
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -19,7 +19,6 @@
* Dependencies * Dependencies
***************************************/ ***************************************/
#include "../common/zstd_internal.h" #include "../common/zstd_internal.h"
#include "../common/zstd_trace.h" /* ZSTD_TraceCtx */
#include "zstd_cwksp.h" #include "zstd_cwksp.h"
#ifdef ZSTD_MULTITHREAD #ifdef ZSTD_MULTITHREAD
# include "zstdmt_compress.h" # include "zstdmt_compress.h"
@@ -487,7 +486,7 @@ MEM_STATIC int ZSTD_disableLiteralsCompression(const ZSTD_CCtx_params* cctxParam
return 1; return 1;
default: default:
assert(0 /* impossible: pre-validated */); assert(0 /* impossible: pre-validated */);
/* fall-through */ ZSTD_FALLTHROUGH;
case ZSTD_lcm_auto: case ZSTD_lcm_auto:
return (cctxParams->cParams.strategy == ZSTD_fast) && (cctxParams->cParams.targetLength > 0); return (cctxParams->cParams.strategy == ZSTD_fast) && (cctxParams->cParams.targetLength > 0);
} }
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+3 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -411,6 +411,8 @@ static size_t ZSTD_seqDecompressedSize(seqStore_t const* seqStore, const seqDef*
const seqDef* sp = sstart; const seqDef* sp = sstart;
size_t matchLengthSum = 0; size_t matchLengthSum = 0;
size_t litLengthSum = 0; size_t litLengthSum = 0;
/* Only used by assert(), suppress unused variable warnings in production. */
(void)litLengthSum;
while (send-sp > 0) { while (send-sp > 0) {
ZSTD_sequenceLength const seqLen = ZSTD_getSequenceLength(seqStore, sp); ZSTD_sequenceLength const seqLen = ZSTD_getSequenceLength(seqStore, sp);
litLengthSum += seqLen.litLength; litLengthSum += seqLen.litLength;
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -3
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -244,8 +244,6 @@ _search_next_long:
while (((ip>anchor) & (match>prefixLowest)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */ while (((ip>anchor) & (match>prefixLowest)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
} }
/* fall-through */
_match_found: _match_found:
offset_2 = offset_1; offset_2 = offset_1;
offset_1 = offset; offset_1 = offset;
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+7 -5
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -93,7 +93,7 @@ ZSTD_insertDUBT1(ZSTD_matchState_t* ms,
assert(curr >= btLow); assert(curr >= btLow);
assert(ip < iend); /* condition for ZSTD_count */ assert(ip < iend); /* condition for ZSTD_count */
while (nbCompares-- && (matchIndex > windowLow)) { for (; nbCompares && (matchIndex > windowLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask); U32* const nextPtr = bt + 2*(matchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
assert(matchIndex < curr); assert(matchIndex < curr);
@@ -185,7 +185,7 @@ ZSTD_DUBT_findBetterDictMatch (
(void)dictMode; (void)dictMode;
assert(dictMode == ZSTD_dictMatchState); assert(dictMode == ZSTD_dictMatchState);
while (nbCompares-- && (dictMatchIndex > dictLowLimit)) { for (; nbCompares && (dictMatchIndex > dictLowLimit); --nbCompares) {
U32* const nextPtr = dictBt + 2*(dictMatchIndex & btMask); U32* const nextPtr = dictBt + 2*(dictMatchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
const BYTE* match = dictBase + dictMatchIndex; const BYTE* match = dictBase + dictMatchIndex;
@@ -309,7 +309,7 @@ ZSTD_DUBT_findBestMatch(ZSTD_matchState_t* ms,
matchIndex = hashTable[h]; matchIndex = hashTable[h];
hashTable[h] = curr; /* Update Hash Table */ hashTable[h] = curr; /* Update Hash Table */
while (nbCompares-- && (matchIndex > windowLow)) { for (; nbCompares && (matchIndex > windowLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask); U32* const nextPtr = bt + 2*(matchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
const BYTE* match; const BYTE* match;
@@ -357,6 +357,7 @@ ZSTD_DUBT_findBestMatch(ZSTD_matchState_t* ms,
*smallerPtr = *largerPtr = 0; *smallerPtr = *largerPtr = 0;
assert(nbCompares <= (1U << ZSTD_SEARCHLOG_MAX)); /* Check we haven't underflowed. */
if (dictMode == ZSTD_dictMatchState && nbCompares) { if (dictMode == ZSTD_dictMatchState && nbCompares) {
bestLength = ZSTD_DUBT_findBetterDictMatch( bestLength = ZSTD_DUBT_findBetterDictMatch(
ms, ip, iend, ms, ip, iend,
@@ -660,6 +661,7 @@ size_t ZSTD_HcFindBestMatch_generic (
matchIndex = NEXT_IN_CHAIN(matchIndex, chainMask); matchIndex = NEXT_IN_CHAIN(matchIndex, chainMask);
} }
assert(nbAttempts <= (1U << ZSTD_SEARCHLOG_MAX)); /* Check we haven't underflowed. */
if (dictMode == ZSTD_dedicatedDictSearch) { if (dictMode == ZSTD_dedicatedDictSearch) {
const U32 ddsLowestIndex = dms->window.dictLimit; const U32 ddsLowestIndex = dms->window.dictLimit;
const BYTE* const ddsBase = dms->window.base; const BYTE* const ddsBase = dms->window.base;
@@ -1264,7 +1266,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
matchLength = ml2, start = ip, offset=offsetFound; matchLength = ml2, start = ip, offset=offsetFound;
} }
if (matchLength < 4) { if (matchLength < 4) {
ip += ((ip-anchor) >> kSearchStrength) + 1; /* jump faster over incompressible sections */ ip += ((ip-anchor) >> kSearchStrength) + 1; /* jump faster over incompressible sections */
continue; continue;
} }
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+19 -4
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Przemyslaw Skibinski, Yann Collet, Facebook, Inc. * Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -8,6 +8,20 @@
* You may select, at your option, one of the above-listed licenses. * You may select, at your option, one of the above-listed licenses.
*/ */
/**
* Disable inlining for the optimal parser for the kernel build.
* It is unlikely to be used in the kernel, and where it is used
* latency shouldn't matter because it is very slow to begin with.
* We prefer a ~180KB binary size win over faster optimal parsing.
*
* TODO(https://github.com/facebook/zstd/issues/2862):
* Improve the code size of the optimal parser in general, so we
* don't need this hack for the kernel build.
*/
#ifdef ZSTD_LINUX_KERNEL
#define ZSTD_NO_INLINE 1
#endif
#include "zstd_compress_internal.h" #include "zstd_compress_internal.h"
#include "hist.h" #include "hist.h"
#include "zstd_opt.h" #include "zstd_opt.h"
@@ -408,7 +422,7 @@ static U32 ZSTD_insertBt1(
hashTable[h] = curr; /* Update Hash Table */ hashTable[h] = curr; /* Update Hash Table */
assert(windowLow > 0); assert(windowLow > 0);
while (nbCompares-- && (matchIndex >= windowLow)) { for (; nbCompares && (matchIndex >= windowLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask); U32* const nextPtr = bt + 2*(matchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
assert(matchIndex < curr); assert(matchIndex < curr);
@@ -639,7 +653,7 @@ U32 ZSTD_insertBtAndGetAllMatches (
hashTable[h] = curr; /* Update Hash Table */ hashTable[h] = curr; /* Update Hash Table */
while (nbCompares-- && (matchIndex >= matchLow)) { for (; nbCompares && (matchIndex >= matchLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask); U32* const nextPtr = bt + 2*(matchIndex & btMask);
const BYTE* match; const BYTE* match;
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
@@ -692,12 +706,13 @@ U32 ZSTD_insertBtAndGetAllMatches (
*smallerPtr = *largerPtr = 0; *smallerPtr = *largerPtr = 0;
assert(nbCompares <= (1U << ZSTD_SEARCHLOG_MAX)); /* Check we haven't underflowed. */
if (dictMode == ZSTD_dictMatchState && nbCompares) { if (dictMode == ZSTD_dictMatchState && nbCompares) {
size_t const dmsH = ZSTD_hashPtr(ip, dmsHashLog, mls); size_t const dmsH = ZSTD_hashPtr(ip, dmsHashLog, mls);
U32 dictMatchIndex = dms->hashTable[dmsH]; U32 dictMatchIndex = dms->hashTable[dmsH];
const U32* const dmsBt = dms->chainTable; const U32* const dmsBt = dms->chainTable;
commonLengthSmaller = commonLengthLarger = 0; commonLengthSmaller = commonLengthLarger = 0;
while (nbCompares-- && (dictMatchIndex > dmsLowLimit)) { for (; nbCompares && (dictMatchIndex > dmsLowLimit); --nbCompares) {
const U32* const nextPtr = dmsBt + 2*(dictMatchIndex & dmsBtMask); const U32* const nextPtr = dmsBt + 2*(dictMatchIndex & dmsBtMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
const BYTE* match = dmsBase + dictMatchIndex; const BYTE* match = dmsBase + dictMatchIndex;
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+2 -2
View File
@@ -1,7 +1,7 @@
/* ****************************************************************** /* ******************************************************************
* huff0 huffman decoder, * huff0 huffman decoder,
* part of Finite State Entropy library * part of Finite State Entropy library
* Copyright (c) 2013-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* *
* You can contact the author at : * You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -886,7 +886,7 @@ HUF_decompress4X2_usingDTable_internal_body(
HUF_DECODE_SYMBOLX2_0(op2, &bitD2); HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
HUF_DECODE_SYMBOLX2_0(op3, &bitD3); HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
HUF_DECODE_SYMBOLX2_0(op4, &bitD4); HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
endSignal = (U32)LIKELY( endSignal = (U32)LIKELY((U32)
(BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished) (BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished)
& (BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished) & (BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished)
& (BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished) & (BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished)
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+20 -11
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -58,7 +58,6 @@
#include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */ #include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */
#include "../common/cpu.h" /* bmi2 */ #include "../common/cpu.h" /* bmi2 */
#include "../common/mem.h" /* low level memory routines */ #include "../common/mem.h" /* low level memory routines */
#include "../common/zstd_trace.h"
#define FSE_STATIC_LINKING_ONLY #define FSE_STATIC_LINKING_ONLY
#include "../common/fse.h" #include "../common/fse.h"
#define HUF_STATIC_LINKING_ONLY #define HUF_STATIC_LINKING_ONLY
@@ -178,12 +177,15 @@ static const ZSTD_DDict* ZSTD_DDictHashSet_getDDict(ZSTD_DDictHashSet* hashSet,
static ZSTD_DDictHashSet* ZSTD_createDDictHashSet(ZSTD_customMem customMem) { static ZSTD_DDictHashSet* ZSTD_createDDictHashSet(ZSTD_customMem customMem) {
ZSTD_DDictHashSet* ret = (ZSTD_DDictHashSet*)ZSTD_customMalloc(sizeof(ZSTD_DDictHashSet), customMem); ZSTD_DDictHashSet* ret = (ZSTD_DDictHashSet*)ZSTD_customMalloc(sizeof(ZSTD_DDictHashSet), customMem);
DEBUGLOG(4, "Allocating new hash set"); DEBUGLOG(4, "Allocating new hash set");
if (!ret)
return NULL;
ret->ddictPtrTable = (const ZSTD_DDict**)ZSTD_customCalloc(DDICT_HASHSET_TABLE_BASE_SIZE * sizeof(ZSTD_DDict*), customMem); ret->ddictPtrTable = (const ZSTD_DDict**)ZSTD_customCalloc(DDICT_HASHSET_TABLE_BASE_SIZE * sizeof(ZSTD_DDict*), customMem);
ret->ddictPtrTableSize = DDICT_HASHSET_TABLE_BASE_SIZE; if (!ret->ddictPtrTable) {
ret->ddictPtrCount = 0; ZSTD_customFree(ret, customMem);
if (!ret || !ret->ddictPtrTable) {
return NULL; return NULL;
} }
ret->ddictPtrTableSize = DDICT_HASHSET_TABLE_BASE_SIZE;
ret->ddictPtrCount = 0;
return ret; return ret;
} }
@@ -467,7 +469,9 @@ size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, s
} }
switch(dictIDSizeCode) switch(dictIDSizeCode)
{ {
default: assert(0); /* impossible */ default:
assert(0); /* impossible */
ZSTD_FALLTHROUGH;
case 0 : break; case 0 : break;
case 1 : dictID = ip[pos]; pos++; break; case 1 : dictID = ip[pos]; pos++; break;
case 2 : dictID = MEM_readLE16(ip+pos); pos+=2; break; case 2 : dictID = MEM_readLE16(ip+pos); pos+=2; break;
@@ -475,7 +479,9 @@ size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, s
} }
switch(fcsID) switch(fcsID)
{ {
default: assert(0); /* impossible */ default:
assert(0); /* impossible */
ZSTD_FALLTHROUGH;
case 0 : if (singleSegment) frameContentSize = ip[pos]; break; case 0 : if (singleSegment) frameContentSize = ip[pos]; break;
case 1 : frameContentSize = MEM_readLE16(ip+pos)+256; break; case 1 : frameContentSize = MEM_readLE16(ip+pos)+256; break;
case 2 : frameContentSize = MEM_readLE32(ip+pos); break; case 2 : frameContentSize = MEM_readLE32(ip+pos); break;
@@ -1010,7 +1016,7 @@ static ZSTD_DDict const* ZSTD_getDDict(ZSTD_DCtx* dctx)
switch (dctx->dictUses) { switch (dctx->dictUses) {
default: default:
assert(0 /* Impossible */); assert(0 /* Impossible */);
/* fall-through */ ZSTD_FALLTHROUGH;
case ZSTD_dont_use: case ZSTD_dont_use:
ZSTD_clearDict(dctx); ZSTD_clearDict(dctx);
return NULL; return NULL;
@@ -1074,7 +1080,9 @@ ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
{ {
default: /* should not happen */ default: /* should not happen */
assert(0); assert(0);
ZSTD_FALLTHROUGH;
case ZSTDds_getFrameHeaderSize: case ZSTDds_getFrameHeaderSize:
ZSTD_FALLTHROUGH;
case ZSTDds_decodeFrameHeader: case ZSTDds_decodeFrameHeader:
return ZSTDnit_frameHeader; return ZSTDnit_frameHeader;
case ZSTDds_decodeBlockHeader: case ZSTDds_decodeBlockHeader:
@@ -1086,6 +1094,7 @@ ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
case ZSTDds_checkChecksum: case ZSTDds_checkChecksum:
return ZSTDnit_checksum; return ZSTDnit_checksum;
case ZSTDds_decodeSkippableHeader: case ZSTDds_decodeSkippableHeader:
ZSTD_FALLTHROUGH;
case ZSTDds_skipFrame: case ZSTDds_skipFrame:
return ZSTDnit_skippableFrame; return ZSTDnit_skippableFrame;
} }
@@ -1901,7 +1910,7 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
zds->legacyVersion = 0; zds->legacyVersion = 0;
zds->hostageByte = 0; zds->hostageByte = 0;
zds->expectedOutBuffer = *output; zds->expectedOutBuffer = *output;
/* fall-through */ ZSTD_FALLTHROUGH;
case zdss_loadHeader : case zdss_loadHeader :
DEBUGLOG(5, "stage zdss_loadHeader (srcSize : %u)", (U32)(iend - ip)); DEBUGLOG(5, "stage zdss_loadHeader (srcSize : %u)", (U32)(iend - ip));
@@ -2039,7 +2048,7 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
zds->outBuffSize = neededOutBuffSize; zds->outBuffSize = neededOutBuffSize;
} } } } } }
zds->streamStage = zdss_read; zds->streamStage = zdss_read;
/* fall-through */ ZSTD_FALLTHROUGH;
case zdss_read: case zdss_read:
DEBUGLOG(5, "stage zdss_read"); DEBUGLOG(5, "stage zdss_read");
@@ -2058,7 +2067,7 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
} } } }
if (ip==iend) { someMoreWork = 0; break; } /* no more input */ if (ip==iend) { someMoreWork = 0; break; } /* no more input */
zds->streamStage = zdss_load; zds->streamStage = zdss_load;
/* fall-through */ ZSTD_FALLTHROUGH;
case zdss_load: case zdss_load:
{ size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds); { size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds);
+2 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -90,7 +90,7 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
case set_repeat: case set_repeat:
DEBUGLOG(5, "set_repeat flag : re-using stats from previous compressed literals block"); DEBUGLOG(5, "set_repeat flag : re-using stats from previous compressed literals block");
RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, ""); RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, "");
/* fall-through */ ZSTD_FALLTHROUGH;
case set_compressed: case set_compressed:
RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3"); RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3");
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -21,7 +21,6 @@
*********************************************************/ *********************************************************/
#include "../common/mem.h" /* BYTE, U16, U32 */ #include "../common/mem.h" /* BYTE, U16, U32 */
#include "../common/zstd_internal.h" /* ZSTD_seqSymbol */ #include "../common/zstd_internal.h" /* ZSTD_seqSymbol */
#include "../common/zstd_trace.h" /* ZSTD_TraceCtx */
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. # Copyright (c) Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+2 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
@@ -72,7 +72,7 @@ extern "C" {
/*------ Version ------*/ /*------ Version ------*/
#define ZSTD_VERSION_MAJOR 1 #define ZSTD_VERSION_MAJOR 1
#define ZSTD_VERSION_MINOR 4 #define ZSTD_VERSION_MINOR 4
#define ZSTD_VERSION_RELEASE 9 #define ZSTD_VERSION_RELEASE 10
#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE) #define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
/*! ZSTD_versionNumber() : /*! ZSTD_versionNumber() :
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. # Copyright (c) Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Przemyslaw Skibinski, Yann Collet, Facebook, Inc. * Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2019-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Przemyslaw Skibinski, Yann Collet, Facebook, Inc. * Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Przemyslaw Skibinski, Yann Collet, Facebook, Inc. * Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -2,7 +2,7 @@
# THIS BENCHMARK IS BEING REPLACED BY automated-bencmarking.py # THIS BENCHMARK IS BEING REPLACED BY automated-bencmarking.py
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Przemyslaw Skibinski, Yann Collet, Facebook, Inc. # Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. # Copyright (c) Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2021-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/** /**
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/** /**
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2017-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# ################################################################ # ################################################################
# Copyright (c) 2018-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
# ################################################################ # ################################################################
# Copyright (c) 2015-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+6 -6
View File
@@ -171,7 +171,7 @@ github, level 7 with dict, zstdcli,
github, level 9, zstdcli, 137122 github, level 9, zstdcli, 137122
github, level 9 with dict, zstdcli, 41332 github, level 9 with dict, zstdcli, 41332
github, level 13, zstdcli, 136064 github, level 13, zstdcli, 136064
github, level 13 with dict, zstdcli, 41743 github, level 13 with dict, zstdcli, 41900
github, level 16, zstdcli, 136064 github, level 16, zstdcli, 136064
github, level 16 with dict, zstdcli, 39577 github, level 16 with dict, zstdcli, 39577
github, level 19, zstdcli, 136064 github, level 19, zstdcli, 136064
@@ -303,7 +303,7 @@ github, level 7 with dict, advanced
github, level 9, advanced one pass, 135122 github, level 9, advanced one pass, 135122
github, level 9 with dict, advanced one pass, 39332 github, level 9 with dict, advanced one pass, 39332
github, level 13, advanced one pass, 134064 github, level 13, advanced one pass, 134064
github, level 13 with dict, advanced one pass, 39743 github, level 13 with dict, advanced one pass, 39900
github, level 16, advanced one pass, 134064 github, level 16, advanced one pass, 134064
github, level 16 with dict, advanced one pass, 37577 github, level 16 with dict, advanced one pass, 37577
github, level 19, advanced one pass, 134064 github, level 19, advanced one pass, 134064
@@ -437,7 +437,7 @@ github, level 7 with dict, advanced
github, level 9, advanced one pass small out, 135122 github, level 9, advanced one pass small out, 135122
github, level 9 with dict, advanced one pass small out, 39332 github, level 9 with dict, advanced one pass small out, 39332
github, level 13, advanced one pass small out, 134064 github, level 13, advanced one pass small out, 134064
github, level 13 with dict, advanced one pass small out, 39743 github, level 13 with dict, advanced one pass small out, 39900
github, level 16, advanced one pass small out, 134064 github, level 16, advanced one pass small out, 134064
github, level 16 with dict, advanced one pass small out, 37577 github, level 16 with dict, advanced one pass small out, 37577
github, level 19, advanced one pass small out, 134064 github, level 19, advanced one pass small out, 134064
@@ -571,7 +571,7 @@ github, level 7 with dict, advanced
github, level 9, advanced streaming, 135122 github, level 9, advanced streaming, 135122
github, level 9 with dict, advanced streaming, 39332 github, level 9 with dict, advanced streaming, 39332
github, level 13, advanced streaming, 134064 github, level 13, advanced streaming, 134064
github, level 13 with dict, advanced streaming, 39743 github, level 13 with dict, advanced streaming, 39900
github, level 16, advanced streaming, 134064 github, level 16, advanced streaming, 134064
github, level 16 with dict, advanced streaming, 37577 github, level 16 with dict, advanced streaming, 37577
github, level 19, advanced streaming, 134064 github, level 19, advanced streaming, 134064
@@ -689,7 +689,7 @@ github, level 7 with dict, old stre
github, level 9, old streaming, 135122 github, level 9, old streaming, 135122
github, level 9 with dict, old streaming, 39332 github, level 9 with dict, old streaming, 39332
github, level 13, old streaming, 134064 github, level 13, old streaming, 134064
github, level 13 with dict, old streaming, 39743 github, level 13 with dict, old streaming, 39900
github, level 16, old streaming, 134064 github, level 16, old streaming, 134064
github, level 16 with dict, old streaming, 37577 github, level 16 with dict, old streaming, 37577
github, level 19, old streaming, 134064 github, level 19, old streaming, 134064
@@ -877,7 +877,7 @@ github, level 5 with dict, old stre
github, level 6 with dict, old streaming cdcit, 38632 github, level 6 with dict, old streaming cdcit, 38632
github, level 7 with dict, old streaming cdcit, 38771 github, level 7 with dict, old streaming cdcit, 38771
github, level 9 with dict, old streaming cdcit, 39332 github, level 9 with dict, old streaming cdcit, 39332
github, level 13 with dict, old streaming cdcit, 39743 github, level 13 with dict, old streaming cdcit, 39900
github, level 16 with dict, old streaming cdcit, 37577 github, level 16 with dict, old streaming cdcit, 37577
github, level 19 with dict, old streaming cdcit, 37576 github, level 19 with dict, old streaming cdcit, 37576
github, no source size with dict, old streaming cdcit, 40654 github, no source size with dict, old streaming cdcit, 40654
1 Data Config Method Total compressed size
171 github level 9 zstdcli 137122
172 github level 9 with dict zstdcli 41332
173 github level 13 zstdcli 136064
174 github level 13 with dict zstdcli 41743 41900
175 github level 16 zstdcli 136064
176 github level 16 with dict zstdcli 39577
177 github level 19 zstdcli 136064
303 github level 9 advanced one pass 135122
304 github level 9 with dict advanced one pass 39332
305 github level 13 advanced one pass 134064
306 github level 13 with dict advanced one pass 39743 39900
307 github level 16 advanced one pass 134064
308 github level 16 with dict advanced one pass 37577
309 github level 19 advanced one pass 134064
437 github level 9 advanced one pass small out 135122
438 github level 9 with dict advanced one pass small out 39332
439 github level 13 advanced one pass small out 134064
440 github level 13 with dict advanced one pass small out 39743 39900
441 github level 16 advanced one pass small out 134064
442 github level 16 with dict advanced one pass small out 37577
443 github level 19 advanced one pass small out 134064
571 github level 9 advanced streaming 135122
572 github level 9 with dict advanced streaming 39332
573 github level 13 advanced streaming 134064
574 github level 13 with dict advanced streaming 39743 39900
575 github level 16 advanced streaming 134064
576 github level 16 with dict advanced streaming 37577
577 github level 19 advanced streaming 134064
689 github level 9 old streaming 135122
690 github level 9 with dict old streaming 39332
691 github level 13 old streaming 134064
692 github level 13 with dict old streaming 39743 39900
693 github level 16 old streaming 134064
694 github level 16 with dict old streaming 37577
695 github level 19 old streaming 134064
877 github level 6 with dict old streaming cdcit 38632
878 github level 7 with dict old streaming cdcit 38771
879 github level 9 with dict old streaming cdcit 39332
880 github level 13 with dict old streaming cdcit 39743 39900
881 github level 16 with dict old streaming cdcit 37577
882 github level 19 with dict old streaming cdcit 37576
883 github no source size with dict old streaming cdcit 40654
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2021, Facebook, Inc. * Copyright (c) Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+43 -29
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Facebook, Inc. # Copyright (c) Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
@@ -10,16 +10,12 @@
# You may select, at your option, one of the above-listed licenses. # You may select, at your option, one of the above-listed licenses.
# ################################################################ # ################################################################
import datetime
import enum import enum
import glob import glob
import os import os
import re
import sys import sys
YEAR = datetime.datetime.now().year
YEAR_STR = str(YEAR)
ROOT = os.path.join(os.path.dirname(__file__), "..") ROOT = os.path.join(os.path.dirname(__file__), "..")
RELDIRS = [ RELDIRS = [
@@ -28,22 +24,26 @@ RELDIRS = [
"lib", "lib",
"programs", "programs",
"tests", "tests",
"contrib/linux-kernel",
] ]
DIRS = [os.path.join(ROOT, d) for d in RELDIRS] REL_EXCLUDES = [
"contrib/linux-kernel/test/include",
]
class File(enum.Enum): def to_abs(d):
C = 1 return os.path.normpath(os.path.join(ROOT, d)) + "/"
H = 2
MAKE = 3
PY = 4
SUFFIX = { DIRS = [to_abs(d) for d in RELDIRS]
File.C: ".c", EXCLUDES = [to_abs(d) for d in REL_EXCLUDES]
File.H: ".h",
File.MAKE: "Makefile", SUFFIXES = [
File.PY: ".py", ".c",
} ".h",
"Makefile",
".mk",
".py",
]
# License should certainly be in the first 10 KB. # License should certainly be in the first 10 KB.
MAX_BYTES = 10000 MAX_BYTES = 10000
@@ -69,10 +69,13 @@ LICENSE_EXCEPTIONS = {
# From divsufsort # From divsufsort
"divsufsort.c", "divsufsort.c",
"divsufsort.h", "divsufsort.h",
# License is slightly different because it references GitHub
"linux_zstd.h",
} }
def valid_copyright(lines): def valid_copyright(lines):
YEAR_REGEX = re.compile("\d\d\d\d|present")
for line in lines: for line in lines:
line = line.strip() line = line.strip()
if "Copyright" not in line: if "Copyright" not in line:
@@ -81,8 +84,9 @@ def valid_copyright(lines):
return (False, f"Copyright line '{line}' contains 'present'!") return (False, f"Copyright line '{line}' contains 'present'!")
if "Facebook, Inc" not in line: if "Facebook, Inc" not in line:
return (False, f"Copyright line '{line}' does not contain 'Facebook, Inc'") return (False, f"Copyright line '{line}' does not contain 'Facebook, Inc'")
if YEAR_STR not in line: year = YEAR_REGEX.search(line)
return (False, f"Copyright line '{line}' does not contain {YEAR}") if year is not None:
return (False, f"Copyright line '{line}' contains {year.group(0)}; it should be yearless")
if " (c) " not in line: if " (c) " not in line:
return (False, f"Copyright line '{line}' does not contain ' (c) '!") return (False, f"Copyright line '{line}' does not contain ' (c) '!")
return (True, "") return (True, "")
@@ -107,35 +111,45 @@ def valid_file(filename):
with open(filename, "r") as f: with open(filename, "r") as f:
lines = f.readlines(MAX_BYTES) lines = f.readlines(MAX_BYTES)
lines = lines[:min(len(lines), MAX_LINES)] lines = lines[:min(len(lines), MAX_LINES)]
ok = True ok = True
if os.path.basename(filename) not in COPYRIGHT_EXCEPTIONS: if os.path.basename(filename) not in COPYRIGHT_EXCEPTIONS:
c_ok, c_msg = valid_copyright(lines) c_ok, c_msg = valid_copyright(lines)
if not c_ok: if not c_ok:
print(f"{filename}: {c_msg}") print(f"{filename}: {c_msg}", file=sys.stderr)
ok = False ok = False
if os.path.basename(filename) not in LICENSE_EXCEPTIONS: if os.path.basename(filename) not in LICENSE_EXCEPTIONS:
l_ok, l_msg = valid_license(lines) l_ok, l_msg = valid_license(lines)
if not l_ok: if not l_ok:
print(f"{filename}: {l_msg}") print(f"{filename}: {l_msg}", file=sys.stderr)
ok = False ok = False
return ok return ok
def exclude(filename):
for x in EXCLUDES:
if filename.startswith(x):
return True
return False
def main(): def main():
invalid_files = [] invalid_files = []
for directory in DIRS: for directory in DIRS:
for suffix in SUFFIX.values(): for suffix in SUFFIXES:
files = set(glob.glob(f"{directory}/*{suffix}")) files = set(glob.glob(f"{directory}/**/*{suffix}", recursive=True))
files |= set(glob.glob(f"{directory}/**/*{suffix}"))
for filename in files: for filename in files:
if exclude(filename):
continue
if not valid_file(filename): if not valid_file(filename):
invalid_files.append(filename) invalid_files.append(filename)
if len(invalid_files) > 0: if len(invalid_files) > 0:
print(f"Invalid files: {invalid_files}") print("Fail!", file=sys.stderr)
for f in invalid_files:
print(f)
return 1
else: else:
print("Pass!") print("Pass!", file=sys.stderr)
return len(invalid_files) return 0
if __name__ == "__main__": if __name__ == "__main__":
sys.exit(main()) sys.exit(main())
+1 -1
View File
@@ -2,7 +2,7 @@
"""Test zstd interoperability between versions""" """Test zstd interoperability between versions"""
# ################################################################ # ################################################################
# Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. # Copyright (c) Yann Collet, Facebook, Inc.
# All rights reserved. # All rights reserved.
# #
# This source code is licensed under both the BSD-style license (found in the # This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the
+1 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2021, Yann Collet, Facebook, Inc. * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved. * All rights reserved.
* *
* This source code is licensed under both the BSD-style license (found in the * This source code is licensed under both the BSD-style license (found in the