]> git.sesse.net Git - bcachefs-tools-debian/blob - c_src/linux/zstd_decompress_module.c
7e8cd446f2380ea54acde3bec874ba2771f7a09f
[bcachefs-tools-debian] / c_src / linux / zstd_decompress_module.c
1 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
2 /*
3  * Copyright (c) Facebook, Inc.
4  * All rights reserved.
5  *
6  * This source code is licensed under both the BSD-style license (found in the
7  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
8  * in the COPYING file in the root directory of this source tree).
9  * You may select, at your option, one of the above-listed licenses.
10  */
11
12 #include <linux/kernel.h>
13 #include <linux/module.h>
14 #include <linux/string.h>
15 #include <linux/zstd.h>
16
17 /* Common symbols. zstd_compress must depend on zstd_decompress. */
18
19 unsigned int zstd_is_error(size_t code)
20 {
21         return ZSTD_isError(code);
22 }
23 EXPORT_SYMBOL(zstd_is_error);
24
25 zstd_error_code zstd_get_error_code(size_t code)
26 {
27         return ZSTD_getErrorCode(code);
28 }
29 EXPORT_SYMBOL(zstd_get_error_code);
30
31 const char *zstd_get_error_name(size_t code)
32 {
33         return ZSTD_getErrorName(code);
34 }
35 EXPORT_SYMBOL(zstd_get_error_name);
36
37 /* Decompression symbols. */
38
39 size_t zstd_dctx_workspace_bound(void)
40 {
41         return ZSTD_estimateDCtxSize();
42 }
43 EXPORT_SYMBOL(zstd_dctx_workspace_bound);
44
45 zstd_dctx *zstd_init_dctx(void *workspace, size_t workspace_size)
46 {
47         if (workspace == NULL)
48                 return NULL;
49         return ZSTD_initStaticDCtx(workspace, workspace_size);
50 }
51 EXPORT_SYMBOL(zstd_init_dctx);
52
53 size_t zstd_decompress_dctx(zstd_dctx *dctx, void *dst, size_t dst_capacity,
54         const void *src, size_t src_size)
55 {
56         return ZSTD_decompressDCtx(dctx, dst, dst_capacity, src, src_size);
57 }
58 EXPORT_SYMBOL(zstd_decompress_dctx);
59
60 size_t zstd_dstream_workspace_bound(size_t max_window_size)
61 {
62         return ZSTD_estimateDStreamSize(max_window_size);
63 }
64 EXPORT_SYMBOL(zstd_dstream_workspace_bound);
65
66 zstd_dstream *zstd_init_dstream(size_t max_window_size, void *workspace,
67         size_t workspace_size)
68 {
69         if (workspace == NULL)
70                 return NULL;
71         (void)max_window_size;
72         return ZSTD_initStaticDStream(workspace, workspace_size);
73 }
74 EXPORT_SYMBOL(zstd_init_dstream);
75
76 size_t zstd_reset_dstream(zstd_dstream *dstream)
77 {
78         return ZSTD_resetDStream(dstream);
79 }
80 EXPORT_SYMBOL(zstd_reset_dstream);
81
82 size_t zstd_decompress_stream(zstd_dstream *dstream, zstd_out_buffer *output,
83         zstd_in_buffer *input)
84 {
85         return ZSTD_decompressStream(dstream, output, input);
86 }
87 EXPORT_SYMBOL(zstd_decompress_stream);
88
89 size_t zstd_find_frame_compressed_size(const void *src, size_t src_size)
90 {
91         return ZSTD_findFrameCompressedSize(src, src_size);
92 }
93 EXPORT_SYMBOL(zstd_find_frame_compressed_size);
94
95 size_t zstd_get_frame_header(zstd_frame_header *header, const void *src,
96         size_t src_size)
97 {
98         return ZSTD_getFrameHeader(header, src, src_size);
99 }
100 EXPORT_SYMBOL(zstd_get_frame_header);
101
102 MODULE_LICENSE("Dual BSD/GPL");
103 MODULE_DESCRIPTION("Zstd Decompressor");