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