zstdlib 0.7.0-x64-mingw32 → 0.10.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +20 -0
- data/README.md +7 -1
- data/Rakefile +38 -8
- data/ext/{zstdlib → zstdlib_c}/extconf.rb +11 -6
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.2/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.3/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.4/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.5/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.6/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.7/zstdlib.c +2 -2
- data/ext/zstdlib_c/ruby/zlib-3.0/zstdlib.c +4994 -0
- data/ext/zstdlib_c/ruby/zlib-3.1/zstdlib.c +5076 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/adler32.c +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/compress.c +0 -0
- data/ext/zstdlib_c/zlib-1.2.12/crc32.c +1116 -0
- data/ext/zstdlib_c/zlib-1.2.12/crc32.h +9446 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/deflate.c +78 -30
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/deflate.h +12 -15
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzclose.c +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzguts.h +3 -2
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzlib.c +5 -3
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzread.c +5 -7
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzwrite.c +25 -13
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/infback.c +2 -1
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inffast.c +14 -14
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inffast.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inffixed.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inflate.c +39 -8
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inflate.h +3 -2
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inftrees.c +3 -3
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inftrees.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/trees.c +27 -48
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/trees.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/uncompr.c +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zconf.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zlib.h +123 -100
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zutil.c +2 -2
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zutil.h +12 -9
- data/ext/{zstdlib → zstdlib_c}/zlib.mk +0 -0
- data/ext/{zstdlib → zstdlib_c}/zlibwrapper/zlibwrapper.c +1 -5
- data/ext/{zstdlib → zstdlib_c}/zlibwrapper.mk +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/bitstream.h +46 -22
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/compiler.h +335 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/cpu.h +1 -3
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/debug.c +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/debug.h +12 -19
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/entropy_common.c +368 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/error_private.c +2 -1
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/error_private.h +159 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/fse.h +41 -12
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/fse_decompress.c +139 -22
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/huf.h +47 -23
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/mem.h +87 -98
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/pool.c +34 -23
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/pool.h +4 -4
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/portability_macros.h +137 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/threading.c +6 -5
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/threading.h +0 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/xxhash.c +24 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/xxhash.h +5686 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/zstd_common.c +10 -10
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/zstd_deps.h +111 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/zstd_internal.h +191 -145
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/zstd_trace.h +163 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/clevels.h +134 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/fse_compress.c +89 -46
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/hist.c +27 -29
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/hist.h +2 -2
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/huf_compress.c +1370 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress.c +2917 -868
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_internal.h +458 -125
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_literals.c +12 -11
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_literals.h +4 -2
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_sequences.c +41 -18
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_sequences.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_superblock.c +26 -298
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_superblock.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_cwksp.h +234 -83
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_double_fast.c +313 -138
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_double_fast.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_fast.c +329 -150
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_fast.h +1 -1
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_lazy.c +2104 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_lazy.h +125 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_ldm.c +321 -216
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_ldm.h +9 -2
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_ldm_geartab.h +106 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_opt.c +412 -166
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_opt.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstdmt_compress.c +169 -453
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstdmt_compress.h +113 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/huf_decompress.c +1044 -403
- data/ext/zstdlib_c/zstd-1.5.2/lib/decompress/huf_decompress_amd64.S +585 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_ddict.c +9 -9
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_ddict.h +2 -2
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress.c +450 -105
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress_block.c +913 -273
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress_block.h +14 -5
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress_internal.h +59 -12
- data/ext/zstdlib_c/zstd-1.5.2/lib/zdict.h +452 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/zstd.h +699 -214
- data/ext/{zstdlib/zstd-1.4.5/lib/common → zstdlib_c/zstd-1.5.2/lib}/zstd_errors.h +2 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzclose.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzcompatibility.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzguts.h +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzlib.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzread.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzwrite.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/zstd_zlibwrapper.c +133 -44
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/zstd_zlibwrapper.h +1 -1
- data/ext/zstdlib_c/zstd.mk +15 -0
- data/lib/2.4/zstdlib_c.so +0 -0
- data/lib/2.5/zstdlib_c.so +0 -0
- data/lib/2.6/zstdlib_c.so +0 -0
- data/lib/2.7/zstdlib_c.so +0 -0
- data/lib/3.0/zstdlib_c.so +0 -0
- data/lib/zstdlib.rb +2 -2
- metadata +124 -116
- data/ext/zstdlib/zlib-1.2.11/crc32.c +0 -442
- data/ext/zstdlib/zlib-1.2.11/crc32.h +0 -441
- data/ext/zstdlib/zstd-1.4.5/lib/common/compiler.h +0 -175
- data/ext/zstdlib/zstd-1.4.5/lib/common/entropy_common.c +0 -216
- data/ext/zstdlib/zstd-1.4.5/lib/common/error_private.h +0 -80
- data/ext/zstdlib/zstd-1.4.5/lib/common/xxhash.c +0 -864
- data/ext/zstdlib/zstd-1.4.5/lib/common/xxhash.h +0 -285
- data/ext/zstdlib/zstd-1.4.5/lib/compress/huf_compress.c +0 -798
- data/ext/zstdlib/zstd-1.4.5/lib/compress/zstd_lazy.c +0 -1138
- data/ext/zstdlib/zstd-1.4.5/lib/compress/zstd_lazy.h +0 -67
- data/ext/zstdlib/zstd-1.4.5/lib/compress/zstdmt_compress.h +0 -192
- data/ext/zstdlib/zstd.mk +0 -14
- data/lib/2.2/zstdlib.so +0 -0
- data/lib/2.3/zstdlib.so +0 -0
- data/lib/2.4/zstdlib.so +0 -0
- data/lib/2.5/zstdlib.so +0 -0
- data/lib/2.6/zstdlib.so +0 -0
- data/lib/2.7/zstdlib.so +0 -0
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 | 
            -
             * Copyright (c)  | 
| 2 | 
            +
             * Copyright (c) Yann Collet, Facebook, Inc.
         | 
| 3 3 | 
             
             * All rights reserved.
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             * This source code is licensed under both the BSD-style license (found in the
         | 
| @@ -18,8 +18,10 @@ extern "C" { | |
| 18 18 | 
             
            /*-****************************************
         | 
| 19 19 | 
             
            *  Dependencies
         | 
| 20 20 | 
             
            ******************************************/
         | 
| 21 | 
            -
            #include <stddef.h> | 
| 22 | 
            -
            #include  | 
| 21 | 
            +
            #include <stddef.h>  /* size_t, ptrdiff_t */
         | 
| 22 | 
            +
            #include "compiler.h"  /* __has_builtin */
         | 
| 23 | 
            +
            #include "debug.h"  /* DEBUG_STATIC_ASSERT */
         | 
| 24 | 
            +
            #include "zstd_deps.h"  /* ZSTD_memcpy */
         | 
| 23 25 |  | 
| 24 26 |  | 
| 25 27 | 
             
            /*-****************************************
         | 
| @@ -39,94 +41,18 @@ extern "C" { | |
| 39 41 | 
             
            #  define MEM_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */
         | 
| 40 42 | 
             
            #endif
         | 
| 41 43 |  | 
| 42 | 
            -
            #ifndef __has_builtin
         | 
| 43 | 
            -
            #  define __has_builtin(x) 0  /* compat. with non-clang compilers */
         | 
| 44 | 
            -
            #endif
         | 
| 45 | 
            -
             | 
| 46 | 
            -
            /* code only tested on 32 and 64 bits systems */
         | 
| 47 | 
            -
            #define MEM_STATIC_ASSERT(c)   { enum { MEM_static_assert = 1/(int)(!!(c)) }; }
         | 
| 48 | 
            -
            MEM_STATIC void MEM_check(void) { MEM_STATIC_ASSERT((sizeof(size_t)==4) || (sizeof(size_t)==8)); }
         | 
| 49 | 
            -
             | 
| 50 | 
            -
            /* detects whether we are being compiled under msan */
         | 
| 51 | 
            -
            #if defined (__has_feature)
         | 
| 52 | 
            -
            #  if __has_feature(memory_sanitizer)
         | 
| 53 | 
            -
            #    define MEMORY_SANITIZER 1
         | 
| 54 | 
            -
            #  endif
         | 
| 55 | 
            -
            #endif
         | 
| 56 | 
            -
             | 
| 57 | 
            -
            #if defined (MEMORY_SANITIZER)
         | 
| 58 | 
            -
            /* Not all platforms that support msan provide sanitizers/msan_interface.h.
         | 
| 59 | 
            -
             * We therefore declare the functions we need ourselves, rather than trying to
         | 
| 60 | 
            -
             * include the header file... */
         | 
| 61 | 
            -
             | 
| 62 | 
            -
            #include <stdint.h> /* intptr_t */
         | 
| 63 | 
            -
             | 
| 64 | 
            -
            /* Make memory region fully initialized (without changing its contents). */
         | 
| 65 | 
            -
            void __msan_unpoison(const volatile void *a, size_t size);
         | 
| 66 | 
            -
             | 
| 67 | 
            -
            /* Make memory region fully uninitialized (without changing its contents).
         | 
| 68 | 
            -
               This is a legacy interface that does not update origin information. Use
         | 
| 69 | 
            -
               __msan_allocated_memory() instead. */
         | 
| 70 | 
            -
            void __msan_poison(const volatile void *a, size_t size);
         | 
| 71 | 
            -
             | 
| 72 | 
            -
            /* Returns the offset of the first (at least partially) poisoned byte in the
         | 
| 73 | 
            -
               memory range, or -1 if the whole range is good. */
         | 
| 74 | 
            -
            intptr_t __msan_test_shadow(const volatile void *x, size_t size);
         | 
| 75 | 
            -
            #endif
         | 
| 76 | 
            -
             | 
| 77 | 
            -
            /* detects whether we are being compiled under asan */
         | 
| 78 | 
            -
            #if defined (__has_feature)
         | 
| 79 | 
            -
            #  if __has_feature(address_sanitizer)
         | 
| 80 | 
            -
            #    define ADDRESS_SANITIZER 1
         | 
| 81 | 
            -
            #  endif
         | 
| 82 | 
            -
            #elif defined(__SANITIZE_ADDRESS__)
         | 
| 83 | 
            -
            #  define ADDRESS_SANITIZER 1
         | 
| 84 | 
            -
            #endif
         | 
| 85 | 
            -
             | 
| 86 | 
            -
            #if defined (ADDRESS_SANITIZER)
         | 
| 87 | 
            -
            /* Not all platforms that support asan provide sanitizers/asan_interface.h.
         | 
| 88 | 
            -
             * We therefore declare the functions we need ourselves, rather than trying to
         | 
| 89 | 
            -
             * include the header file... */
         | 
| 90 | 
            -
             | 
| 91 | 
            -
            /**
         | 
| 92 | 
            -
             * Marks a memory region (<c>[addr, addr+size)</c>) as unaddressable.
         | 
| 93 | 
            -
             *
         | 
| 94 | 
            -
             * This memory must be previously allocated by your program. Instrumented
         | 
| 95 | 
            -
             * code is forbidden from accessing addresses in this region until it is
         | 
| 96 | 
            -
             * unpoisoned. This function is not guaranteed to poison the entire region -
         | 
| 97 | 
            -
             * it could poison only a subregion of <c>[addr, addr+size)</c> due to ASan
         | 
| 98 | 
            -
             * alignment restrictions.
         | 
| 99 | 
            -
             *
         | 
| 100 | 
            -
             * \note This function is not thread-safe because no two threads can poison or
         | 
| 101 | 
            -
             * unpoison memory in the same memory region simultaneously.
         | 
| 102 | 
            -
             *
         | 
| 103 | 
            -
             * \param addr Start of memory region.
         | 
| 104 | 
            -
             * \param size Size of memory region. */
         | 
| 105 | 
            -
            void __asan_poison_memory_region(void const volatile *addr, size_t size);
         | 
| 106 | 
            -
             | 
| 107 | 
            -
            /**
         | 
| 108 | 
            -
             * Marks a memory region (<c>[addr, addr+size)</c>) as addressable.
         | 
| 109 | 
            -
             *
         | 
| 110 | 
            -
             * This memory must be previously allocated by your program. Accessing
         | 
| 111 | 
            -
             * addresses in this region is allowed until this region is poisoned again.
         | 
| 112 | 
            -
             * This function could unpoison a super-region of <c>[addr, addr+size)</c> due
         | 
| 113 | 
            -
             * to ASan alignment restrictions.
         | 
| 114 | 
            -
             *
         | 
| 115 | 
            -
             * \note This function is not thread-safe because no two threads can
         | 
| 116 | 
            -
             * poison or unpoison memory in the same memory region simultaneously.
         | 
| 117 | 
            -
             *
         | 
| 118 | 
            -
             * \param addr Start of memory region.
         | 
| 119 | 
            -
             * \param size Size of memory region. */
         | 
| 120 | 
            -
            void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
         | 
| 121 | 
            -
            #endif
         | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 44 | 
             
            /*-**************************************************************
         | 
| 125 45 | 
             
            *  Basic Types
         | 
| 126 46 | 
             
            *****************************************************************/
         | 
| 127 47 | 
             
            #if  !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
         | 
| 128 | 
            -
            #  | 
| 48 | 
            +
            #  if defined(_AIX)
         | 
| 49 | 
            +
            #    include <inttypes.h>
         | 
| 50 | 
            +
            #  else
         | 
| 51 | 
            +
            #    include <stdint.h> /* intptr_t */
         | 
| 52 | 
            +
            #  endif
         | 
| 129 53 | 
             
              typedef   uint8_t BYTE;
         | 
| 54 | 
            +
              typedef   uint8_t U8;
         | 
| 55 | 
            +
              typedef    int8_t S8;
         | 
| 130 56 | 
             
              typedef  uint16_t U16;
         | 
| 131 57 | 
             
              typedef   int16_t S16;
         | 
| 132 58 | 
             
              typedef  uint32_t U32;
         | 
| @@ -139,6 +65,8 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size); | |
| 139 65 | 
             
            #  error "this implementation requires char to be exactly 8-bit type"
         | 
| 140 66 | 
             
            #endif
         | 
| 141 67 | 
             
              typedef unsigned char      BYTE;
         | 
| 68 | 
            +
              typedef unsigned char      U8;
         | 
| 69 | 
            +
              typedef   signed char      S8;
         | 
| 142 70 | 
             
            #if USHRT_MAX != 65535
         | 
| 143 71 | 
             
            #  error "this implementation requires short to be exactly 16-bit type"
         | 
| 144 72 | 
             
            #endif
         | 
| @@ -157,7 +85,53 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size); | |
| 157 85 |  | 
| 158 86 |  | 
| 159 87 | 
             
            /*-**************************************************************
         | 
| 160 | 
            -
            *  Memory I/O
         | 
| 88 | 
            +
            *  Memory I/O API
         | 
| 89 | 
            +
            *****************************************************************/
         | 
| 90 | 
            +
            /*=== Static platform detection ===*/
         | 
| 91 | 
            +
            MEM_STATIC unsigned MEM_32bits(void);
         | 
| 92 | 
            +
            MEM_STATIC unsigned MEM_64bits(void);
         | 
| 93 | 
            +
            MEM_STATIC unsigned MEM_isLittleEndian(void);
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            /*=== Native unaligned read/write ===*/
         | 
| 96 | 
            +
            MEM_STATIC U16 MEM_read16(const void* memPtr);
         | 
| 97 | 
            +
            MEM_STATIC U32 MEM_read32(const void* memPtr);
         | 
| 98 | 
            +
            MEM_STATIC U64 MEM_read64(const void* memPtr);
         | 
| 99 | 
            +
            MEM_STATIC size_t MEM_readST(const void* memPtr);
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            MEM_STATIC void MEM_write16(void* memPtr, U16 value);
         | 
| 102 | 
            +
            MEM_STATIC void MEM_write32(void* memPtr, U32 value);
         | 
| 103 | 
            +
            MEM_STATIC void MEM_write64(void* memPtr, U64 value);
         | 
| 104 | 
            +
             | 
| 105 | 
            +
            /*=== Little endian unaligned read/write ===*/
         | 
| 106 | 
            +
            MEM_STATIC U16 MEM_readLE16(const void* memPtr);
         | 
| 107 | 
            +
            MEM_STATIC U32 MEM_readLE24(const void* memPtr);
         | 
| 108 | 
            +
            MEM_STATIC U32 MEM_readLE32(const void* memPtr);
         | 
| 109 | 
            +
            MEM_STATIC U64 MEM_readLE64(const void* memPtr);
         | 
| 110 | 
            +
            MEM_STATIC size_t MEM_readLEST(const void* memPtr);
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val);
         | 
| 113 | 
            +
            MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val);
         | 
| 114 | 
            +
            MEM_STATIC void MEM_writeLE32(void* memPtr, U32 val32);
         | 
| 115 | 
            +
            MEM_STATIC void MEM_writeLE64(void* memPtr, U64 val64);
         | 
| 116 | 
            +
            MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val);
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            /*=== Big endian unaligned read/write ===*/
         | 
| 119 | 
            +
            MEM_STATIC U32 MEM_readBE32(const void* memPtr);
         | 
| 120 | 
            +
            MEM_STATIC U64 MEM_readBE64(const void* memPtr);
         | 
| 121 | 
            +
            MEM_STATIC size_t MEM_readBEST(const void* memPtr);
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            MEM_STATIC void MEM_writeBE32(void* memPtr, U32 val32);
         | 
| 124 | 
            +
            MEM_STATIC void MEM_writeBE64(void* memPtr, U64 val64);
         | 
| 125 | 
            +
            MEM_STATIC void MEM_writeBEST(void* memPtr, size_t val);
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            /*=== Byteswap ===*/
         | 
| 128 | 
            +
            MEM_STATIC U32 MEM_swap32(U32 in);
         | 
| 129 | 
            +
            MEM_STATIC U64 MEM_swap64(U64 in);
         | 
| 130 | 
            +
            MEM_STATIC size_t MEM_swapST(size_t in);
         | 
| 131 | 
            +
             | 
| 132 | 
            +
             | 
| 133 | 
            +
            /*-**************************************************************
         | 
| 134 | 
            +
            *  Memory I/O Implementation
         | 
| 161 135 | 
             
            *****************************************************************/
         | 
| 162 136 | 
             
            /* MEM_FORCE_MEMORY_ACCESS :
         | 
| 163 137 | 
             
             * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable.
         | 
| @@ -173,9 +147,7 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size); | |
| 173 147 | 
             
             * Prefer these methods in priority order (0 > 1 > 2)
         | 
| 174 148 | 
             
             */
         | 
| 175 149 | 
             
            #ifndef MEM_FORCE_MEMORY_ACCESS   /* can be defined externally, on command line for example */
         | 
| 176 | 
            -
            #  if defined( | 
| 177 | 
            -
            #    define MEM_FORCE_MEMORY_ACCESS 2
         | 
| 178 | 
            -
            #  elif defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
         | 
| 150 | 
            +
            #  if defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
         | 
| 179 151 | 
             
            #    define MEM_FORCE_MEMORY_ACCESS 1
         | 
| 180 152 | 
             
            #  endif
         | 
| 181 153 | 
             
            #endif
         | 
| @@ -185,8 +157,22 @@ MEM_STATIC unsigned MEM_64bits(void) { return sizeof(size_t)==8; } | |
| 185 157 |  | 
| 186 158 | 
             
            MEM_STATIC unsigned MEM_isLittleEndian(void)
         | 
| 187 159 | 
             
            {
         | 
| 160 | 
            +
            #if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
         | 
| 161 | 
            +
                return 1;
         | 
| 162 | 
            +
            #elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
         | 
| 163 | 
            +
                return 0;
         | 
| 164 | 
            +
            #elif defined(__clang__) && __LITTLE_ENDIAN__
         | 
| 165 | 
            +
                return 1;
         | 
| 166 | 
            +
            #elif defined(__clang__) && __BIG_ENDIAN__
         | 
| 167 | 
            +
                return 0;
         | 
| 168 | 
            +
            #elif defined(_MSC_VER) && (_M_AMD64 || _M_IX86)
         | 
| 169 | 
            +
                return 1;
         | 
| 170 | 
            +
            #elif defined(__DMC__) && defined(_M_IX86)
         | 
| 171 | 
            +
                return 1;
         | 
| 172 | 
            +
            #else
         | 
| 188 173 | 
             
                const union { U32 u; BYTE c[4]; } one = { 1 };   /* don't use static : performance detrimental  */
         | 
| 189 174 | 
             
                return one.c[0];
         | 
| 175 | 
            +
            #endif
         | 
| 190 176 | 
             
            }
         | 
| 191 177 |  | 
| 192 178 | 
             
            #if defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==2)
         | 
| @@ -236,37 +222,37 @@ MEM_STATIC void MEM_write64(void* memPtr, U64 value) { ((unalign64*)memPtr)->v = | |
| 236 222 |  | 
| 237 223 | 
             
            MEM_STATIC U16 MEM_read16(const void* memPtr)
         | 
| 238 224 | 
             
            {
         | 
| 239 | 
            -
                U16 val;  | 
| 225 | 
            +
                U16 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
         | 
| 240 226 | 
             
            }
         | 
| 241 227 |  | 
| 242 228 | 
             
            MEM_STATIC U32 MEM_read32(const void* memPtr)
         | 
| 243 229 | 
             
            {
         | 
| 244 | 
            -
                U32 val;  | 
| 230 | 
            +
                U32 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
         | 
| 245 231 | 
             
            }
         | 
| 246 232 |  | 
| 247 233 | 
             
            MEM_STATIC U64 MEM_read64(const void* memPtr)
         | 
| 248 234 | 
             
            {
         | 
| 249 | 
            -
                U64 val;  | 
| 235 | 
            +
                U64 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
         | 
| 250 236 | 
             
            }
         | 
| 251 237 |  | 
| 252 238 | 
             
            MEM_STATIC size_t MEM_readST(const void* memPtr)
         | 
| 253 239 | 
             
            {
         | 
| 254 | 
            -
                size_t val;  | 
| 240 | 
            +
                size_t val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
         | 
| 255 241 | 
             
            }
         | 
| 256 242 |  | 
| 257 243 | 
             
            MEM_STATIC void MEM_write16(void* memPtr, U16 value)
         | 
| 258 244 | 
             
            {
         | 
| 259 | 
            -
                 | 
| 245 | 
            +
                ZSTD_memcpy(memPtr, &value, sizeof(value));
         | 
| 260 246 | 
             
            }
         | 
| 261 247 |  | 
| 262 248 | 
             
            MEM_STATIC void MEM_write32(void* memPtr, U32 value)
         | 
| 263 249 | 
             
            {
         | 
| 264 | 
            -
                 | 
| 250 | 
            +
                ZSTD_memcpy(memPtr, &value, sizeof(value));
         | 
| 265 251 | 
             
            }
         | 
| 266 252 |  | 
| 267 253 | 
             
            MEM_STATIC void MEM_write64(void* memPtr, U64 value)
         | 
| 268 254 | 
             
            {
         | 
| 269 | 
            -
                 | 
| 255 | 
            +
                ZSTD_memcpy(memPtr, &value, sizeof(value));
         | 
| 270 256 | 
             
            }
         | 
| 271 257 |  | 
| 272 258 | 
             
            #endif /* MEM_FORCE_MEMORY_ACCESS */
         | 
| @@ -338,7 +324,7 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val) | |
| 338 324 |  | 
| 339 325 | 
             
            MEM_STATIC U32 MEM_readLE24(const void* memPtr)
         | 
| 340 326 | 
             
            {
         | 
| 341 | 
            -
                return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
         | 
| 327 | 
            +
                return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
         | 
| 342 328 | 
             
            }
         | 
| 343 329 |  | 
| 344 330 | 
             
            MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val)
         | 
| @@ -445,6 +431,9 @@ MEM_STATIC void MEM_writeBEST(void* memPtr, size_t val) | |
| 445 431 | 
             
                    MEM_writeBE64(memPtr, (U64)val);
         | 
| 446 432 | 
             
            }
         | 
| 447 433 |  | 
| 434 | 
            +
            /* code only tested on 32 and 64 bits systems */
         | 
| 435 | 
            +
            MEM_STATIC void MEM_check(void) { DEBUG_STATIC_ASSERT((sizeof(size_t)==4) || (sizeof(size_t)==8)); }
         | 
| 436 | 
            +
             | 
| 448 437 |  | 
| 449 438 | 
             
            #if defined (__cplusplus)
         | 
| 450 439 | 
             
            }
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 | 
            -
             * Copyright (c)  | 
| 2 | 
            +
             * Copyright (c) Yann Collet, Facebook, Inc.
         | 
| 3 3 | 
             
             * All rights reserved.
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             * This source code is licensed under both the BSD-style license (found in the
         | 
| @@ -10,9 +10,9 @@ | |
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            /* ======   Dependencies   ======= */
         | 
| 13 | 
            -
            #include  | 
| 13 | 
            +
            #include "zstd_deps.h" /* size_t */
         | 
| 14 14 | 
             
            #include "debug.h"     /* assert */
         | 
| 15 | 
            -
            #include "zstd_internal.h"  /*  | 
| 15 | 
            +
            #include "zstd_internal.h"  /* ZSTD_customMalloc, ZSTD_customFree */
         | 
| 16 16 | 
             
            #include "pool.h"
         | 
| 17 17 |  | 
| 18 18 | 
             
            /* ======   Compiler specifics   ====== */
         | 
| @@ -86,7 +86,7 @@ static void* POOL_thread(void* opaque) { | |
| 86 86 | 
             
                    {   POOL_job const job = ctx->queue[ctx->queueHead];
         | 
| 87 87 | 
             
                        ctx->queueHead = (ctx->queueHead + 1) % ctx->queueSize;
         | 
| 88 88 | 
             
                        ctx->numThreadsBusy++;
         | 
| 89 | 
            -
                        ctx->queueEmpty = ctx->queueHead == ctx->queueTail;
         | 
| 89 | 
            +
                        ctx->queueEmpty = (ctx->queueHead == ctx->queueTail);
         | 
| 90 90 | 
             
                        /* Unlock the mutex, signal a pusher, and run the job */
         | 
| 91 91 | 
             
                        ZSTD_pthread_cond_signal(&ctx->queuePushCond);
         | 
| 92 92 | 
             
                        ZSTD_pthread_mutex_unlock(&ctx->queueMutex);
         | 
| @@ -105,24 +105,30 @@ static void* POOL_thread(void* opaque) { | |
| 105 105 | 
             
                assert(0);  /* Unreachable */
         | 
| 106 106 | 
             
            }
         | 
| 107 107 |  | 
| 108 | 
            +
            /* ZSTD_createThreadPool() : public access point */
         | 
| 109 | 
            +
            POOL_ctx* ZSTD_createThreadPool(size_t numThreads) {
         | 
| 110 | 
            +
                return POOL_create (numThreads, 0);
         | 
| 111 | 
            +
            }
         | 
| 112 | 
            +
             | 
| 108 113 | 
             
            POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) {
         | 
| 109 114 | 
             
                return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem);
         | 
| 110 115 | 
             
            }
         | 
| 111 116 |  | 
| 112 117 | 
             
            POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize,
         | 
| 113 | 
            -
                                           ZSTD_customMem customMem) | 
| 118 | 
            +
                                           ZSTD_customMem customMem)
         | 
| 119 | 
            +
            {
         | 
| 114 120 | 
             
                POOL_ctx* ctx;
         | 
| 115 121 | 
             
                /* Check parameters */
         | 
| 116 122 | 
             
                if (!numThreads) { return NULL; }
         | 
| 117 123 | 
             
                /* Allocate the context and zero initialize */
         | 
| 118 | 
            -
                ctx = (POOL_ctx*) | 
| 124 | 
            +
                ctx = (POOL_ctx*)ZSTD_customCalloc(sizeof(POOL_ctx), customMem);
         | 
| 119 125 | 
             
                if (!ctx) { return NULL; }
         | 
| 120 126 | 
             
                /* Initialize the job queue.
         | 
| 121 127 | 
             
                 * It needs one extra space since one space is wasted to differentiate
         | 
| 122 128 | 
             
                 * empty and full queues.
         | 
| 123 129 | 
             
                 */
         | 
| 124 130 | 
             
                ctx->queueSize = queueSize + 1;
         | 
| 125 | 
            -
                ctx->queue = (POOL_job*) | 
| 131 | 
            +
                ctx->queue = (POOL_job*)ZSTD_customMalloc(ctx->queueSize * sizeof(POOL_job), customMem);
         | 
| 126 132 | 
             
                ctx->queueHead = 0;
         | 
| 127 133 | 
             
                ctx->queueTail = 0;
         | 
| 128 134 | 
             
                ctx->numThreadsBusy = 0;
         | 
| @@ -136,7 +142,7 @@ POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize, | |
| 136 142 | 
             
                }
         | 
| 137 143 | 
             
                ctx->shutdown = 0;
         | 
| 138 144 | 
             
                /* Allocate space for the thread handles */
         | 
| 139 | 
            -
                ctx->threads = (ZSTD_pthread_t*) | 
| 145 | 
            +
                ctx->threads = (ZSTD_pthread_t*)ZSTD_customMalloc(numThreads * sizeof(ZSTD_pthread_t), customMem);
         | 
| 140 146 | 
             
                ctx->threadCapacity = 0;
         | 
| 141 147 | 
             
                ctx->customMem = customMem;
         | 
| 142 148 | 
             
                /* Check for errors */
         | 
| @@ -179,14 +185,16 @@ void POOL_free(POOL_ctx *ctx) { | |
| 179 185 | 
             
                ZSTD_pthread_mutex_destroy(&ctx->queueMutex);
         | 
| 180 186 | 
             
                ZSTD_pthread_cond_destroy(&ctx->queuePushCond);
         | 
| 181 187 | 
             
                ZSTD_pthread_cond_destroy(&ctx->queuePopCond);
         | 
| 182 | 
            -
                 | 
| 183 | 
            -
                 | 
| 184 | 
            -
                 | 
| 188 | 
            +
                ZSTD_customFree(ctx->queue, ctx->customMem);
         | 
| 189 | 
            +
                ZSTD_customFree(ctx->threads, ctx->customMem);
         | 
| 190 | 
            +
                ZSTD_customFree(ctx, ctx->customMem);
         | 
| 185 191 | 
             
            }
         | 
| 186 192 |  | 
| 193 | 
            +
            void ZSTD_freeThreadPool (ZSTD_threadPool* pool) {
         | 
| 194 | 
            +
              POOL_free (pool);
         | 
| 195 | 
            +
            }
         | 
| 187 196 |  | 
| 188 | 
            -
             | 
| 189 | 
            -
            size_t POOL_sizeof(POOL_ctx *ctx) {
         | 
| 197 | 
            +
            size_t POOL_sizeof(const POOL_ctx* ctx) {
         | 
| 190 198 | 
             
                if (ctx==NULL) return 0;  /* supports sizeof NULL */
         | 
| 191 199 | 
             
                return sizeof(*ctx)
         | 
| 192 200 | 
             
                    + ctx->queueSize * sizeof(POOL_job)
         | 
| @@ -203,11 +211,11 @@ static int POOL_resize_internal(POOL_ctx* ctx, size_t numThreads) | |
| 203 211 | 
             
                    return 0;
         | 
| 204 212 | 
             
                }
         | 
| 205 213 | 
             
                /* numThreads > threadCapacity */
         | 
| 206 | 
            -
                {   ZSTD_pthread_t* const threadPool = (ZSTD_pthread_t*) | 
| 214 | 
            +
                {   ZSTD_pthread_t* const threadPool = (ZSTD_pthread_t*)ZSTD_customMalloc(numThreads * sizeof(ZSTD_pthread_t), ctx->customMem);
         | 
| 207 215 | 
             
                    if (!threadPool) return 1;
         | 
| 208 216 | 
             
                    /* replace existing thread pool */
         | 
| 209 | 
            -
                     | 
| 210 | 
            -
                     | 
| 217 | 
            +
                    ZSTD_memcpy(threadPool, ctx->threads, ctx->threadCapacity * sizeof(*threadPool));
         | 
| 218 | 
            +
                    ZSTD_customFree(ctx->threads, ctx->customMem);
         | 
| 211 219 | 
             
                    ctx->threads = threadPool;
         | 
| 212 220 | 
             
                    /* Initialize additional threads */
         | 
| 213 221 | 
             
                    {   size_t threadId;
         | 
| @@ -251,7 +259,8 @@ static int isQueueFull(POOL_ctx const* ctx) { | |
| 251 259 | 
             
            }
         | 
| 252 260 |  | 
| 253 261 |  | 
| 254 | 
            -
            static void | 
| 262 | 
            +
            static void
         | 
| 263 | 
            +
            POOL_add_internal(POOL_ctx* ctx, POOL_function function, void *opaque)
         | 
| 255 264 | 
             
            {
         | 
| 256 265 | 
             
                POOL_job const job = {function, opaque};
         | 
| 257 266 | 
             
                assert(ctx != NULL);
         | 
| @@ -301,21 +310,23 @@ int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) | |
| 301 310 | 
             
            struct POOL_ctx_s {
         | 
| 302 311 | 
             
                int dummy;
         | 
| 303 312 | 
             
            };
         | 
| 304 | 
            -
            static POOL_ctx  | 
| 313 | 
            +
            static POOL_ctx g_poolCtx;
         | 
| 305 314 |  | 
| 306 315 | 
             
            POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) {
         | 
| 307 316 | 
             
                return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem);
         | 
| 308 317 | 
             
            }
         | 
| 309 318 |  | 
| 310 | 
            -
            POOL_ctx* | 
| 319 | 
            +
            POOL_ctx*
         | 
| 320 | 
            +
            POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customMem customMem)
         | 
| 321 | 
            +
            {
         | 
| 311 322 | 
             
                (void)numThreads;
         | 
| 312 323 | 
             
                (void)queueSize;
         | 
| 313 324 | 
             
                (void)customMem;
         | 
| 314 | 
            -
                return & | 
| 325 | 
            +
                return &g_poolCtx;
         | 
| 315 326 | 
             
            }
         | 
| 316 327 |  | 
| 317 328 | 
             
            void POOL_free(POOL_ctx* ctx) {
         | 
| 318 | 
            -
                assert(!ctx || ctx == & | 
| 329 | 
            +
                assert(!ctx || ctx == &g_poolCtx);
         | 
| 319 330 | 
             
                (void)ctx;
         | 
| 320 331 | 
             
            }
         | 
| 321 332 |  | 
| @@ -335,9 +346,9 @@ int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) { | |
| 335 346 | 
             
                return 1;
         | 
| 336 347 | 
             
            }
         | 
| 337 348 |  | 
| 338 | 
            -
            size_t POOL_sizeof(POOL_ctx* ctx) {
         | 
| 349 | 
            +
            size_t POOL_sizeof(const POOL_ctx* ctx) {
         | 
| 339 350 | 
             
                if (ctx==NULL) return 0;  /* supports sizeof NULL */
         | 
| 340 | 
            -
                assert(ctx == & | 
| 351 | 
            +
                assert(ctx == &g_poolCtx);
         | 
| 341 352 | 
             
                return sizeof(*ctx);
         | 
| 342 353 | 
             
            }
         | 
| 343 354 |  | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 | 
            -
             * Copyright (c)  | 
| 2 | 
            +
             * Copyright (c) Yann Collet, Facebook, Inc.
         | 
| 3 3 | 
             
             * All rights reserved.
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             * This source code is licensed under both the BSD-style license (found in the
         | 
| @@ -16,7 +16,7 @@ extern "C" { | |
| 16 16 | 
             
            #endif
         | 
| 17 17 |  | 
| 18 18 |  | 
| 19 | 
            -
            #include  | 
| 19 | 
            +
            #include "zstd_deps.h"
         | 
| 20 20 | 
             
            #define ZSTD_STATIC_LINKING_ONLY   /* ZSTD_customMem */
         | 
| 21 21 | 
             
            #include "../zstd.h"
         | 
| 22 22 |  | 
| @@ -53,7 +53,7 @@ int POOL_resize(POOL_ctx* ctx, size_t numThreads); | |
| 53 53 | 
             
             * @return threadpool memory usage
         | 
| 54 54 | 
             
             *  note : compatible with NULL (returns 0 in this case)
         | 
| 55 55 | 
             
             */
         | 
| 56 | 
            -
            size_t POOL_sizeof(POOL_ctx* ctx);
         | 
| 56 | 
            +
            size_t POOL_sizeof(const POOL_ctx* ctx);
         | 
| 57 57 |  | 
| 58 58 | 
             
            /*! POOL_function :
         | 
| 59 59 | 
             
             *  The function type that can be added to a thread pool.
         | 
| @@ -70,7 +70,7 @@ void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque); | |
| 70 70 |  | 
| 71 71 |  | 
| 72 72 | 
             
            /*! POOL_tryAdd() :
         | 
| 73 | 
            -
             *  Add the job `function(opaque)` to thread pool _if_ a  | 
| 73 | 
            +
             *  Add the job `function(opaque)` to thread pool _if_ a queue slot is available.
         | 
| 74 74 | 
             
             *  Returns immediately even if not (does not block).
         | 
| 75 75 | 
             
             * @return : 1 if successful, 0 if not.
         | 
| 76 76 | 
             
             */
         | 
| @@ -0,0 +1,137 @@ | |
| 1 | 
            +
            /*
         | 
| 2 | 
            +
             * Copyright (c) Facebook, Inc.
         | 
| 3 | 
            +
             * All rights reserved.
         | 
| 4 | 
            +
             *
         | 
| 5 | 
            +
             * This source code is licensed under both the BSD-style license (found in the
         | 
| 6 | 
            +
             * LICENSE file in the root directory of this source tree) and the GPLv2 (found
         | 
| 7 | 
            +
             * in the COPYING file in the root directory of this source tree).
         | 
| 8 | 
            +
             * You may select, at your option, one of the above-listed licenses.
         | 
| 9 | 
            +
             */
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            #ifndef ZSTD_PORTABILITY_MACROS_H
         | 
| 12 | 
            +
            #define ZSTD_PORTABILITY_MACROS_H
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            /**
         | 
| 15 | 
            +
             * This header file contains macro defintions to support portability.
         | 
| 16 | 
            +
             * This header is shared between C and ASM code, so it MUST only
         | 
| 17 | 
            +
             * contain macro definitions. It MUST not contain any C code.
         | 
| 18 | 
            +
             *
         | 
| 19 | 
            +
             * This header ONLY defines macros to detect platforms/feature support.
         | 
| 20 | 
            +
             *
         | 
| 21 | 
            +
             */
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
            /* compat. with non-clang compilers */
         | 
| 25 | 
            +
            #ifndef __has_attribute
         | 
| 26 | 
            +
              #define __has_attribute(x) 0
         | 
| 27 | 
            +
            #endif
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            /* compat. with non-clang compilers */
         | 
| 30 | 
            +
            #ifndef __has_builtin
         | 
| 31 | 
            +
            #  define __has_builtin(x) 0
         | 
| 32 | 
            +
            #endif
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            /* compat. with non-clang compilers */
         | 
| 35 | 
            +
            #ifndef __has_feature
         | 
| 36 | 
            +
            #  define __has_feature(x) 0
         | 
| 37 | 
            +
            #endif
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            /* detects whether we are being compiled under msan */
         | 
| 40 | 
            +
            #ifndef ZSTD_MEMORY_SANITIZER
         | 
| 41 | 
            +
            #  if __has_feature(memory_sanitizer)
         | 
| 42 | 
            +
            #    define ZSTD_MEMORY_SANITIZER 1
         | 
| 43 | 
            +
            #  else
         | 
| 44 | 
            +
            #    define ZSTD_MEMORY_SANITIZER 0
         | 
| 45 | 
            +
            #  endif
         | 
| 46 | 
            +
            #endif
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            /* detects whether we are being compiled under asan */
         | 
| 49 | 
            +
            #ifndef ZSTD_ADDRESS_SANITIZER
         | 
| 50 | 
            +
            #  if __has_feature(address_sanitizer)
         | 
| 51 | 
            +
            #    define ZSTD_ADDRESS_SANITIZER 1
         | 
| 52 | 
            +
            #  elif defined(__SANITIZE_ADDRESS__)
         | 
| 53 | 
            +
            #    define ZSTD_ADDRESS_SANITIZER 1
         | 
| 54 | 
            +
            #  else
         | 
| 55 | 
            +
            #    define ZSTD_ADDRESS_SANITIZER 0
         | 
| 56 | 
            +
            #  endif
         | 
| 57 | 
            +
            #endif
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            /* detects whether we are being compiled under dfsan */
         | 
| 60 | 
            +
            #ifndef ZSTD_DATAFLOW_SANITIZER
         | 
| 61 | 
            +
            # if __has_feature(dataflow_sanitizer)
         | 
| 62 | 
            +
            #  define ZSTD_DATAFLOW_SANITIZER 1
         | 
| 63 | 
            +
            # else
         | 
| 64 | 
            +
            #  define ZSTD_DATAFLOW_SANITIZER 0
         | 
| 65 | 
            +
            # endif
         | 
| 66 | 
            +
            #endif
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            /* Mark the internal assembly functions as hidden  */
         | 
| 69 | 
            +
            #ifdef __ELF__
         | 
| 70 | 
            +
            # define ZSTD_HIDE_ASM_FUNCTION(func) .hidden func
         | 
| 71 | 
            +
            #else
         | 
| 72 | 
            +
            # define ZSTD_HIDE_ASM_FUNCTION(func)
         | 
| 73 | 
            +
            #endif
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            /* Enable runtime BMI2 dispatch based on the CPU.
         | 
| 76 | 
            +
             * Enabled for clang & gcc >=4.8 on x86 when BMI2 isn't enabled by default.
         | 
| 77 | 
            +
             */
         | 
| 78 | 
            +
            #ifndef DYNAMIC_BMI2
         | 
| 79 | 
            +
              #if ((defined(__clang__) && __has_attribute(__target__)) \
         | 
| 80 | 
            +
                  || (defined(__GNUC__) \
         | 
| 81 | 
            +
                      && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))) \
         | 
| 82 | 
            +
                  && (defined(__x86_64__) || defined(_M_X64)) \
         | 
| 83 | 
            +
                  && !defined(__BMI2__)
         | 
| 84 | 
            +
              #  define DYNAMIC_BMI2 1
         | 
| 85 | 
            +
              #else
         | 
| 86 | 
            +
              #  define DYNAMIC_BMI2 0
         | 
| 87 | 
            +
              #endif
         | 
| 88 | 
            +
            #endif
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            /**
         | 
| 91 | 
            +
             * Only enable assembly for GNUC comptabile compilers,
         | 
| 92 | 
            +
             * because other platforms may not support GAS assembly syntax.
         | 
| 93 | 
            +
             *
         | 
| 94 | 
            +
             * Only enable assembly for Linux / MacOS, other platforms may
         | 
| 95 | 
            +
             * work, but they haven't been tested. This could likely be
         | 
| 96 | 
            +
             * extended to BSD systems.
         | 
| 97 | 
            +
             *
         | 
| 98 | 
            +
             * Disable assembly when MSAN is enabled, because MSAN requires
         | 
| 99 | 
            +
             * 100% of code to be instrumented to work.
         | 
| 100 | 
            +
             */
         | 
| 101 | 
            +
            #if defined(__GNUC__)
         | 
| 102 | 
            +
            #  if defined(__linux__) || defined(__linux) || defined(__APPLE__)
         | 
| 103 | 
            +
            #    if ZSTD_MEMORY_SANITIZER
         | 
| 104 | 
            +
            #      define ZSTD_ASM_SUPPORTED 0
         | 
| 105 | 
            +
            #    elif ZSTD_DATAFLOW_SANITIZER
         | 
| 106 | 
            +
            #      define ZSTD_ASM_SUPPORTED 0
         | 
| 107 | 
            +
            #    else
         | 
| 108 | 
            +
            #      define ZSTD_ASM_SUPPORTED 1
         | 
| 109 | 
            +
            #    endif
         | 
| 110 | 
            +
            #  else
         | 
| 111 | 
            +
            #    define ZSTD_ASM_SUPPORTED 0
         | 
| 112 | 
            +
            #  endif
         | 
| 113 | 
            +
            #else
         | 
| 114 | 
            +
            #  define ZSTD_ASM_SUPPORTED 0
         | 
| 115 | 
            +
            #endif
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            /**
         | 
| 118 | 
            +
             * Determines whether we should enable assembly for x86-64
         | 
| 119 | 
            +
             * with BMI2.
         | 
| 120 | 
            +
             *
         | 
| 121 | 
            +
             * Enable if all of the following conditions hold:
         | 
| 122 | 
            +
             * - ASM hasn't been explicitly disabled by defining ZSTD_DISABLE_ASM
         | 
| 123 | 
            +
             * - Assembly is supported
         | 
| 124 | 
            +
             * - We are compiling for x86-64 and either:
         | 
| 125 | 
            +
             *   - DYNAMIC_BMI2 is enabled
         | 
| 126 | 
            +
             *   - BMI2 is supported at compile time
         | 
| 127 | 
            +
             */
         | 
| 128 | 
            +
            #if !defined(ZSTD_DISABLE_ASM) &&                                 \
         | 
| 129 | 
            +
                ZSTD_ASM_SUPPORTED &&                                         \
         | 
| 130 | 
            +
                defined(__x86_64__) &&                                        \
         | 
| 131 | 
            +
                (DYNAMIC_BMI2 || defined(__BMI2__))
         | 
| 132 | 
            +
            # define ZSTD_ENABLE_ASM_X86_64_BMI2 1
         | 
| 133 | 
            +
            #else
         | 
| 134 | 
            +
            # define ZSTD_ENABLE_ASM_X86_64_BMI2 0
         | 
| 135 | 
            +
            #endif
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            #endif /* ZSTD_PORTABILITY_MACROS_H */
         | 
| @@ -78,11 +78,12 @@ int ZSTD_pthread_join(ZSTD_pthread_t thread, void **value_ptr) | |
| 78 78 |  | 
| 79 79 | 
             
            #if defined(ZSTD_MULTITHREAD) && DEBUGLEVEL >= 1 && !defined(_WIN32)
         | 
| 80 80 |  | 
| 81 | 
            -
            # | 
| 81 | 
            +
            #define ZSTD_DEPS_NEED_MALLOC
         | 
| 82 | 
            +
            #include "zstd_deps.h"
         | 
| 82 83 |  | 
| 83 84 | 
             
            int ZSTD_pthread_mutex_init(ZSTD_pthread_mutex_t* mutex, pthread_mutexattr_t const* attr)
         | 
| 84 85 | 
             
            {
         | 
| 85 | 
            -
                *mutex = (pthread_mutex_t*) | 
| 86 | 
            +
                *mutex = (pthread_mutex_t*)ZSTD_malloc(sizeof(pthread_mutex_t));
         | 
| 86 87 | 
             
                if (!*mutex)
         | 
| 87 88 | 
             
                    return 1;
         | 
| 88 89 | 
             
                return pthread_mutex_init(*mutex, attr);
         | 
| @@ -94,14 +95,14 @@ int ZSTD_pthread_mutex_destroy(ZSTD_pthread_mutex_t* mutex) | |
| 94 95 | 
             
                    return 0;
         | 
| 95 96 | 
             
                {
         | 
| 96 97 | 
             
                    int const ret = pthread_mutex_destroy(*mutex);
         | 
| 97 | 
            -
                     | 
| 98 | 
            +
                    ZSTD_free(*mutex);
         | 
| 98 99 | 
             
                    return ret;
         | 
| 99 100 | 
             
                }
         | 
| 100 101 | 
             
            }
         | 
| 101 102 |  | 
| 102 103 | 
             
            int ZSTD_pthread_cond_init(ZSTD_pthread_cond_t* cond, pthread_condattr_t const* attr)
         | 
| 103 104 | 
             
            {
         | 
| 104 | 
            -
                *cond = (pthread_cond_t*) | 
| 105 | 
            +
                *cond = (pthread_cond_t*)ZSTD_malloc(sizeof(pthread_cond_t));
         | 
| 105 106 | 
             
                if (!*cond)
         | 
| 106 107 | 
             
                    return 1;
         | 
| 107 108 | 
             
                return pthread_cond_init(*cond, attr);
         | 
| @@ -113,7 +114,7 @@ int ZSTD_pthread_cond_destroy(ZSTD_pthread_cond_t* cond) | |
| 113 114 | 
             
                    return 0;
         | 
| 114 115 | 
             
                {
         | 
| 115 116 | 
             
                    int const ret = pthread_cond_destroy(*cond);
         | 
| 116 | 
            -
                     | 
| 117 | 
            +
                    ZSTD_free(*cond);
         | 
| 117 118 | 
             
                    return ret;
         | 
| 118 119 | 
             
                }
         | 
| 119 120 | 
             
            }
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            /*
         | 
| 2 | 
            +
             *  xxHash - Fast Hash algorithm
         | 
| 3 | 
            +
             *  Copyright (c) Yann Collet, Facebook, Inc.
         | 
| 4 | 
            +
             *
         | 
| 5 | 
            +
             *  You can contact the author at :
         | 
| 6 | 
            +
             *  - xxHash homepage: http://www.xxhash.com
         | 
| 7 | 
            +
             *  - xxHash source repository : https://github.com/Cyan4973/xxHash
         | 
| 8 | 
            +
             *
         | 
| 9 | 
            +
             * This source code is licensed under both the BSD-style license (found in the
         | 
| 10 | 
            +
             * LICENSE file in the root directory of this source tree) and the GPLv2 (found
         | 
| 11 | 
            +
             * in the COPYING file in the root directory of this source tree).
         | 
| 12 | 
            +
             * You may select, at your option, one of the above-listed licenses.
         | 
| 13 | 
            +
            */
         | 
| 14 | 
            +
             | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            /*
         | 
| 18 | 
            +
             * xxhash.c instantiates functions defined in xxhash.h
         | 
| 19 | 
            +
             */
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            #define XXH_STATIC_LINKING_ONLY   /* access advanced declarations */
         | 
| 22 | 
            +
            #define XXH_IMPLEMENTATION   /* access definitions */
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            #include "xxhash.h"
         |