]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/journal/compress.h
license: LGPL-2.1+ -> LGPL-2.1-or-later
[thirdparty/systemd.git] / src / journal / compress.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include <unistd.h>
5
6 #include "journal-def.h"
7
8 const char* object_compressed_to_string(int compression);
9 int object_compressed_from_string(const char *compression);
10
11 int compress_blob_xz(const void *src, uint64_t src_size,
12 void *dst, size_t dst_alloc_size, size_t *dst_size);
13 int compress_blob_lz4(const void *src, uint64_t src_size,
14 void *dst, size_t dst_alloc_size, size_t *dst_size);
15 int compress_blob_zstd(const void *src, uint64_t src_size,
16 void *dst, size_t dst_alloc_size, size_t *dst_size);
17
18 static inline int compress_blob(const void *src, uint64_t src_size,
19 void *dst, size_t dst_alloc_size, size_t *dst_size) {
20 int r;
21 #if HAVE_ZSTD
22 r = compress_blob_zstd(src, src_size, dst, dst_alloc_size, dst_size);
23 if (r == 0)
24 return OBJECT_COMPRESSED_ZSTD;
25 #elif HAVE_LZ4
26 r = compress_blob_lz4(src, src_size, dst, dst_alloc_size, dst_size);
27 if (r == 0)
28 return OBJECT_COMPRESSED_LZ4;
29 #elif HAVE_XZ
30 r = compress_blob_xz(src, src_size, dst, dst_alloc_size, dst_size);
31 if (r == 0)
32 return OBJECT_COMPRESSED_XZ;
33 #else
34 r = -EOPNOTSUPP;
35 #endif
36 return r;
37 }
38
39 int decompress_blob_xz(const void *src, uint64_t src_size,
40 void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
41 int decompress_blob_lz4(const void *src, uint64_t src_size,
42 void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
43 int decompress_blob_zstd(const void *src, uint64_t src_size,
44 void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
45 int decompress_blob(int compression,
46 const void *src, uint64_t src_size,
47 void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
48
49 int decompress_startswith_xz(const void *src, uint64_t src_size,
50 void **buffer, size_t *buffer_size,
51 const void *prefix, size_t prefix_len,
52 uint8_t extra);
53 int decompress_startswith_lz4(const void *src, uint64_t src_size,
54 void **buffer, size_t *buffer_size,
55 const void *prefix, size_t prefix_len,
56 uint8_t extra);
57 int decompress_startswith_zstd(const void *src, uint64_t src_size,
58 void **buffer, size_t *buffer_size,
59 const void *prefix, size_t prefix_len,
60 uint8_t extra);
61 int decompress_startswith(int compression,
62 const void *src, uint64_t src_size,
63 void **buffer, size_t *buffer_size,
64 const void *prefix, size_t prefix_len,
65 uint8_t extra);
66
67 int compress_stream_xz(int fdf, int fdt, uint64_t max_bytes);
68 int compress_stream_lz4(int fdf, int fdt, uint64_t max_bytes);
69 int compress_stream_zstd(int fdf, int fdt, uint64_t max_bytes);
70
71 int decompress_stream_xz(int fdf, int fdt, uint64_t max_size);
72 int decompress_stream_lz4(int fdf, int fdt, uint64_t max_size);
73 int decompress_stream_zstd(int fdf, int fdt, uint64_t max_size);
74
75 #if HAVE_ZSTD
76 # define compress_stream compress_stream_zstd
77 # define COMPRESSED_EXT ".zst"
78 #elif HAVE_LZ4
79 # define compress_stream compress_stream_lz4
80 # define COMPRESSED_EXT ".lz4"
81 #elif HAVE_XZ
82 # define compress_stream compress_stream_xz
83 # define COMPRESSED_EXT ".xz"
84 #else
85 static inline int compress_stream(int fdf, int fdt, uint64_t max_size) {
86 return -EOPNOTSUPP;
87 }
88 # define COMPRESSED_EXT ""
89 #endif
90
91 int decompress_stream(const char *filename, int fdf, int fdt, uint64_t max_bytes);