1 /* 2 * Copyright (c) 2016-2020, 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 #include <stddef.h> /* size_t */ 12 13 /******* EXPOSED TYPES ********************************************************/ 14 /* 15 * Contains the parsed contents of a dictionary 16 * This includes Huffman and FSE tables used for decoding and data on offsets 17 */ 18 typedef struct dictionary_s dictionary_t; 19 /******* END EXPOSED TYPES ****************************************************/ 20 21 /******* DECOMPRESSION FUNCTIONS **********************************************/ 22 /// Zstandard decompression functions. 23 /// `dst` must point to a space at least as large as the reconstructed output. 24 size_t ZSTD_decompress(void *const dst, const size_t dst_len, 25 const void *const src, const size_t src_len); 26 27 /// If `dict != NULL` and `dict_len >= 8`, does the same thing as 28 /// `ZSTD_decompress` but uses the provided dict 29 size_t ZSTD_decompress_with_dict(void *const dst, const size_t dst_len, 30 const void *const src, const size_t src_len, 31 dictionary_t* parsed_dict); 32 33 /// Get the decompressed size of an input stream so memory can be allocated in 34 /// advance 35 /// Returns -1 if the size can't be determined 36 /// Assumes decompression of a single frame 37 size_t ZSTD_get_decompressed_size(const void *const src, const size_t src_len); 38 /******* END DECOMPRESSION FUNCTIONS ******************************************/ 39 40 /******* DICTIONARY MANAGEMENT ***********************************************/ 41 /* 42 * Return a valid dictionary_t pointer for use with dictionary initialization 43 * or decompression 44 */ 45 dictionary_t* create_dictionary(void); 46 47 /* 48 * Parse a provided dictionary blob for use in decompression 49 * `src` -- must point to memory space representing the dictionary 50 * `src_len` -- must provide the dictionary size 51 * `dict` -- will contain the parsed contents of the dictionary and 52 * can be used for decompression 53 */ 54 void parse_dictionary(dictionary_t *const dict, const void *src, 55 size_t src_len); 56 57 /* 58 * Free internal Huffman tables, FSE tables, and dictionary content 59 */ 60 void free_dictionary(dictionary_t *const dict); 61 /******* END DICTIONARY MANAGEMENT *******************************************/ 62