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