1*3117ece4Schristos /* 2*3117ece4Schristos * Copyright (c) Yann Collet, 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 #ifndef ZSTD_V01_H_28739879432 12*3117ece4Schristos #define ZSTD_V01_H_28739879432 13*3117ece4Schristos 14*3117ece4Schristos #if defined (__cplusplus) 15*3117ece4Schristos extern "C" { 16*3117ece4Schristos #endif 17*3117ece4Schristos 18*3117ece4Schristos /* ************************************* 19*3117ece4Schristos * Includes 20*3117ece4Schristos ***************************************/ 21*3117ece4Schristos #include <stddef.h> /* size_t */ 22*3117ece4Schristos 23*3117ece4Schristos 24*3117ece4Schristos /* ************************************* 25*3117ece4Schristos * Simple one-step function 26*3117ece4Schristos ***************************************/ 27*3117ece4Schristos /** 28*3117ece4Schristos ZSTDv01_decompress() : decompress ZSTD frames compliant with v0.1.x format 29*3117ece4Schristos compressedSize : is the exact source size 30*3117ece4Schristos maxOriginalSize : is the size of the 'dst' buffer, which must be already allocated. 31*3117ece4Schristos It must be equal or larger than originalSize, otherwise decompression will fail. 32*3117ece4Schristos return : the number of bytes decompressed into destination buffer (originalSize) 33*3117ece4Schristos or an errorCode if it fails (which can be tested using ZSTDv01_isError()) 34*3117ece4Schristos */ 35*3117ece4Schristos size_t ZSTDv01_decompress( void* dst, size_t maxOriginalSize, 36*3117ece4Schristos const void* src, size_t compressedSize); 37*3117ece4Schristos 38*3117ece4Schristos /** 39*3117ece4Schristos ZSTDv01_findFrameSizeInfoLegacy() : get the source length and decompressed bound of a ZSTD frame compliant with v0.1.x format 40*3117ece4Schristos srcSize : The size of the 'src' buffer, at least as large as the frame pointed to by 'src' 41*3117ece4Schristos cSize (output parameter) : the number of bytes that would be read to decompress this frame 42*3117ece4Schristos or an error code if it fails (which can be tested using ZSTDv01_isError()) 43*3117ece4Schristos dBound (output parameter) : an upper-bound for the decompressed size of the data in the frame 44*3117ece4Schristos or ZSTD_CONTENTSIZE_ERROR if an error occurs 45*3117ece4Schristos 46*3117ece4Schristos note : assumes `cSize` and `dBound` are _not_ NULL. 47*3117ece4Schristos */ 48*3117ece4Schristos void ZSTDv01_findFrameSizeInfoLegacy(const void *src, size_t srcSize, 49*3117ece4Schristos size_t* cSize, unsigned long long* dBound); 50*3117ece4Schristos 51*3117ece4Schristos /** 52*3117ece4Schristos ZSTDv01_isError() : tells if the result of ZSTDv01_decompress() is an error 53*3117ece4Schristos */ 54*3117ece4Schristos unsigned ZSTDv01_isError(size_t code); 55*3117ece4Schristos 56*3117ece4Schristos 57*3117ece4Schristos /* ************************************* 58*3117ece4Schristos * Advanced functions 59*3117ece4Schristos ***************************************/ 60*3117ece4Schristos typedef struct ZSTDv01_Dctx_s ZSTDv01_Dctx; 61*3117ece4Schristos ZSTDv01_Dctx* ZSTDv01_createDCtx(void); 62*3117ece4Schristos size_t ZSTDv01_freeDCtx(ZSTDv01_Dctx* dctx); 63*3117ece4Schristos 64*3117ece4Schristos size_t ZSTDv01_decompressDCtx(void* ctx, 65*3117ece4Schristos void* dst, size_t maxOriginalSize, 66*3117ece4Schristos const void* src, size_t compressedSize); 67*3117ece4Schristos 68*3117ece4Schristos /* ************************************* 69*3117ece4Schristos * Streaming functions 70*3117ece4Schristos ***************************************/ 71*3117ece4Schristos size_t ZSTDv01_resetDCtx(ZSTDv01_Dctx* dctx); 72*3117ece4Schristos 73*3117ece4Schristos size_t ZSTDv01_nextSrcSizeToDecompress(ZSTDv01_Dctx* dctx); 74*3117ece4Schristos size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize); 75*3117ece4Schristos /** 76*3117ece4Schristos Use above functions alternatively. 77*3117ece4Schristos ZSTD_nextSrcSizeToDecompress() tells how much bytes to provide as 'srcSize' to ZSTD_decompressContinue(). 78*3117ece4Schristos ZSTD_decompressContinue() will use previous data blocks to improve compression if they are located prior to current block. 79*3117ece4Schristos Result is the number of bytes regenerated within 'dst'. 80*3117ece4Schristos It can be zero, which is not an error; it just means ZSTD_decompressContinue() has decoded some header. 81*3117ece4Schristos */ 82*3117ece4Schristos 83*3117ece4Schristos /* ************************************* 84*3117ece4Schristos * Prefix - version detection 85*3117ece4Schristos ***************************************/ 86*3117ece4Schristos #define ZSTDv01_magicNumber 0xFD2FB51E /* Big Endian version */ 87*3117ece4Schristos #define ZSTDv01_magicNumberLE 0x1EB52FFD /* Little Endian version */ 88*3117ece4Schristos 89*3117ece4Schristos 90*3117ece4Schristos #if defined (__cplusplus) 91*3117ece4Schristos } 92*3117ece4Schristos #endif 93*3117ece4Schristos 94*3117ece4Schristos #endif /* ZSTD_V01_H_28739879432 */ 95