Line data Source code
1 : /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2 :
3 : #pragma once
4 :
5 : /***
6 : This file is part of systemd.
7 :
8 : Copyright 2011 Lennart Poettering
9 :
10 : systemd is free software; you can redistribute it and/or modify it
11 : under the terms of the GNU Lesser General Public License as published by
12 : the Free Software Foundation; either version 2.1 of the License, or
13 : (at your option) any later version.
14 :
15 : systemd is distributed in the hope that it will be useful, but
16 : WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 : Lesser General Public License for more details.
19 :
20 : You should have received a copy of the GNU Lesser General Public License
21 : along with systemd; If not, see <http://www.gnu.org/licenses/>.
22 : ***/
23 :
24 : #include <unistd.h>
25 :
26 : #include "journal-def.h"
27 :
28 : const char* object_compressed_to_string(int compression);
29 : int object_compressed_from_string(const char *compression);
30 :
31 : int compress_blob_xz(const void *src, uint64_t src_size, void *dst, size_t *dst_size);
32 : int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, size_t *dst_size);
33 :
34 0 : static inline int compress_blob(const void *src, uint64_t src_size, void *dst, size_t *dst_size) {
35 : int r;
36 : #ifdef HAVE_LZ4
37 : r = compress_blob_lz4(src, src_size, dst, dst_size);
38 : if (r == 0)
39 : return OBJECT_COMPRESSED_LZ4;
40 : #else
41 0 : r = compress_blob_xz(src, src_size, dst, dst_size);
42 0 : if (r == 0)
43 0 : return OBJECT_COMPRESSED_XZ;
44 : #endif
45 0 : return r;
46 : }
47 :
48 : int decompress_blob_xz(const void *src, uint64_t src_size,
49 : void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
50 : int decompress_blob_lz4(const void *src, uint64_t src_size,
51 : void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
52 : int decompress_blob(int compression,
53 : const void *src, uint64_t src_size,
54 : void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
55 :
56 : int decompress_startswith_xz(const void *src, uint64_t src_size,
57 : void **buffer, size_t *buffer_size,
58 : const void *prefix, size_t prefix_len,
59 : uint8_t extra);
60 : int decompress_startswith_lz4(const void *src, uint64_t src_size,
61 : void **buffer, size_t *buffer_size,
62 : const void *prefix, size_t prefix_len,
63 : uint8_t extra);
64 : int decompress_startswith(int compression,
65 : const void *src, uint64_t src_size,
66 : void **buffer, size_t *buffer_size,
67 : const void *prefix, size_t prefix_len,
68 : uint8_t extra);
69 :
70 : int compress_stream_xz(int fdf, int fdt, off_t max_bytes);
71 : int compress_stream_lz4(int fdf, int fdt, off_t max_bytes);
72 :
73 : int decompress_stream_xz(int fdf, int fdt, off_t max_size);
74 : int decompress_stream_lz4(int fdf, int fdt, off_t max_size);
75 :
76 : #ifdef HAVE_LZ4
77 : # define compress_stream compress_stream_lz4
78 : # define COMPRESSED_EXT ".lz4"
79 : #else
80 : # define compress_stream compress_stream_xz
81 : # define COMPRESSED_EXT ".xz"
82 : #endif
83 :
84 : int decompress_stream(const char *filename, int fdf, int fdt, off_t max_bytes);
|