summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTW <tw@waldmann-edv.de>2020-10-04 19:44:08 +0200
committerGitHub <noreply@github.com>2020-10-04 19:44:08 +0200
commitd16d1c70cb0e6ccbd137f409e97a0ab77c637356 (patch)
treef2be9b2a9035de5561d6fb38cc8a21dc340438e8
parent27bd2048d1f6c0c4efc0ce5a5bb107dc0c02b042 (diff)
parent725402371dec5df73a175c3be2f983626708942c (diff)
Merge pull request #5384 from ThomasWaldmann/upgrade-zstd-master
upgrade bundled zstd to 1.4.5
-rw-r--r--setup_compress.py1
-rw-r--r--src/borg/algorithms/zstd/lib/common/bitstream.h68
-rw-r--r--src/borg/algorithms/zstd/lib/common/compiler.h22
-rw-r--r--src/borg/algorithms/zstd/lib/common/cpu.h2
-rw-r--r--src/borg/algorithms/zstd/lib/common/debug.c42
-rw-r--r--src/borg/algorithms/zstd/lib/common/debug.h42
-rw-r--r--src/borg/algorithms/zstd/lib/common/entropy_common.c46
-rw-r--r--src/borg/algorithms/zstd/lib/common/error_private.c3
-rw-r--r--src/borg/algorithms/zstd/lib/common/error_private.h8
-rw-r--r--src/borg/algorithms/zstd/lib/common/fse.h42
-rw-r--r--src/borg/algorithms/zstd/lib/common/fse_decompress.c49
-rw-r--r--src/borg/algorithms/zstd/lib/common/huf.h48
-rw-r--r--src/borg/algorithms/zstd/lib/common/mem.h2
-rw-r--r--src/borg/algorithms/zstd/lib/common/pool.c2
-rw-r--r--src/borg/algorithms/zstd/lib/common/pool.h4
-rw-r--r--src/borg/algorithms/zstd/lib/common/threading.c7
-rw-r--r--src/borg/algorithms/zstd/lib/common/threading.h7
-rw-r--r--src/borg/algorithms/zstd/lib/common/xxhash.c48
-rw-r--r--src/borg/algorithms/zstd/lib/common/xxhash.h42
-rw-r--r--src/borg/algorithms/zstd/lib/common/zstd_common.c2
-rw-r--r--src/borg/algorithms/zstd/lib/common/zstd_errors.h3
-rw-r--r--src/borg/algorithms/zstd/lib/common/zstd_internal.h127
-rw-r--r--src/borg/algorithms/zstd/lib/compress/fse_compress.c57
-rw-r--r--src/borg/algorithms/zstd/lib/compress/hist.c50
-rw-r--r--src/borg/algorithms/zstd/lib/compress/hist.h44
-rw-r--r--src/borg/algorithms/zstd/lib/compress/huf_compress.c184
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress.c725
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress_internal.h150
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress_literals.c16
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress_literals.h2
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress_sequences.c44
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress_sequences.h13
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress_superblock.c845
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_compress_superblock.h32
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_cwksp.h16
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_double_fast.c19
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_double_fast.h4
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_fast.c60
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_fast.h4
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_lazy.c45
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_lazy.h2
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_ldm.c32
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_ldm.h9
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_opt.c122
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstd_opt.h2
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstdmt_compress.c69
-rw-r--r--src/borg/algorithms/zstd/lib/compress/zstdmt_compress.h4
-rw-r--r--src/borg/algorithms/zstd/lib/decompress/huf_decompress.c138
-rw-r--r--src/borg/algorithms/zstd/lib/decompress/zstd_ddict.c20
-rw-r--r--src/borg/algorithms/zstd/lib/decompress/zstd_ddict.h4
-rw-r--r--src/borg/algorithms/zstd/lib/decompress/zstd_decompress.c412
-rw-r--r--src/borg/algorithms/zstd/lib/decompress/zstd_decompress_block.c515
-rw-r--r--src/borg/algorithms/zstd/lib/decompress/zstd_decompress_block.h6
-rw-r--r--src/borg/algorithms/zstd/lib/decompress/zstd_decompress_internal.h22
-rw-r--r--src/borg/algorithms/zstd/lib/deprecated/zbuff.h6
-rw-r--r--src/borg/algorithms/zstd/lib/deprecated/zbuff_common.c4
-rw-r--r--src/borg/algorithms/zstd/lib/deprecated/zbuff_compress.c2
-rw-r--r--src/borg/algorithms/zstd/lib/deprecated/zbuff_decompress.c2
-rw-r--r--src/borg/algorithms/zstd/lib/dictBuilder/cover.c10
-rw-r--r--src/borg/algorithms/zstd/lib/dictBuilder/cover.h18
-rw-r--r--src/borg/algorithms/zstd/lib/dictBuilder/fastcover.c18
-rw-r--r--src/borg/algorithms/zstd/lib/dictBuilder/zdict.c42
-rw-r--r--src/borg/algorithms/zstd/lib/dictBuilder/zdict.h79
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_legacy.h8
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v01.c30
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v01.h2
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v02.c16
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v02.h2
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v03.c16
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v03.h2
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v04.c20
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v04.h2
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v05.c30
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v05.h4
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v06.c30
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v06.h2
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v07.c36
-rw-r--r--src/borg/algorithms/zstd/lib/legacy/zstd_v07.h2
-rw-r--r--src/borg/algorithms/zstd/lib/zstd.h83
79 files changed, 3134 insertions, 1616 deletions
diff --git a/setup_compress.py b/setup_compress.py
index 071ab129d..87cb887e0 100644
--- a/setup_compress.py
+++ b/setup_compress.py
@@ -28,6 +28,7 @@ zstd_sources = [
'lib/compress/zstd_compress.c',
'lib/compress/zstd_compress_literals.c',
'lib/compress/zstd_compress_sequences.c',
+ 'lib/compress/zstd_compress_superblock.c',
'lib/compress/zstd_double_fast.c',
'lib/compress/zstd_fast.c',
'lib/compress/zstd_lazy.c',
diff --git a/src/borg/algorithms/zstd/lib/common/bitstream.h b/src/borg/algorithms/zstd/lib/common/bitstream.h
index 1c294b80d..37b99c01e 100644
--- a/src/borg/algorithms/zstd/lib/common/bitstream.h
+++ b/src/borg/algorithms/zstd/lib/common/bitstream.h
@@ -1,35 +1,15 @@
/* ******************************************************************
- bitstream
- Part of FSE library
- Copyright (C) 2013-present, Yann Collet.
-
- BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following disclaimer
- in the documentation and/or other materials provided with the
- distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- You can contact the author at :
- - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ * bitstream
+ * Part of FSE library
+ * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ *
+ * 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.
****************************************************************** */
#ifndef BITSTREAM_H_MODULE
#define BITSTREAM_H_MODULE
@@ -48,6 +28,7 @@ extern "C" {
* Dependencies
******************************************/
#include "mem.h" /* unaligned access routines */
+#include "compiler.h" /* UNLIKELY() */
#include "debug.h" /* assert(), DEBUGLOG(), RAWLOG() */
#include "error_private.h" /* error codes and messages */
@@ -161,8 +142,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
{
# if defined(_MSC_VER) /* Visual */
unsigned long r=0;
- _BitScanReverse ( &r, val );
- return (unsigned) r;
+ return _BitScanReverse ( &r, val ) ? (unsigned)r : 0;
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
return __builtin_clz (val) ^ 31;
# elif defined(__ICCARM__) /* IAR Intrinsic */
@@ -411,6 +391,23 @@ MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits)
return value;
}
+/*! BIT_reloadDStreamFast() :
+ * Similar to BIT_reloadDStream(), but with two differences:
+ * 1. bitsConsumed <= sizeof(bitD->bitContainer)*8 must hold!
+ * 2. Returns BIT_DStream_overflow when bitD->ptr < bitD->limitPtr, at this
+ * point you must use BIT_reloadDStream() to reload.
+ */
+MEM_STATIC BIT_DStream_status BIT_reloadDStreamFast(BIT_DStream_t* bitD)
+{
+ if (UNLIKELY(bitD->ptr < bitD->limitPtr))
+ return BIT_DStream_overflow;
+ assert(bitD->bitsConsumed <= sizeof(bitD->bitContainer)*8);
+ bitD->ptr -= bitD->bitsConsumed >> 3;
+ bitD->bitsConsumed &= 7;
+ bitD->bitContainer = MEM_readLEST(bitD->ptr);
+ return BIT_DStream_unfinished;
+}
+
/*! BIT_reloadDStream() :
* Refill `bitD` from buffer previously set in BIT_initDStream() .
* This function is safe, it guarantees it will not read beyond src buffer.
@@ -422,10 +419,7 @@ MEM_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD)
return BIT_DStream_overflow;
if (bitD->ptr >= bitD->limitPtr) {
- bitD->ptr -= bitD->bitsConsumed >> 3;
- bitD->bitsConsumed &= 7;
- bitD->bitContainer = MEM_readLEST(bitD->ptr);
- return BIT_DStream_unfinished;
+ return BIT_reloadDStreamFast(bitD);
}
if (bitD->ptr == bitD->start) {
if (bitD->bitsConsumed < sizeof(bitD->bitContainer)*8) return BIT_DStream_endOfBuffer;
diff --git a/src/borg/algorithms/zstd/lib/common/compiler.h b/src/borg/algorithms/zstd/lib/common/compiler.h
index 1877a0c1d..95e948352 100644
--- a/src/borg/algorithms/zstd/lib/common/compiler.h
+++ b/src/borg/algorithms/zstd/lib/common/compiler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -17,7 +17,7 @@
/* force inlining */
#if !defined(ZSTD_NO_INLINE)
-#if defined (__GNUC__) || defined(__cplusplus) || defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
+#if (defined(__GNUC__) && !defined(__STRICT_ANSI__)) || defined(__cplusplus) || defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
# define INLINE_KEYWORD inline
#else
# define INLINE_KEYWORD
@@ -114,6 +114,9 @@
# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
# define PREFETCH_L1(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
# define PREFETCH_L2(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T1)
+# elif defined(__aarch64__)
+# define PREFETCH_L1(ptr) __asm__ __volatile__("prfm pldl1keep, %0" ::"Q"(*(ptr)))
+# define PREFETCH_L2(ptr) __asm__ __volatile__("prfm pldl2keep, %0" ::"Q"(*(ptr)))
# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
# define PREFETCH_L1(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)
# define PREFETCH_L2(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 2 /* locality */)
@@ -136,7 +139,7 @@
/* vectorization
* older GCC (pre gcc-4.3 picked as the cutoff) uses a different syntax */
-#if !defined(__clang__) && defined(__GNUC__)
+#if !defined(__INTEL_COMPILER) && !defined(__clang__) && defined(__GNUC__)
# if (__GNUC__ == 4 && __GNUC_MINOR__ > 3) || (__GNUC__ >= 5)
# define DONT_VECTORIZE __attribute__((optimize("no-tree-vectorize")))
# else
@@ -146,6 +149,19 @@
# define DONT_VECTORIZE
#endif
+/* Tell the compiler that a branch is likely or unlikely.
+ * Only use these macros if it causes the compiler to generate better code.
+ * If you can remove a LIKELY/UNLIKELY annotation without speed changes in gcc
+ * and clang, please do.
+ */
+#if defined(__GNUC__)
+#define LIKELY(x) (__builtin_expect((x), 1))
+#define UNLIKELY(x) (__builtin_expect((x), 0))
+#else
+#define LIKELY(x) (x)
+#define UNLIKELY(x) (x)
+#endif
+
/* disable warnings */
#ifdef _MSC_VER /* Visual Studio */
# include <intrin.h> /* For Visual 2005 */
diff --git a/src/borg/algorithms/zstd/lib/common/cpu.h b/src/borg/algorithms/zstd/lib/common/cpu.h
index 5f0923fc9..6e8a974f6 100644
--- a/src/borg/algorithms/zstd/lib/common/cpu.h
+++ b/src/borg/algorithms/zstd/lib/common/cpu.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-present, Facebook, Inc.
+ * Copyright (c) 2018-2020, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/src/borg/algorithms/zstd/lib/common/debug.c b/src/borg/algorithms/zstd/lib/common/debug.c
index 3ebdd1cb1..f303f4a2e 100644
--- a/src/borg/algorithms/zstd/lib/common/debug.c
+++ b/src/borg/algorithms/zstd/lib/common/debug.c
@@ -1,35 +1,15 @@
/* ******************************************************************
- debug
- Part of FSE library
- Copyright (C) 2013-present, Yann Collet.
-
- BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following disclaimer
- in the documentation and/or other materials provided with the
- distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- You can contact the author at :
- - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ * debug
+ * Part of FSE library
+ * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ *
+ * 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.
****************************************************************** */
diff --git a/src/borg/algorithms/zstd/lib/common/debug.h b/src/borg/algorithms/zstd/lib/common/debug.h
index b4fc89d49..ac6224888 100644
--- a/src/borg/algorithms/zstd/lib/common/debug.h
+++ b/src/borg/algorithms/zstd/lib/common/debug.h
@@ -1,35 +1,15 @@
/* ******************************************************************
- debug
- Part of FSE library
- Copyright (C) 2013-present, Yann Collet.
-
- BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following disclaimer
- in the documentation and/or other materials provided with the
- distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- You can contact the author at :
- - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ * debug
+ * Part of FSE library
+ * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ *
+ * 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.
****************************************************************** */
diff --git a/src/borg/algorithms/zstd/lib/common/entropy_common.c b/src/borg/algorithms/zstd/lib/common/entropy_common.c
index b12944e1d..9d3e4e8e3 100644
--- a/src/borg/algorithms/zstd/lib/common/entropy_common.c
+++ b/src/borg/algorithms/zstd/lib/common/entropy_common.c
@@ -1,36 +1,16 @@
-/*
- Common functions of New Generation Entropy library
- Copyright (C) 2016, Yann Collet.
-
- BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following disclaimer
- in the documentation and/or other materials provided with the
- distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVE