diff options
Diffstat (limited to 'src/journal/compress.h')
-rw-r--r-- | src/journal/compress.h | 65 |
1 files changed, 56 insertions, 9 deletions
diff --git a/src/journal/compress.h b/src/journal/compress.h index f25fe86abd..92621ba522 100644 --- a/src/journal/compress.h +++ b/src/journal/compress.h @@ -25,15 +25,62 @@ #include <stdbool.h> #include <unistd.h> -bool compress_blob(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size); +#include "journal-def.h" -bool uncompress_blob(const void *src, uint64_t src_size, - void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max); +const char* object_compressed_to_string(int compression); +int object_compressed_from_string(const char *compression); -bool uncompress_startswith(const void *src, uint64_t src_size, - void **buffer, uint64_t *buffer_size, - const void *prefix, uint64_t prefix_len, - uint8_t extra); +int compress_blob_xz(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size); +int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size); -int compress_stream(int fdf, int fdt, uint32_t preset, off_t max_size); -int decompress_stream(int fdf, int fdt, off_t max_size); +static inline int compress_blob(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size) { + int r; +#ifdef HAVE_LZ4 + r = compress_blob_lz4(src, src_size, dst, dst_size); + if (r == 0) + return OBJECT_COMPRESSED_LZ4; +#else + r = compress_blob_xz(src, src_size, dst, dst_size); + if (r == 0) + return OBJECT_COMPRESSED_XZ; +#endif + return r; +} + +int decompress_blob_xz(const void *src, uint64_t src_size, + void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max); +int decompress_blob_lz4(const void *src, uint64_t src_size, + void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max); +int decompress_blob(int compression, + const void *src, uint64_t src_size, + void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max); + +int decompress_startswith_xz(const void *src, uint64_t src_size, + void **buffer, uint64_t *buffer_size, + const void *prefix, uint64_t prefix_len, + uint8_t extra); +int decompress_startswith_lz4(const void *src, uint64_t src_size, + void **buffer, uint64_t *buffer_size, + const void *prefix, uint64_t prefix_len, + uint8_t extra); +int decompress_startswith(int compression, + const void *src, uint64_t src_size, + void **buffer, uint64_t *buffer_size, + const void *prefix, uint64_t prefix_len, + uint8_t extra); + +int compress_stream_xz(int fdf, int fdt, off_t max_bytes); +int compress_stream_lz4(int fdf, int fdt, off_t max_bytes); + +int decompress_stream_xz(int fdf, int fdt, off_t max_size); +int decompress_stream_lz4(int fdf, int fdt, off_t max_size); + +#ifdef HAVE_LZ4 +# define compress_stream compress_stream_lz4 +# define COMPRESSED_EXT ".lz4" +#else +# define compress_stream compress_stream_xz +# define COMPRESSED_EXT ".xz" +#endif + +int decompress_stream(const char *filename, int fdf, int fdt, off_t max_bytes); |