zstd-ruby 0.1.2 → 1.1.3.0
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/README.md +1 -1
 - data/ext/zstdruby/libzstd/BUCK +186 -0
 - data/ext/zstdruby/libzstd/Makefile +58 -31
 - data/ext/zstdruby/libzstd/common/mem.h +1 -1
 - data/ext/zstdruby/libzstd/common/pool.c +194 -0
 - data/ext/zstdruby/libzstd/common/pool.h +56 -0
 - data/ext/zstdruby/libzstd/common/threading.c +79 -0
 - data/ext/zstdruby/libzstd/common/threading.h +104 -0
 - data/ext/zstdruby/libzstd/common/zstd_common.c +0 -4
 - data/ext/zstdruby/libzstd/common/zstd_errors.h +16 -2
 - data/ext/zstdruby/libzstd/common/zstd_internal.h +9 -0
 - data/ext/zstdruby/libzstd/compress/zstd_compress.c +94 -51
 - data/ext/zstdruby/libzstd/compress/zstd_opt.h +6 -6
 - data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +740 -0
 - data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +78 -0
 - data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +39 -22
 - data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +26 -0
 - data/ext/zstdruby/libzstd/dictBuilder/cover.c +1021 -0
 - data/ext/zstdruby/libzstd/dictBuilder/zdict.c +60 -12
 - data/ext/zstdruby/libzstd/dictBuilder/zdict.h +109 -19
 - data/ext/zstdruby/libzstd/dll/example/fullbench-dll.vcxproj +2 -0
 - data/ext/zstdruby/libzstd/legacy/zstd_v04.c +13 -19
 - data/ext/zstdruby/libzstd/legacy/zstd_v05.c +4 -2
 - data/ext/zstdruby/libzstd/legacy/zstd_v07.c +3 -3
 - data/ext/zstdruby/libzstd/zstd.h +53 -25
 - data/lib/zstd-ruby/version.rb +1 -1
 - metadata +11 -2
 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2 
     | 
    
         
            +
             * Copyright (c) 2016-present, Facebook, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
             * All rights reserved.
         
     | 
| 
      
 4 
     | 
    
         
            +
             *
         
     | 
| 
      
 5 
     | 
    
         
            +
             * This source code is licensed under the BSD-style license found in the
         
     | 
| 
      
 6 
     | 
    
         
            +
             * LICENSE file in the root directory of this source tree. An additional grant
         
     | 
| 
      
 7 
     | 
    
         
            +
             * of patent rights can be found in the PATENTS file in the same directory.
         
     | 
| 
      
 8 
     | 
    
         
            +
             */
         
     | 
| 
      
 9 
     | 
    
         
            +
            #ifndef POOL_H
         
     | 
| 
      
 10 
     | 
    
         
            +
            #define POOL_H
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            #if defined (__cplusplus)
         
     | 
| 
      
 13 
     | 
    
         
            +
            extern "C" {
         
     | 
| 
      
 14 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            #include <stddef.h>   /* size_t */
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            typedef struct POOL_ctx_s POOL_ctx;
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            /*! POOL_create() :
         
     | 
| 
      
 22 
     | 
    
         
            +
                Create a thread pool with at most `numThreads` threads.
         
     | 
| 
      
 23 
     | 
    
         
            +
                `numThreads` must be at least 1.
         
     | 
| 
      
 24 
     | 
    
         
            +
                The maximum number of queued jobs before blocking is `queueSize`.
         
     | 
| 
      
 25 
     | 
    
         
            +
                `queueSize` must be at least 1.
         
     | 
| 
      
 26 
     | 
    
         
            +
                @return : The POOL_ctx pointer on success else NULL.
         
     | 
| 
      
 27 
     | 
    
         
            +
            */
         
     | 
| 
      
 28 
     | 
    
         
            +
            POOL_ctx *POOL_create(size_t numThreads, size_t queueSize);
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            /*! POOL_free() :
         
     | 
| 
      
 31 
     | 
    
         
            +
                Free a thread pool returned by POOL_create().
         
     | 
| 
      
 32 
     | 
    
         
            +
            */
         
     | 
| 
      
 33 
     | 
    
         
            +
            void POOL_free(POOL_ctx *ctx);
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            /*! POOL_function :
         
     | 
| 
      
 36 
     | 
    
         
            +
                The function type that can be added to a thread pool.
         
     | 
| 
      
 37 
     | 
    
         
            +
            */
         
     | 
| 
      
 38 
     | 
    
         
            +
            typedef void (*POOL_function)(void *);
         
     | 
| 
      
 39 
     | 
    
         
            +
            /*! POOL_add_function :
         
     | 
| 
      
 40 
     | 
    
         
            +
                The function type for a generic thread pool add function.
         
     | 
| 
      
 41 
     | 
    
         
            +
            */
         
     | 
| 
      
 42 
     | 
    
         
            +
            typedef void (*POOL_add_function)(void *, POOL_function, void *);
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            /*! POOL_add() :
         
     | 
| 
      
 45 
     | 
    
         
            +
                Add the job `function(opaque)` to the thread pool.
         
     | 
| 
      
 46 
     | 
    
         
            +
                Possibly blocks until there is room in the queue.
         
     | 
| 
      
 47 
     | 
    
         
            +
                Note : The function may be executed asynchronously, so `opaque` must live until the function has been completed.
         
     | 
| 
      
 48 
     | 
    
         
            +
            */
         
     | 
| 
      
 49 
     | 
    
         
            +
            void POOL_add(void *ctx, POOL_function function, void *opaque);
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            #if defined (__cplusplus)
         
     | 
| 
      
 53 
     | 
    
         
            +
            }
         
     | 
| 
      
 54 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            #endif
         
     | 
| 
         @@ -0,0 +1,79 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            /**
         
     | 
| 
      
 3 
     | 
    
         
            +
             * Copyright (c) 2016 Tino Reichardt
         
     | 
| 
      
 4 
     | 
    
         
            +
             * All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
             *
         
     | 
| 
      
 6 
     | 
    
         
            +
             * This source code is licensed under the BSD-style license found in the
         
     | 
| 
      
 7 
     | 
    
         
            +
             * LICENSE file in the root directory of this source tree. An additional grant
         
     | 
| 
      
 8 
     | 
    
         
            +
             * of patent rights can be found in the PATENTS file in the same directory.
         
     | 
| 
      
 9 
     | 
    
         
            +
             *
         
     | 
| 
      
 10 
     | 
    
         
            +
             * You can contact the author at:
         
     | 
| 
      
 11 
     | 
    
         
            +
             * - zstdmt source repository: https://github.com/mcmilk/zstdmt
         
     | 
| 
      
 12 
     | 
    
         
            +
             */
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            /**
         
     | 
| 
      
 15 
     | 
    
         
            +
             * This file will hold wrapper for systems, which do not support pthreads
         
     | 
| 
      
 16 
     | 
    
         
            +
             */
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            /* ======   Compiler specifics   ====== */
         
     | 
| 
      
 19 
     | 
    
         
            +
            #if defined(_MSC_VER)
         
     | 
| 
      
 20 
     | 
    
         
            +
            #  pragma warning(disable : 4206)        /* disable: C4206: translation unit is empty (when ZSTD_MULTITHREAD is not defined) */
         
     | 
| 
      
 21 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            #if defined(ZSTD_MULTITHREAD) && defined(_WIN32)
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            /**
         
     | 
| 
      
 27 
     | 
    
         
            +
             * Windows minimalist Pthread Wrapper, based on :
         
     | 
| 
      
 28 
     | 
    
         
            +
             * http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
         
     | 
| 
      
 29 
     | 
    
         
            +
             */
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            /* ===  Dependencies  === */
         
     | 
| 
      
 33 
     | 
    
         
            +
            #include <process.h>
         
     | 
| 
      
 34 
     | 
    
         
            +
            #include <errno.h>
         
     | 
| 
      
 35 
     | 
    
         
            +
            #include "threading.h"
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            /* ===  Implementation  === */
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            static unsigned __stdcall worker(void *arg)
         
     | 
| 
      
 41 
     | 
    
         
            +
            {
         
     | 
| 
      
 42 
     | 
    
         
            +
                pthread_t* const thread = (pthread_t*) arg;
         
     | 
| 
      
 43 
     | 
    
         
            +
                thread->arg = thread->start_routine(thread->arg);
         
     | 
| 
      
 44 
     | 
    
         
            +
                return 0;
         
     | 
| 
      
 45 
     | 
    
         
            +
            }
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            int pthread_create(pthread_t* thread, const void* unused,
         
     | 
| 
      
 48 
     | 
    
         
            +
                        void* (*start_routine) (void*), void* arg)
         
     | 
| 
      
 49 
     | 
    
         
            +
            {
         
     | 
| 
      
 50 
     | 
    
         
            +
                (void)unused;
         
     | 
| 
      
 51 
     | 
    
         
            +
                thread->arg = arg;
         
     | 
| 
      
 52 
     | 
    
         
            +
                thread->start_routine = start_routine;
         
     | 
| 
      
 53 
     | 
    
         
            +
                thread->handle = (HANDLE) _beginthreadex(NULL, 0, worker, thread, 0, NULL);
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                if (!thread->handle)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    return errno;
         
     | 
| 
      
 57 
     | 
    
         
            +
                else
         
     | 
| 
      
 58 
     | 
    
         
            +
                    return 0;
         
     | 
| 
      
 59 
     | 
    
         
            +
            }
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            int _pthread_join(pthread_t * thread, void **value_ptr)
         
     | 
| 
      
 62 
     | 
    
         
            +
            {
         
     | 
| 
      
 63 
     | 
    
         
            +
                DWORD result;
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                if (!thread->handle) return 0;
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                result = WaitForSingleObject(thread->handle, INFINITE);
         
     | 
| 
      
 68 
     | 
    
         
            +
                switch (result) {
         
     | 
| 
      
 69 
     | 
    
         
            +
                case WAIT_OBJECT_0:
         
     | 
| 
      
 70 
     | 
    
         
            +
                    if (value_ptr) *value_ptr = thread->arg;
         
     | 
| 
      
 71 
     | 
    
         
            +
                    return 0;
         
     | 
| 
      
 72 
     | 
    
         
            +
                case WAIT_ABANDONED:
         
     | 
| 
      
 73 
     | 
    
         
            +
                    return EINVAL;
         
     | 
| 
      
 74 
     | 
    
         
            +
                default:
         
     | 
| 
      
 75 
     | 
    
         
            +
                    return GetLastError();
         
     | 
| 
      
 76 
     | 
    
         
            +
                }
         
     | 
| 
      
 77 
     | 
    
         
            +
            }
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            #endif   /* ZSTD_MULTITHREAD */
         
     | 
| 
         @@ -0,0 +1,104 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            /**
         
     | 
| 
      
 3 
     | 
    
         
            +
             * Copyright (c) 2016 Tino Reichardt
         
     | 
| 
      
 4 
     | 
    
         
            +
             * All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
             *
         
     | 
| 
      
 6 
     | 
    
         
            +
             * This source code is licensed under the BSD-style license found in the
         
     | 
| 
      
 7 
     | 
    
         
            +
             * LICENSE file in the root directory of this source tree. An additional grant
         
     | 
| 
      
 8 
     | 
    
         
            +
             * of patent rights can be found in the PATENTS file in the same directory.
         
     | 
| 
      
 9 
     | 
    
         
            +
             *
         
     | 
| 
      
 10 
     | 
    
         
            +
             * You can contact the author at:
         
     | 
| 
      
 11 
     | 
    
         
            +
             * - zstdmt source repository: https://github.com/mcmilk/zstdmt
         
     | 
| 
      
 12 
     | 
    
         
            +
             */
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            #ifndef THREADING_H_938743
         
     | 
| 
      
 15 
     | 
    
         
            +
            #define THREADING_H_938743
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            #if defined (__cplusplus)
         
     | 
| 
      
 18 
     | 
    
         
            +
            extern "C" {
         
     | 
| 
      
 19 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            #if defined(ZSTD_MULTITHREAD) && defined(_WIN32)
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            /**
         
     | 
| 
      
 24 
     | 
    
         
            +
             * Windows minimalist Pthread Wrapper, based on :
         
     | 
| 
      
 25 
     | 
    
         
            +
             * http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
         
     | 
| 
      
 26 
     | 
    
         
            +
             */
         
     | 
| 
      
 27 
     | 
    
         
            +
            #ifdef WINVER
         
     | 
| 
      
 28 
     | 
    
         
            +
            #  undef WINVER
         
     | 
| 
      
 29 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 30 
     | 
    
         
            +
            #define WINVER       0x0600
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            #ifdef _WIN32_WINNT
         
     | 
| 
      
 33 
     | 
    
         
            +
            #  undef _WIN32_WINNT
         
     | 
| 
      
 34 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 35 
     | 
    
         
            +
            #define _WIN32_WINNT 0x0600
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            #ifndef WIN32_LEAN_AND_MEAN
         
     | 
| 
      
 38 
     | 
    
         
            +
            #  define WIN32_LEAN_AND_MEAN
         
     | 
| 
      
 39 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            #include <windows.h>
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            /* mutex */
         
     | 
| 
      
 44 
     | 
    
         
            +
            #define pthread_mutex_t           CRITICAL_SECTION
         
     | 
| 
      
 45 
     | 
    
         
            +
            #define pthread_mutex_init(a,b)   InitializeCriticalSection((a))
         
     | 
| 
      
 46 
     | 
    
         
            +
            #define pthread_mutex_destroy(a)  DeleteCriticalSection((a))
         
     | 
| 
      
 47 
     | 
    
         
            +
            #define pthread_mutex_lock(a)     EnterCriticalSection((a))
         
     | 
| 
      
 48 
     | 
    
         
            +
            #define pthread_mutex_unlock(a)   LeaveCriticalSection((a))
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            /* condition variable */
         
     | 
| 
      
 51 
     | 
    
         
            +
            #define pthread_cond_t             CONDITION_VARIABLE
         
     | 
| 
      
 52 
     | 
    
         
            +
            #define pthread_cond_init(a, b)    InitializeConditionVariable((a))
         
     | 
| 
      
 53 
     | 
    
         
            +
            #define pthread_cond_destroy(a)    /* No delete */
         
     | 
| 
      
 54 
     | 
    
         
            +
            #define pthread_cond_wait(a, b)    SleepConditionVariableCS((a), (b), INFINITE)
         
     | 
| 
      
 55 
     | 
    
         
            +
            #define pthread_cond_signal(a)     WakeConditionVariable((a))
         
     | 
| 
      
 56 
     | 
    
         
            +
            #define pthread_cond_broadcast(a)  WakeAllConditionVariable((a))
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            /* pthread_create() and pthread_join() */
         
     | 
| 
      
 59 
     | 
    
         
            +
            typedef struct {
         
     | 
| 
      
 60 
     | 
    
         
            +
                HANDLE handle;
         
     | 
| 
      
 61 
     | 
    
         
            +
                void* (*start_routine)(void*);
         
     | 
| 
      
 62 
     | 
    
         
            +
                void* arg;
         
     | 
| 
      
 63 
     | 
    
         
            +
            } pthread_t;
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            int pthread_create(pthread_t* thread, const void* unused,
         
     | 
| 
      
 66 
     | 
    
         
            +
                               void* (*start_routine) (void*), void* arg);
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            #define pthread_join(a, b) _pthread_join(&(a), (b))
         
     | 
| 
      
 69 
     | 
    
         
            +
            int _pthread_join(pthread_t* thread, void** value_ptr);
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            /**
         
     | 
| 
      
 72 
     | 
    
         
            +
             * add here more wrappers as required
         
     | 
| 
      
 73 
     | 
    
         
            +
             */
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            #elif defined(ZSTD_MULTITHREAD)   /* posix assumed ; need a better detection mathod */
         
     | 
| 
      
 77 
     | 
    
         
            +
            /* ===   POSIX Systems   === */
         
     | 
| 
      
 78 
     | 
    
         
            +
            #  include <pthread.h>
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            #else  /* ZSTD_MULTITHREAD not defined */
         
     | 
| 
      
 81 
     | 
    
         
            +
            /* No multithreading support */
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            #define pthread_mutex_t int   /* #define rather than typedef, as sometimes pthread support is implicit, resulting in duplicated symbols */
         
     | 
| 
      
 84 
     | 
    
         
            +
            #define pthread_mutex_init(a,b)
         
     | 
| 
      
 85 
     | 
    
         
            +
            #define pthread_mutex_destroy(a)
         
     | 
| 
      
 86 
     | 
    
         
            +
            #define pthread_mutex_lock(a)
         
     | 
| 
      
 87 
     | 
    
         
            +
            #define pthread_mutex_unlock(a)
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            #define pthread_cond_t int
         
     | 
| 
      
 90 
     | 
    
         
            +
            #define pthread_cond_init(a,b)
         
     | 
| 
      
 91 
     | 
    
         
            +
            #define pthread_cond_destroy(a)
         
     | 
| 
      
 92 
     | 
    
         
            +
            #define pthread_cond_wait(a,b)
         
     | 
| 
      
 93 
     | 
    
         
            +
            #define pthread_cond_signal(a)
         
     | 
| 
      
 94 
     | 
    
         
            +
            #define pthread_cond_broadcast(a)
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            /* do not use pthread_t */
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            #endif /* ZSTD_MULTITHREAD */
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            #if defined (__cplusplus)
         
     | 
| 
      
 101 
     | 
    
         
            +
            }
         
     | 
| 
      
 102 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            #endif /* THREADING_H_938743 */
         
     | 
| 
         @@ -43,10 +43,6 @@ ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); } 
     | 
|
| 
       43 
43 
     | 
    
         
             
            *   provides error code string from enum */
         
     | 
| 
       44 
44 
     | 
    
         
             
            const char* ZSTD_getErrorString(ZSTD_ErrorCode code) { return ERR_getErrorName(code); }
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
            /* ---   ZBUFF Error Management  (deprecated)   --- */
         
     | 
| 
       47 
     | 
    
         
            -
            unsigned ZBUFF_isError(size_t errorCode) { return ERR_isError(errorCode); }
         
     | 
| 
       48 
     | 
    
         
            -
            const char* ZBUFF_getErrorName(size_t errorCode) { return ERR_getErrorName(errorCode); }
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
46 
     | 
    
         | 
| 
       51 
47 
     | 
    
         
             
            /*=**************************************************************
         
     | 
| 
       52 
48 
     | 
    
         
             
            *  Custom allocator
         
     | 
| 
         @@ -18,6 +18,20 @@ extern "C" { 
     | 
|
| 
       18 
18 
     | 
    
         
             
            #include <stddef.h>   /* size_t */
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
            /* =====   ZSTDERRORLIB_API : control library symbols visibility   ===== */
         
     | 
| 
      
 22 
     | 
    
         
            +
            #if defined(__GNUC__) && (__GNUC__ >= 4)
         
     | 
| 
      
 23 
     | 
    
         
            +
            #  define ZSTDERRORLIB_VISIBILITY __attribute__ ((visibility ("default")))
         
     | 
| 
      
 24 
     | 
    
         
            +
            #else
         
     | 
| 
      
 25 
     | 
    
         
            +
            #  define ZSTDERRORLIB_VISIBILITY
         
     | 
| 
      
 26 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 27 
     | 
    
         
            +
            #if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
         
     | 
| 
      
 28 
     | 
    
         
            +
            #  define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBILITY
         
     | 
| 
      
 29 
     | 
    
         
            +
            #elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
         
     | 
| 
      
 30 
     | 
    
         
            +
            #  define ZSTDERRORLIB_API __declspec(dllimport) ZSTDERRORLIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
         
     | 
| 
      
 31 
     | 
    
         
            +
            #else
         
     | 
| 
      
 32 
     | 
    
         
            +
            #  define ZSTDERRORLIB_API ZSTDERRORLIB_VISIBILITY
         
     | 
| 
      
 33 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       21 
35 
     | 
    
         
             
            /*-****************************************
         
     | 
| 
       22 
36 
     | 
    
         
             
            *  error codes list
         
     | 
| 
       23 
37 
     | 
    
         
             
            ******************************************/
         
     | 
| 
         @@ -49,8 +63,8 @@ typedef enum { 
     | 
|
| 
       49 
63 
     | 
    
         
             
            /*! ZSTD_getErrorCode() :
         
     | 
| 
       50 
64 
     | 
    
         
             
                convert a `size_t` function result into a `ZSTD_ErrorCode` enum type,
         
     | 
| 
       51 
65 
     | 
    
         
             
                which can be used to compare directly with enum list published into "error_public.h" */
         
     | 
| 
       52 
     | 
    
         
            -
            ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult);
         
     | 
| 
       53 
     | 
    
         
            -
            const char* ZSTD_getErrorString(ZSTD_ErrorCode code);
         
     | 
| 
      
 66 
     | 
    
         
            +
            ZSTDERRORLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult);
         
     | 
| 
      
 67 
     | 
    
         
            +
            ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code);
         
     | 
| 
       54 
68 
     | 
    
         | 
| 
       55 
69 
     | 
    
         | 
| 
       56 
70 
     | 
    
         
             
            #if defined (__cplusplus)
         
     | 
| 
         @@ -267,4 +267,13 @@ MEM_STATIC U32 ZSTD_highbit32(U32 val) 
     | 
|
| 
       267 
267 
     | 
    
         
             
            }
         
     | 
| 
       268 
268 
     | 
    
         | 
| 
       269 
269 
     | 
    
         | 
| 
      
 270 
     | 
    
         
            +
            /* hidden functions */
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
      
 272 
     | 
    
         
            +
            /* ZSTD_invalidateRepCodes() :
         
     | 
| 
      
 273 
     | 
    
         
            +
             * ensures next compression will not use repcodes from previous block.
         
     | 
| 
      
 274 
     | 
    
         
            +
             * Note : only works with regular variant;
         
     | 
| 
      
 275 
     | 
    
         
            +
             *        do not use with extDict variant ! */
         
     | 
| 
      
 276 
     | 
    
         
            +
            void ZSTD_invalidateRepCodes(ZSTD_CCtx* cctx);
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
             
     | 
| 
       270 
279 
     | 
    
         
             
            #endif   /* ZSTD_CCOMMON_H_MODULE */
         
     | 
| 
         @@ -51,8 +51,7 @@ static void ZSTD_resetSeqStore(seqStore_t* ssPtr) 
     | 
|
| 
       51 
51 
     | 
    
         
             
            /*-*************************************
         
     | 
| 
       52 
52 
     | 
    
         
             
            *  Context memory management
         
     | 
| 
       53 
53 
     | 
    
         
             
            ***************************************/
         
     | 
| 
       54 
     | 
    
         
            -
            struct ZSTD_CCtx_s
         
     | 
| 
       55 
     | 
    
         
            -
            {
         
     | 
| 
      
 54 
     | 
    
         
            +
            struct ZSTD_CCtx_s {
         
     | 
| 
       56 
55 
     | 
    
         
             
                const BYTE* nextSrc;    /* next block here to continue on current prefix */
         
     | 
| 
       57 
56 
     | 
    
         
             
                const BYTE* base;       /* All regular indexes relative to this position */
         
     | 
| 
       58 
57 
     | 
    
         
             
                const BYTE* dictBase;   /* extDict indexes relative to this position */
         
     | 
| 
         @@ -61,10 +60,11 @@ struct ZSTD_CCtx_s 
     | 
|
| 
       61 
60 
     | 
    
         
             
                U32   nextToUpdate;     /* index from which to continue dictionary update */
         
     | 
| 
       62 
61 
     | 
    
         
             
                U32   nextToUpdate3;    /* index from which to continue dictionary update */
         
     | 
| 
       63 
62 
     | 
    
         
             
                U32   hashLog3;         /* dispatch table : larger == faster, more memory */
         
     | 
| 
       64 
     | 
    
         
            -
                U32   loadedDictEnd;
         
     | 
| 
      
 63 
     | 
    
         
            +
                U32   loadedDictEnd;    /* index of end of dictionary */
         
     | 
| 
      
 64 
     | 
    
         
            +
                U32   forceWindow;      /* force back-references to respect limit of 1<<wLog, even for dictionary */
         
     | 
| 
       65 
65 
     | 
    
         
             
                ZSTD_compressionStage_e stage;
         
     | 
| 
       66 
66 
     | 
    
         
             
                U32   rep[ZSTD_REP_NUM];
         
     | 
| 
       67 
     | 
    
         
            -
                U32    
     | 
| 
      
 67 
     | 
    
         
            +
                U32   repToConfirm[ZSTD_REP_NUM];
         
     | 
| 
       68 
68 
     | 
    
         
             
                U32   dictID;
         
     | 
| 
       69 
69 
     | 
    
         
             
                ZSTD_parameters params;
         
     | 
| 
       70 
70 
     | 
    
         
             
                void* workSpace;
         
     | 
| 
         @@ -101,7 +101,7 @@ ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem) 
     | 
|
| 
       101 
101 
     | 
    
         
             
                cctx = (ZSTD_CCtx*) ZSTD_malloc(sizeof(ZSTD_CCtx), customMem);
         
     | 
| 
       102 
102 
     | 
    
         
             
                if (!cctx) return NULL;
         
     | 
| 
       103 
103 
     | 
    
         
             
                memset(cctx, 0, sizeof(ZSTD_CCtx));
         
     | 
| 
       104 
     | 
    
         
            -
                 
     | 
| 
      
 104 
     | 
    
         
            +
                cctx->customMem = customMem;
         
     | 
| 
       105 
105 
     | 
    
         
             
                return cctx;
         
     | 
| 
       106 
106 
     | 
    
         
             
            }
         
     | 
| 
       107 
107 
     | 
    
         | 
| 
         @@ -119,6 +119,15 @@ size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx) 
     | 
|
| 
       119 
119 
     | 
    
         
             
                return sizeof(*cctx) + cctx->workSpaceSize;
         
     | 
| 
       120 
120 
     | 
    
         
             
            }
         
     | 
| 
       121 
121 
     | 
    
         | 
| 
      
 122 
     | 
    
         
            +
            size_t ZSTD_setCCtxParameter(ZSTD_CCtx* cctx, ZSTD_CCtxParameter param, unsigned value)
         
     | 
| 
      
 123 
     | 
    
         
            +
            {
         
     | 
| 
      
 124 
     | 
    
         
            +
                switch(param)
         
     | 
| 
      
 125 
     | 
    
         
            +
                {
         
     | 
| 
      
 126 
     | 
    
         
            +
                case ZSTD_p_forceWindow : cctx->forceWindow = value>0; cctx->loadedDictEnd = 0; return 0;
         
     | 
| 
      
 127 
     | 
    
         
            +
                default: return ERROR(parameter_unknown);
         
     | 
| 
      
 128 
     | 
    
         
            +
                }
         
     | 
| 
      
 129 
     | 
    
         
            +
            }
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
       122 
131 
     | 
    
         
             
            const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx)   /* hidden interface */
         
     | 
| 
       123 
132 
     | 
    
         
             
            {
         
     | 
| 
       124 
133 
     | 
    
         
             
                return &(ctx->seqStore);
         
     | 
| 
         @@ -318,6 +327,14 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc, 
     | 
|
| 
       318 
327 
     | 
    
         
             
                }
         
     | 
| 
       319 
328 
     | 
    
         
             
            }
         
     | 
| 
       320 
329 
     | 
    
         | 
| 
      
 330 
     | 
    
         
            +
            /* ZSTD_invalidateRepCodes() :
         
     | 
| 
      
 331 
     | 
    
         
            +
             * ensures next compression will not use repcodes from previous block.
         
     | 
| 
      
 332 
     | 
    
         
            +
             * Note : only works with regular variant;
         
     | 
| 
      
 333 
     | 
    
         
            +
             *        do not use with extDict variant ! */
         
     | 
| 
      
 334 
     | 
    
         
            +
            void ZSTD_invalidateRepCodes(ZSTD_CCtx* cctx) {
         
     | 
| 
      
 335 
     | 
    
         
            +
                int i;
         
     | 
| 
      
 336 
     | 
    
         
            +
                for (i=0; i<ZSTD_REP_NUM; i++) cctx->rep[i] = 0;
         
     | 
| 
      
 337 
     | 
    
         
            +
            }
         
     | 
| 
       321 
338 
     | 
    
         | 
| 
       322 
339 
     | 
    
         
             
            /*! ZSTD_copyCCtx() :
         
     | 
| 
       323 
340 
     | 
    
         
             
            *   Duplicate an existing context `srcCCtx` into another one `dstCCtx`.
         
     | 
| 
         @@ -735,12 +752,19 @@ _check_compressibility: 
     | 
|
| 
       735 
752 
     | 
    
         
             
                  if ((size_t)(op-ostart) >= maxCSize) return 0; }
         
     | 
| 
       736 
753 
     | 
    
         | 
| 
       737 
754 
     | 
    
         
             
                /* confirm repcodes */
         
     | 
| 
       738 
     | 
    
         
            -
                { int i; for (i=0; i<ZSTD_REP_NUM; i++) zc->rep[i] = zc-> 
     | 
| 
      
 755 
     | 
    
         
            +
                { int i; for (i=0; i<ZSTD_REP_NUM; i++) zc->rep[i] = zc->repToConfirm[i]; }
         
     | 
| 
       739 
756 
     | 
    
         | 
| 
       740 
757 
     | 
    
         
             
                return op - ostart;
         
     | 
| 
       741 
758 
     | 
    
         
             
            }
         
     | 
| 
       742 
759 
     | 
    
         | 
| 
       743 
760 
     | 
    
         | 
| 
      
 761 
     | 
    
         
            +
            #if 0 /* for debug */
         
     | 
| 
      
 762 
     | 
    
         
            +
            #  define STORESEQ_DEBUG
         
     | 
| 
      
 763 
     | 
    
         
            +
            #include <stdio.h>   /* fprintf */
         
     | 
| 
      
 764 
     | 
    
         
            +
            U32 g_startDebug = 0;
         
     | 
| 
      
 765 
     | 
    
         
            +
            const BYTE* g_start = NULL;
         
     | 
| 
      
 766 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 767 
     | 
    
         
            +
             
     | 
| 
       744 
768 
     | 
    
         
             
            /*! ZSTD_storeSeq() :
         
     | 
| 
       745 
769 
     | 
    
         
             
                Store a sequence (literal length, literals, offset code and match length code) into seqStore_t.
         
     | 
| 
       746 
770 
     | 
    
         
             
                `offsetCode` : distance to match, or 0 == repCode.
         
     | 
| 
         @@ -748,13 +772,14 @@ _check_compressibility: 
     | 
|
| 
       748 
772 
     | 
    
         
             
            */
         
     | 
| 
       749 
773 
     | 
    
         
             
            MEM_STATIC void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const void* literals, U32 offsetCode, size_t matchCode)
         
     | 
| 
       750 
774 
     | 
    
         
             
            {
         
     | 
| 
       751 
     | 
    
         
            -
            # 
     | 
| 
       752 
     | 
    
         
            -
                 
     | 
| 
       753 
     | 
    
         
            -
             
     | 
| 
       754 
     | 
    
         
            -
             
     | 
| 
       755 
     | 
    
         
            -
             
     | 
| 
       756 
     | 
    
         
            -
             
     | 
| 
       757 
     | 
    
         
            -
             
     | 
| 
      
 775 
     | 
    
         
            +
            #ifdef STORESEQ_DEBUG
         
     | 
| 
      
 776 
     | 
    
         
            +
                if (g_startDebug) {
         
     | 
| 
      
 777 
     | 
    
         
            +
                    const U32 pos = (U32)((const BYTE*)literals - g_start);
         
     | 
| 
      
 778 
     | 
    
         
            +
                    if (g_start==NULL) g_start = (const BYTE*)literals;
         
     | 
| 
      
 779 
     | 
    
         
            +
                    if ((pos > 1895000) && (pos < 1895300))
         
     | 
| 
      
 780 
     | 
    
         
            +
                        fprintf(stderr, "Cpos %6u :%5u literals & match %3u bytes at distance %6u \n",
         
     | 
| 
      
 781 
     | 
    
         
            +
                               pos, (U32)litLength, (U32)matchCode+MINMATCH, (U32)offsetCode);
         
     | 
| 
      
 782 
     | 
    
         
            +
                }
         
     | 
| 
       758 
783 
     | 
    
         
             
            #endif
         
     | 
| 
       759 
784 
     | 
    
         
             
                /* copy Literals */
         
     | 
| 
       760 
785 
     | 
    
         
             
                ZSTD_wildcopy(seqStorePtr->lit, literals, litLength);
         
     | 
| 
         @@ -1004,8 +1029,8 @@ void ZSTD_compressBlock_fast_generic(ZSTD_CCtx* cctx, 
     | 
|
| 
       1004 
1029 
     | 
    
         
             
                }   }   }
         
     | 
| 
       1005 
1030 
     | 
    
         | 
| 
       1006 
1031 
     | 
    
         
             
                /* save reps for next block */
         
     | 
| 
       1007 
     | 
    
         
            -
                cctx-> 
     | 
| 
       1008 
     | 
    
         
            -
                cctx-> 
     | 
| 
      
 1032 
     | 
    
         
            +
                cctx->repToConfirm[0] = offset_1 ? offset_1 : offsetSaved;
         
     | 
| 
      
 1033 
     | 
    
         
            +
                cctx->repToConfirm[1] = offset_2 ? offset_2 : offsetSaved;
         
     | 
| 
       1009 
1034 
     | 
    
         | 
| 
       1010 
1035 
     | 
    
         
             
                /* Last Literals */
         
     | 
| 
       1011 
1036 
     | 
    
         
             
                {   size_t const lastLLSize = iend - anchor;
         
     | 
| 
         @@ -1119,7 +1144,7 @@ static void ZSTD_compressBlock_fast_extDict_generic(ZSTD_CCtx* ctx, 
     | 
|
| 
       1119 
1144 
     | 
    
         
             
                }   }   }
         
     | 
| 
       1120 
1145 
     | 
    
         | 
| 
       1121 
1146 
     | 
    
         
             
                /* save reps for next block */
         
     | 
| 
       1122 
     | 
    
         
            -
                ctx-> 
     | 
| 
      
 1147 
     | 
    
         
            +
                ctx->repToConfirm[0] = offset_1; ctx->repToConfirm[1] = offset_2;
         
     | 
| 
       1123 
1148 
     | 
    
         | 
| 
       1124 
1149 
     | 
    
         
             
                /* Last Literals */
         
     | 
| 
       1125 
1150 
     | 
    
         
             
                {   size_t const lastLLSize = iend - anchor;
         
     | 
| 
         @@ -1273,8 +1298,8 @@ void ZSTD_compressBlock_doubleFast_generic(ZSTD_CCtx* cctx, 
     | 
|
| 
       1273 
1298 
     | 
    
         
             
                }   }   }
         
     | 
| 
       1274 
1299 
     | 
    
         | 
| 
       1275 
1300 
     | 
    
         
             
                /* save reps for next block */
         
     | 
| 
       1276 
     | 
    
         
            -
                cctx-> 
     | 
| 
       1277 
     | 
    
         
            -
                cctx-> 
     | 
| 
      
 1301 
     | 
    
         
            +
                cctx->repToConfirm[0] = offset_1 ? offset_1 : offsetSaved;
         
     | 
| 
      
 1302 
     | 
    
         
            +
                cctx->repToConfirm[1] = offset_2 ? offset_2 : offsetSaved;
         
     | 
| 
       1278 
1303 
     | 
    
         | 
| 
       1279 
1304 
     | 
    
         
             
                /* Last Literals */
         
     | 
| 
       1280 
1305 
     | 
    
         
             
                {   size_t const lastLLSize = iend - anchor;
         
     | 
| 
         @@ -1423,7 +1448,7 @@ static void ZSTD_compressBlock_doubleFast_extDict_generic(ZSTD_CCtx* ctx, 
     | 
|
| 
       1423 
1448 
     | 
    
         
             
                }   }   }
         
     | 
| 
       1424 
1449 
     | 
    
         | 
| 
       1425 
1450 
     | 
    
         
             
                /* save reps for next block */
         
     | 
| 
       1426 
     | 
    
         
            -
                ctx-> 
     | 
| 
      
 1451 
     | 
    
         
            +
                ctx->repToConfirm[0] = offset_1; ctx->repToConfirm[1] = offset_2;
         
     | 
| 
       1427 
1452 
     | 
    
         | 
| 
       1428 
1453 
     | 
    
         
             
                /* Last Literals */
         
     | 
| 
       1429 
1454 
     | 
    
         
             
                {   size_t const lastLLSize = iend - anchor;
         
     | 
| 
         @@ -1955,8 +1980,8 @@ _storeSequence: 
     | 
|
| 
       1955 
1980 
     | 
    
         
             
                }   }
         
     | 
| 
       1956 
1981 
     | 
    
         | 
| 
       1957 
1982 
     | 
    
         
             
                /* Save reps for next block */
         
     | 
| 
       1958 
     | 
    
         
            -
                ctx-> 
     | 
| 
       1959 
     | 
    
         
            -
                ctx-> 
     | 
| 
      
 1983 
     | 
    
         
            +
                ctx->repToConfirm[0] = offset_1 ? offset_1 : savedOffset;
         
     | 
| 
      
 1984 
     | 
    
         
            +
                ctx->repToConfirm[1] = offset_2 ? offset_2 : savedOffset;
         
     | 
| 
       1960 
1985 
     | 
    
         | 
| 
       1961 
1986 
     | 
    
         
             
                /* Last Literals */
         
     | 
| 
       1962 
1987 
     | 
    
         
             
                {   size_t const lastLLSize = iend - anchor;
         
     | 
| 
         @@ -2150,7 +2175,7 @@ _storeSequence: 
     | 
|
| 
       2150 
2175 
     | 
    
         
             
                }   }
         
     | 
| 
       2151 
2176 
     | 
    
         | 
| 
       2152 
2177 
     | 
    
         
             
                /* Save reps for next block */
         
     | 
| 
       2153 
     | 
    
         
            -
                ctx-> 
     | 
| 
      
 2178 
     | 
    
         
            +
                ctx->repToConfirm[0] = offset_1; ctx->repToConfirm[1] = offset_2;
         
     | 
| 
       2154 
2179 
     | 
    
         | 
| 
       2155 
2180 
     | 
    
         
             
                /* Last Literals */
         
     | 
| 
       2156 
2181 
     | 
    
         
             
                {   size_t const lastLLSize = iend - anchor;
         
     | 
| 
         @@ -2409,12 +2434,14 @@ static size_t ZSTD_compressContinue_internal (ZSTD_CCtx* cctx, 
     | 
|
| 
       2409 
2434 
     | 
    
         | 
| 
       2410 
2435 
     | 
    
         
             
                cctx->nextSrc = ip + srcSize;
         
     | 
| 
       2411 
2436 
     | 
    
         | 
| 
       2412 
     | 
    
         
            -
                 
     | 
| 
      
 2437 
     | 
    
         
            +
                if (srcSize) {
         
     | 
| 
      
 2438 
     | 
    
         
            +
                    size_t const cSize = frame ?
         
     | 
| 
       2413 
2439 
     | 
    
         
             
                                         ZSTD_compress_generic (cctx, dst, dstCapacity, src, srcSize, lastFrameChunk) :
         
     | 
| 
       2414 
2440 
     | 
    
         
             
                                         ZSTD_compressBlock_internal (cctx, dst, dstCapacity, src, srcSize);
         
     | 
| 
       2415 
2441 
     | 
    
         
             
                    if (ZSTD_isError(cSize)) return cSize;
         
     | 
| 
       2416 
2442 
     | 
    
         
             
                    return cSize + fhSize;
         
     | 
| 
       2417 
     | 
    
         
            -
                }
         
     | 
| 
      
 2443 
     | 
    
         
            +
                } else
         
     | 
| 
      
 2444 
     | 
    
         
            +
                    return fhSize;
         
     | 
| 
       2418 
2445 
     | 
    
         
             
            }
         
     | 
| 
       2419 
2446 
     | 
    
         | 
| 
       2420 
2447 
     | 
    
         | 
| 
         @@ -2450,7 +2477,7 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_CCtx* zc, const void* src, size_t 
     | 
|
| 
       2450 
2477 
     | 
    
         
             
                zc->dictBase = zc->base;
         
     | 
| 
       2451 
2478 
     | 
    
         
             
                zc->base += ip - zc->nextSrc;
         
     | 
| 
       2452 
2479 
     | 
    
         
             
                zc->nextToUpdate = zc->dictLimit;
         
     | 
| 
       2453 
     | 
    
         
            -
                zc->loadedDictEnd = (U32)(iend - zc->base);
         
     | 
| 
      
 2480 
     | 
    
         
            +
                zc->loadedDictEnd = zc->forceWindow ? 0 : (U32)(iend - zc->base);
         
     | 
| 
       2454 
2481 
     | 
    
         | 
| 
       2455 
2482 
     | 
    
         
             
                zc->nextSrc = iend;
         
     | 
| 
       2456 
2483 
     | 
    
         
             
                if (srcSize <= HASH_READ_SIZE) return 0;
         
     | 
| 
         @@ -2557,9 +2584,9 @@ static size_t ZSTD_loadDictEntropyStats(ZSTD_CCtx* cctx, const void* dict, size_ 
     | 
|
| 
       2557 
2584 
     | 
    
         
             
                }
         
     | 
| 
       2558 
2585 
     | 
    
         | 
| 
       2559 
2586 
     | 
    
         
             
                if (dictPtr+12 > dictEnd) return ERROR(dictionary_corrupted);
         
     | 
| 
       2560 
     | 
    
         
            -
                cctx->rep[0] = MEM_readLE32(dictPtr+0); if (cctx->rep[0] >= dictSize) return ERROR(dictionary_corrupted);
         
     | 
| 
       2561 
     | 
    
         
            -
                cctx->rep[1] = MEM_readLE32(dictPtr+4); if (cctx->rep[1] >= dictSize) return ERROR(dictionary_corrupted);
         
     | 
| 
       2562 
     | 
    
         
            -
                cctx->rep[2] = MEM_readLE32(dictPtr+8); if (cctx->rep[2] >= dictSize) return ERROR(dictionary_corrupted);
         
     | 
| 
      
 2587 
     | 
    
         
            +
                cctx->rep[0] = MEM_readLE32(dictPtr+0); if (cctx->rep[0] == 0 || cctx->rep[0] >= dictSize) return ERROR(dictionary_corrupted);
         
     | 
| 
      
 2588 
     | 
    
         
            +
                cctx->rep[1] = MEM_readLE32(dictPtr+4); if (cctx->rep[1] == 0 || cctx->rep[1] >= dictSize) return ERROR(dictionary_corrupted);
         
     | 
| 
      
 2589 
     | 
    
         
            +
                cctx->rep[2] = MEM_readLE32(dictPtr+8); if (cctx->rep[2] == 0 || cctx->rep[2] >= dictSize) return ERROR(dictionary_corrupted);
         
     | 
| 
       2563 
2590 
     | 
    
         
             
                dictPtr += 12;
         
     | 
| 
       2564 
2591 
     | 
    
         | 
| 
       2565 
2592 
     | 
    
         
             
                {   U32 offcodeMax = MaxOff;
         
     | 
| 
         @@ -2594,7 +2621,6 @@ static size_t ZSTD_compress_insertDictionary(ZSTD_CCtx* zc, const void* dict, si 
     | 
|
| 
       2594 
2621 
     | 
    
         
             
                }
         
     | 
| 
       2595 
2622 
     | 
    
         
             
            }
         
     | 
| 
       2596 
2623 
     | 
    
         | 
| 
       2597 
     | 
    
         
            -
             
     | 
| 
       2598 
2624 
     | 
    
         
             
            /*! ZSTD_compressBegin_internal() :
         
     | 
| 
       2599 
2625 
     | 
    
         
             
            *   @return : 0, or an error code */
         
     | 
| 
       2600 
2626 
     | 
    
         
             
            static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
         
     | 
| 
         @@ -2626,9 +2652,9 @@ size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t di 
     | 
|
| 
       2626 
2652 
     | 
    
         
             
            }
         
     | 
| 
       2627 
2653 
     | 
    
         | 
| 
       2628 
2654 
     | 
    
         | 
| 
       2629 
     | 
    
         
            -
            size_t ZSTD_compressBegin(ZSTD_CCtx*  
     | 
| 
      
 2655 
     | 
    
         
            +
            size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel)
         
     | 
| 
       2630 
2656 
     | 
    
         
             
            {
         
     | 
| 
       2631 
     | 
    
         
            -
                return ZSTD_compressBegin_usingDict( 
     | 
| 
      
 2657 
     | 
    
         
            +
                return ZSTD_compressBegin_usingDict(cctx, NULL, 0, compressionLevel);
         
     | 
| 
       2632 
2658 
     | 
    
         
             
            }
         
     | 
| 
       2633 
2659 
     | 
    
         | 
| 
       2634 
2660 
     | 
    
         | 
| 
         @@ -2733,7 +2759,8 @@ size_t ZSTD_compress(void* dst, size_t dstCapacity, const void* src, size_t srcS 
     | 
|
| 
       2733 
2759 
     | 
    
         
             
            /* =====  Dictionary API  ===== */
         
     | 
| 
       2734 
2760 
     | 
    
         | 
| 
       2735 
2761 
     | 
    
         
             
            struct ZSTD_CDict_s {
         
     | 
| 
       2736 
     | 
    
         
            -
                void*  
     | 
| 
      
 2762 
     | 
    
         
            +
                void* dictBuffer;
         
     | 
| 
      
 2763 
     | 
    
         
            +
                const void* dictContent;
         
     | 
| 
       2737 
2764 
     | 
    
         
             
                size_t dictContentSize;
         
     | 
| 
       2738 
2765 
     | 
    
         
             
                ZSTD_CCtx* refContext;
         
     | 
| 
       2739 
2766 
     | 
    
         
             
            };  /* typedef'd tp ZSTD_CDict within "zstd.h" */
         
     | 
| 
         @@ -2741,39 +2768,45 @@ struct ZSTD_CDict_s { 
     | 
|
| 
       2741 
2768 
     | 
    
         
             
            size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict)
         
     | 
| 
       2742 
2769 
     | 
    
         
             
            {
         
     | 
| 
       2743 
2770 
     | 
    
         
             
                if (cdict==NULL) return 0;   /* support sizeof on NULL */
         
     | 
| 
       2744 
     | 
    
         
            -
                return ZSTD_sizeof_CCtx(cdict->refContext) + cdict->dictContentSize;
         
     | 
| 
      
 2771 
     | 
    
         
            +
                return ZSTD_sizeof_CCtx(cdict->refContext) + (cdict->dictBuffer ? cdict->dictContentSize : 0) + sizeof(*cdict);
         
     | 
| 
       2745 
2772 
     | 
    
         
             
            }
         
     | 
| 
       2746 
2773 
     | 
    
         | 
| 
       2747 
     | 
    
         
            -
            ZSTD_CDict* ZSTD_createCDict_advanced(const void*  
     | 
| 
      
 2774 
     | 
    
         
            +
            ZSTD_CDict* ZSTD_createCDict_advanced(const void* dictBuffer, size_t dictSize, unsigned byReference,
         
     | 
| 
      
 2775 
     | 
    
         
            +
                                                  ZSTD_parameters params, ZSTD_customMem customMem)
         
     | 
| 
       2748 
2776 
     | 
    
         
             
            {
         
     | 
| 
       2749 
2777 
     | 
    
         
             
                if (!customMem.customAlloc && !customMem.customFree) customMem = defaultCustomMem;
         
     | 
| 
       2750 
2778 
     | 
    
         
             
                if (!customMem.customAlloc || !customMem.customFree) return NULL;
         
     | 
| 
       2751 
2779 
     | 
    
         | 
| 
       2752 
2780 
     | 
    
         
             
                {   ZSTD_CDict* const cdict = (ZSTD_CDict*) ZSTD_malloc(sizeof(ZSTD_CDict), customMem);
         
     | 
| 
       2753 
     | 
    
         
            -
                    void* const dictContent = ZSTD_malloc(dictSize, customMem);
         
     | 
| 
       2754 
2781 
     | 
    
         
             
                    ZSTD_CCtx* const cctx = ZSTD_createCCtx_advanced(customMem);
         
     | 
| 
       2755 
2782 
     | 
    
         | 
| 
       2756 
     | 
    
         
            -
                    if (! 
     | 
| 
       2757 
     | 
    
         
            -
                        ZSTD_free(dictContent, customMem);
         
     | 
| 
      
 2783 
     | 
    
         
            +
                    if (!cdict || !cctx) {
         
     | 
| 
       2758 
2784 
     | 
    
         
             
                        ZSTD_free(cdict, customMem);
         
     | 
| 
       2759 
2785 
     | 
    
         
             
                        ZSTD_free(cctx, customMem);
         
     | 
| 
       2760 
2786 
     | 
    
         
             
                        return NULL;
         
     | 
| 
       2761 
2787 
     | 
    
         
             
                    }
         
     | 
| 
       2762 
2788 
     | 
    
         | 
| 
       2763 
     | 
    
         
            -
                    if (dictSize) {
         
     | 
| 
       2764 
     | 
    
         
            -
                         
     | 
| 
      
 2789 
     | 
    
         
            +
                    if ((byReference) || (!dictBuffer) || (!dictSize)) {
         
     | 
| 
      
 2790 
     | 
    
         
            +
                        cdict->dictBuffer = NULL;
         
     | 
| 
      
 2791 
     | 
    
         
            +
                        cdict->dictContent = dictBuffer;
         
     | 
| 
      
 2792 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 2793 
     | 
    
         
            +
                        void* const internalBuffer = ZSTD_malloc(dictSize, customMem);
         
     | 
| 
      
 2794 
     | 
    
         
            +
                        if (!internalBuffer) { ZSTD_free(cctx, customMem); ZSTD_free(cdict, customMem); return NULL; }
         
     | 
| 
      
 2795 
     | 
    
         
            +
                        memcpy(internalBuffer, dictBuffer, dictSize);
         
     | 
| 
      
 2796 
     | 
    
         
            +
                        cdict->dictBuffer = internalBuffer;
         
     | 
| 
      
 2797 
     | 
    
         
            +
                        cdict->dictContent = internalBuffer;
         
     | 
| 
       2765 
2798 
     | 
    
         
             
                    }
         
     | 
| 
       2766 
     | 
    
         
            -
             
     | 
| 
      
 2799 
     | 
    
         
            +
             
     | 
| 
      
 2800 
     | 
    
         
            +
                    {   size_t const errorCode = ZSTD_compressBegin_advanced(cctx, cdict->dictContent, dictSize, params, 0);
         
     | 
| 
       2767 
2801 
     | 
    
         
             
                        if (ZSTD_isError(errorCode)) {
         
     | 
| 
       2768 
     | 
    
         
            -
                            ZSTD_free( 
     | 
| 
       2769 
     | 
    
         
            -
                            ZSTD_free(cdict, customMem);
         
     | 
| 
      
 2802 
     | 
    
         
            +
                            ZSTD_free(cdict->dictBuffer, customMem);
         
     | 
| 
       2770 
2803 
     | 
    
         
             
                            ZSTD_free(cctx, customMem);
         
     | 
| 
      
 2804 
     | 
    
         
            +
                            ZSTD_free(cdict, customMem);
         
     | 
| 
       2771 
2805 
     | 
    
         
             
                            return NULL;
         
     | 
| 
       2772 
2806 
     | 
    
         
             
                    }   }
         
     | 
| 
       2773 
2807 
     | 
    
         | 
| 
       2774 
     | 
    
         
            -
                    cdict->dictContent = dictContent;
         
     | 
| 
       2775 
     | 
    
         
            -
                    cdict->dictContentSize = dictSize;
         
     | 
| 
       2776 
2808 
     | 
    
         
             
                    cdict->refContext = cctx;
         
     | 
| 
      
 2809 
     | 
    
         
            +
                    cdict->dictContentSize = dictSize;
         
     | 
| 
       2777 
2810 
     | 
    
         
             
                    return cdict;
         
     | 
| 
       2778 
2811 
     | 
    
         
             
                }
         
     | 
| 
       2779 
2812 
     | 
    
         
             
            }
         
     | 
| 
         @@ -2783,7 +2816,15 @@ ZSTD_CDict* ZSTD_createCDict(const void* dict, size_t dictSize, int compressionL 
     | 
|
| 
       2783 
2816 
     | 
    
         
             
                ZSTD_customMem const allocator = { NULL, NULL, NULL };
         
     | 
| 
       2784 
2817 
     | 
    
         
             
                ZSTD_parameters params = ZSTD_getParams(compressionLevel, 0, dictSize);
         
     | 
| 
       2785 
2818 
     | 
    
         
             
                params.fParams.contentSizeFlag = 1;
         
     | 
| 
       2786 
     | 
    
         
            -
                return ZSTD_createCDict_advanced(dict, dictSize, params, allocator);
         
     | 
| 
      
 2819 
     | 
    
         
            +
                return ZSTD_createCDict_advanced(dict, dictSize, 0, params, allocator);
         
     | 
| 
      
 2820 
     | 
    
         
            +
            }
         
     | 
| 
      
 2821 
     | 
    
         
            +
             
     | 
| 
      
 2822 
     | 
    
         
            +
            ZSTD_CDict* ZSTD_createCDict_byReference(const void* dict, size_t dictSize, int compressionLevel)
         
     | 
| 
      
 2823 
     | 
    
         
            +
            {
         
     | 
| 
      
 2824 
     | 
    
         
            +
                ZSTD_customMem const allocator = { NULL, NULL, NULL };
         
     | 
| 
      
 2825 
     | 
    
         
            +
                ZSTD_parameters params = ZSTD_getParams(compressionLevel, 0, dictSize);
         
     | 
| 
      
 2826 
     | 
    
         
            +
                params.fParams.contentSizeFlag = 1;
         
     | 
| 
      
 2827 
     | 
    
         
            +
                return ZSTD_createCDict_advanced(dict, dictSize, 1, params, allocator);
         
     | 
| 
       2787 
2828 
     | 
    
         
             
            }
         
     | 
| 
       2788 
2829 
     | 
    
         | 
| 
       2789 
2830 
     | 
    
         
             
            size_t ZSTD_freeCDict(ZSTD_CDict* cdict)
         
     | 
| 
         @@ -2791,7 +2832,7 @@ size_t ZSTD_freeCDict(ZSTD_CDict* cdict) 
     | 
|
| 
       2791 
2832 
     | 
    
         
             
                if (cdict==NULL) return 0;   /* support free on NULL */
         
     | 
| 
       2792 
2833 
     | 
    
         
             
                {   ZSTD_customMem const cMem = cdict->refContext->customMem;
         
     | 
| 
       2793 
2834 
     | 
    
         
             
                    ZSTD_freeCCtx(cdict->refContext);
         
     | 
| 
       2794 
     | 
    
         
            -
                    ZSTD_free(cdict-> 
     | 
| 
      
 2835 
     | 
    
         
            +
                    ZSTD_free(cdict->dictBuffer, cMem);
         
     | 
| 
       2795 
2836 
     | 
    
         
             
                    ZSTD_free(cdict, cMem);
         
     | 
| 
       2796 
2837 
     | 
    
         
             
                    return 0;
         
     | 
| 
       2797 
2838 
     | 
    
         
             
                }
         
     | 
| 
         @@ -2801,7 +2842,7 @@ static ZSTD_parameters ZSTD_getParamsFromCDict(const ZSTD_CDict* cdict) { 
     | 
|
| 
       2801 
2842 
     | 
    
         
             
                return ZSTD_getParamsFromCCtx(cdict->refContext);
         
     | 
| 
       2802 
2843 
     | 
    
         
             
            }
         
     | 
| 
       2803 
2844 
     | 
    
         | 
| 
       2804 
     | 
    
         
            -
            size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict,  
     | 
| 
      
 2845 
     | 
    
         
            +
            size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize)
         
     | 
| 
       2805 
2846 
     | 
    
         
             
            {
         
     | 
| 
       2806 
2847 
     | 
    
         
             
                if (cdict->dictContentSize) CHECK_F(ZSTD_copyCCtx(cctx, cdict->refContext, pledgedSrcSize))
         
     | 
| 
       2807 
2848 
     | 
    
         
             
                else CHECK_F(ZSTD_compressBegin_advanced(cctx, NULL, 0, cdict->refContext->params, pledgedSrcSize));
         
     | 
| 
         @@ -2900,7 +2941,7 @@ size_t ZSTD_CStreamOutSize(void) { return ZSTD_compressBound(ZSTD_BLOCKSIZE_ABSO 
     | 
|
| 
       2900 
2941 
     | 
    
         | 
| 
       2901 
2942 
     | 
    
         
             
            size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize)
         
     | 
| 
       2902 
2943 
     | 
    
         
             
            {
         
     | 
| 
       2903 
     | 
    
         
            -
                if (zcs->inBuffSize==0) return ERROR(stage_wrong);   /* zcs has not been init at least once */
         
     | 
| 
      
 2944 
     | 
    
         
            +
                if (zcs->inBuffSize==0) return ERROR(stage_wrong);   /* zcs has not been init at least once => can't reset */
         
     | 
| 
       2904 
2945 
     | 
    
         | 
| 
       2905 
2946 
     | 
    
         
             
                if (zcs->cdict) CHECK_F(ZSTD_compressBegin_usingCDict(zcs->cctx, zcs->cdict, pledgedSrcSize))
         
     | 
| 
       2906 
2947 
     | 
    
         
             
                else CHECK_F(ZSTD_compressBegin_advanced(zcs->cctx, NULL, 0, zcs->params, pledgedSrcSize));
         
     | 
| 
         @@ -2937,9 +2978,9 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, 
     | 
|
| 
       2937 
2978 
     | 
    
         
             
                    if (zcs->outBuff == NULL) return ERROR(memory_allocation);
         
     | 
| 
       2938 
2979 
     | 
    
         
             
                }
         
     | 
| 
       2939 
2980 
     | 
    
         | 
| 
       2940 
     | 
    
         
            -
                if (dict) {
         
     | 
| 
      
 2981 
     | 
    
         
            +
                if (dict && dictSize >= 8) {
         
     | 
| 
       2941 
2982 
     | 
    
         
             
                    ZSTD_freeCDict(zcs->cdictLocal);
         
     | 
| 
       2942 
     | 
    
         
            -
                    zcs->cdictLocal = ZSTD_createCDict_advanced(dict, dictSize, params, zcs->customMem);
         
     | 
| 
      
 2983 
     | 
    
         
            +
                    zcs->cdictLocal = ZSTD_createCDict_advanced(dict, dictSize, 0, params, zcs->customMem);
         
     | 
| 
       2943 
2984 
     | 
    
         
             
                    if (zcs->cdictLocal == NULL) return ERROR(memory_allocation);
         
     | 
| 
       2944 
2985 
     | 
    
         
             
                    zcs->cdict = zcs->cdictLocal;
         
     | 
| 
       2945 
2986 
     | 
    
         
             
                } else zcs->cdict = NULL;
         
     | 
| 
         @@ -2956,6 +2997,7 @@ size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict) 
     | 
|
| 
       2956 
2997 
     | 
    
         
             
                ZSTD_parameters const params = ZSTD_getParamsFromCDict(cdict);
         
     | 
| 
       2957 
2998 
     | 
    
         
             
                size_t const initError =  ZSTD_initCStream_advanced(zcs, NULL, 0, params, 0);
         
     | 
| 
       2958 
2999 
     | 
    
         
             
                zcs->cdict = cdict;
         
     | 
| 
      
 3000 
     | 
    
         
            +
                zcs->cctx->dictID = params.fParams.noDictIDFlag ? 0 : cdict->refContext->dictID;
         
     | 
| 
       2959 
3001 
     | 
    
         
             
                return initError;
         
     | 
| 
       2960 
3002 
     | 
    
         
             
            }
         
     | 
| 
       2961 
3003 
     | 
    
         | 
| 
         @@ -2967,7 +3009,8 @@ size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dict, size_t di 
     | 
|
| 
       2967 
3009 
     | 
    
         | 
| 
       2968 
3010 
     | 
    
         
             
            size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, int compressionLevel, unsigned long long pledgedSrcSize)
         
     | 
| 
       2969 
3011 
     | 
    
         
             
            {
         
     | 
| 
       2970 
     | 
    
         
            -
                ZSTD_parameters  
     | 
| 
      
 3012 
     | 
    
         
            +
                ZSTD_parameters params = ZSTD_getParams(compressionLevel, pledgedSrcSize, 0);
         
     | 
| 
      
 3013 
     | 
    
         
            +
                if (pledgedSrcSize) params.fParams.contentSizeFlag = 1;
         
     | 
| 
       2971 
3014 
     | 
    
         
             
                return ZSTD_initCStream_advanced(zcs, NULL, 0, params, pledgedSrcSize);
         
     | 
| 
       2972 
3015 
     | 
    
         
             
            }
         
     | 
| 
       2973 
3016 
     | 
    
         |