1*3117ece4Schristos /* 2*3117ece4Schristos * Copyright (c) Meta Platforms, Inc. and affiliates. 3*3117ece4Schristos * All rights reserved. 4*3117ece4Schristos * 5*3117ece4Schristos * This source code is licensed under both the BSD-style license (found in the 6*3117ece4Schristos * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7*3117ece4Schristos * in the COPYING file in the root directory of this source tree). 8*3117ece4Schristos * You may select, at your option, one of the above-listed licenses. 9*3117ece4Schristos */ 10*3117ece4Schristos 11*3117ece4Schristos 12*3117ece4Schristos 13*3117ece4Schristos /* ************************************* 14*3117ece4Schristos * Dependencies 15*3117ece4Schristos ***************************************/ 16*3117ece4Schristos #define ZSTD_DISABLE_DEPRECATE_WARNINGS /* suppress warning on ZSTD_initDStream_usingDict */ 17*3117ece4Schristos #include "../zstd.h" /* ZSTD_CStream, ZSTD_DStream, ZSTDLIB_API */ 18*3117ece4Schristos #define ZBUFF_STATIC_LINKING_ONLY 19*3117ece4Schristos #include "zbuff.h" 20*3117ece4Schristos 21*3117ece4Schristos 22*3117ece4Schristos ZBUFF_DCtx* ZBUFF_createDCtx(void) 23*3117ece4Schristos { 24*3117ece4Schristos return ZSTD_createDStream(); 25*3117ece4Schristos } 26*3117ece4Schristos 27*3117ece4Schristos ZBUFF_DCtx* ZBUFF_createDCtx_advanced(ZSTD_customMem customMem) 28*3117ece4Schristos { 29*3117ece4Schristos return ZSTD_createDStream_advanced(customMem); 30*3117ece4Schristos } 31*3117ece4Schristos 32*3117ece4Schristos size_t ZBUFF_freeDCtx(ZBUFF_DCtx* zbd) 33*3117ece4Schristos { 34*3117ece4Schristos return ZSTD_freeDStream(zbd); 35*3117ece4Schristos } 36*3117ece4Schristos 37*3117ece4Schristos 38*3117ece4Schristos /* *** Initialization *** */ 39*3117ece4Schristos 40*3117ece4Schristos size_t ZBUFF_decompressInitDictionary(ZBUFF_DCtx* zbd, const void* dict, size_t dictSize) 41*3117ece4Schristos { 42*3117ece4Schristos return ZSTD_initDStream_usingDict(zbd, dict, dictSize); 43*3117ece4Schristos } 44*3117ece4Schristos 45*3117ece4Schristos size_t ZBUFF_decompressInit(ZBUFF_DCtx* zbd) 46*3117ece4Schristos { 47*3117ece4Schristos return ZSTD_initDStream(zbd); 48*3117ece4Schristos } 49*3117ece4Schristos 50*3117ece4Schristos 51*3117ece4Schristos /* *** Decompression *** */ 52*3117ece4Schristos 53*3117ece4Schristos size_t ZBUFF_decompressContinue(ZBUFF_DCtx* zbd, 54*3117ece4Schristos void* dst, size_t* dstCapacityPtr, 55*3117ece4Schristos const void* src, size_t* srcSizePtr) 56*3117ece4Schristos { 57*3117ece4Schristos ZSTD_outBuffer outBuff; 58*3117ece4Schristos ZSTD_inBuffer inBuff; 59*3117ece4Schristos size_t result; 60*3117ece4Schristos outBuff.dst = dst; 61*3117ece4Schristos outBuff.pos = 0; 62*3117ece4Schristos outBuff.size = *dstCapacityPtr; 63*3117ece4Schristos inBuff.src = src; 64*3117ece4Schristos inBuff.pos = 0; 65*3117ece4Schristos inBuff.size = *srcSizePtr; 66*3117ece4Schristos result = ZSTD_decompressStream(zbd, &outBuff, &inBuff); 67*3117ece4Schristos *dstCapacityPtr = outBuff.pos; 68*3117ece4Schristos *srcSizePtr = inBuff.pos; 69*3117ece4Schristos return result; 70*3117ece4Schristos } 71*3117ece4Schristos 72*3117ece4Schristos 73*3117ece4Schristos /* ************************************* 74*3117ece4Schristos * Tool functions 75*3117ece4Schristos ***************************************/ 76*3117ece4Schristos size_t ZBUFF_recommendedDInSize(void) { return ZSTD_DStreamInSize(); } 77*3117ece4Schristos size_t ZBUFF_recommendedDOutSize(void) { return ZSTD_DStreamOutSize(); } 78