X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal%2Fcompress.h;h=136dda6d390c3411701e92d5bd8aecc450e86134;hb=ab31f6b8713d43354c3716ee4c37fe4460db9254;hp=f25fe86abd56423c175bdd7832e9ac2583fd03c1;hpb=347272731e15d3c4a70fad7ccd7185e8e8059d01;p=elogind.git diff --git a/src/journal/compress.h b/src/journal/compress.h index f25fe86ab..136dda6d3 100644 --- a/src/journal/compress.h +++ b/src/journal/compress.h @@ -25,15 +25,62 @@ #include #include -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, size_t *dst_size); +int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, size_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, size_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, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max); +int decompress_blob_lz4(const void *src, uint64_t src_size, + void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max); +int decompress_blob(int compression, + const void *src, uint64_t src_size, + void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max); + +int decompress_startswith_xz(const void *src, uint64_t src_size, + void **buffer, size_t *buffer_size, + const void *prefix, size_t prefix_len, + uint8_t extra); +int decompress_startswith_lz4(const void *src, uint64_t src_size, + void **buffer, size_t *buffer_size, + const void *prefix, size_t prefix_len, + uint8_t extra); +int decompress_startswith(int compression, + const void *src, uint64_t src_size, + void **buffer, size_t *buffer_size, + const void *prefix, size_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);