From: Luca Boccassi Date: Tue, 19 Apr 2022 14:23:53 +0000 (+0200) Subject: compression: add separate pre-processor definitions X-Git-Tag: v251-rc2~99 X-Git-Url: http://git-history.diyao.me/?a=commitdiff_plain;h=da13d2ca0731b413841663052f2cc6832a855334;p=systemd%2F.git compression: add separate pre-processor definitions Follow-up for https://github.com/systemd/systemd/commit/cd3c6322dbc6370448bafc216ee4e19e32a79d9e journal-def.h should be self-contained too, as it represents the journal object ABI. Duplicate the enums, as they also need to be in config.h for it to be self-contained, and enums are not available to the preprocessor. Use an assert to ensure they don't diverge. --- diff --git a/meson.build b/meson.build index 723bc8dac1..8c79c78e4e 100644 --- a/meson.build +++ b/meson.build @@ -1470,11 +1470,14 @@ elif compression == 'lz4' and not have_lz4 elif compression == 'xz' and not have_xz error('default-compression=xz requires xz') endif -conf.set('OBJECT_COMPRESSED_NONE', 0) -conf.set('OBJECT_COMPRESSED_XZ', 1) -conf.set('OBJECT_COMPRESSED_LZ4', 2) -conf.set('OBJECT_COMPRESSED_ZSTD', 4) -conf.set('DEFAULT_COMPRESSION', 'OBJECT_COMPRESSED_@0@'.format(compression.to_upper())) +# These values are defined here so that config.h is self-contained, but they are also +# re-defined (with different names to avoid conflits) in src/libsystemd/sd-journal/journal-def.h +# as that source file represents the journal object ABI, and we want that to be self-contained too. +conf.set('COMPRESSION_NONE', 0) +conf.set('COMPRESSION_XZ', 1) +conf.set('COMPRESSION_LZ4', 2) +conf.set('COMPRESSION_ZSTD', 4) +conf.set('DEFAULT_COMPRESSION', 'COMPRESSION_@0@'.format(compression.to_upper())) want_xkbcommon = get_option('xkbcommon') if want_xkbcommon != 'false' and not skip_deps diff --git a/src/libsystemd/sd-journal/compress.h b/src/libsystemd/sd-journal/compress.h index 40ab43c4cb..4f2701d1fa 100644 --- a/src/libsystemd/sd-journal/compress.h +++ b/src/libsystemd/sd-journal/compress.h @@ -18,18 +18,18 @@ int compress_blob_zstd(const void *src, uint64_t src_size, static inline int compress_blob(const void *src, uint64_t src_size, void *dst, size_t dst_alloc_size, size_t *dst_size) { int r; -#if DEFAULT_COMPRESSION == OBJECT_COMPRESSED_ZSTD +#if DEFAULT_COMPRESSION == COMPRESSION_ZSTD r = compress_blob_zstd(src, src_size, dst, dst_alloc_size, dst_size); if (r == 0) - return OBJECT_COMPRESSED_ZSTD; -#elif DEFAULT_COMPRESSION == OBJECT_COMPRESSED_LZ4 + return COMPRESSION_ZSTD; +#elif DEFAULT_COMPRESSION == COMPRESSION_LZ4 r = compress_blob_lz4(src, src_size, dst, dst_alloc_size, dst_size); if (r == 0) - return OBJECT_COMPRESSED_LZ4; -#elif DEFAULT_COMPRESSION == OBJECT_COMPRESSED_XZ + return COMPRESSION_LZ4; +#elif DEFAULT_COMPRESSION == COMPRESSION_XZ r = compress_blob_xz(src, src_size, dst, dst_alloc_size, dst_size); if (r == 0) - return OBJECT_COMPRESSED_XZ; + return COMPRESSION_XZ; #else r = -EOPNOTSUPP; #endif @@ -72,13 +72,13 @@ int decompress_stream_xz(int fdf, int fdt, uint64_t max_size); int decompress_stream_lz4(int fdf, int fdt, uint64_t max_size); int decompress_stream_zstd(int fdf, int fdt, uint64_t max_size); -#if DEFAULT_COMPRESSION == OBJECT_COMPRESSED_ZSTD +#if DEFAULT_COMPRESSION == COMPRESSION_ZSTD # define compress_stream compress_stream_zstd # define COMPRESSED_EXT ".zst" -#elif DEFAULT_COMPRESSION == OBJECT_COMPRESSED_LZ4 +#elif DEFAULT_COMPRESSION == COMPRESSION_LZ4 # define compress_stream compress_stream_lz4 # define COMPRESSED_EXT ".lz4" -#elif DEFAULT_COMPRESSION == OBJECT_COMPRESSED_XZ +#elif DEFAULT_COMPRESSION == COMPRESSION_XZ # define compress_stream compress_stream_xz # define COMPRESSED_EXT ".xz" #else diff --git a/src/libsystemd/sd-journal/journal-def.h b/src/libsystemd/sd-journal/journal-def.h index 3259b0a515..829fc65cff 100644 --- a/src/libsystemd/sd-journal/journal-def.h +++ b/src/libsystemd/sd-journal/journal-def.h @@ -43,12 +43,21 @@ typedef enum ObjectType { } ObjectType; /* Object flags - * The per-compression enums are defined in meson.build so that config.h is self-contained */ + * The per-compression enums are also redefined in meson.build so that config.h is self-contained */ enum { + OBJECT_COMPRESSED_XZ = 1 << 0, + OBJECT_COMPRESSED_LZ4 = 1 << 1, + OBJECT_COMPRESSED_ZSTD = 1 << 2, OBJECT_COMPRESSION_MASK = (OBJECT_COMPRESSED_XZ | OBJECT_COMPRESSED_LZ4 | OBJECT_COMPRESSED_ZSTD), _OBJECT_COMPRESSED_MAX = OBJECT_COMPRESSION_MASK, }; +#ifdef COMPRESSION_XZ +assert_cc(OBJECT_COMPRESSED_XZ == COMPRESSION_XZ); +assert_cc(OBJECT_COMPRESSED_LZ4 == COMPRESSION_LZ4); +assert_cc(OBJECT_COMPRESSED_ZSTD == COMPRESSION_ZSTD); +#endif + struct ObjectHeader { uint8_t type; uint8_t flags; diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index a6b2a0f326..6ee5697bc9 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -3359,11 +3359,11 @@ int journal_file_open( .open_flags = open_flags, .writable = (open_flags & O_ACCMODE) != O_RDONLY, -#if DEFAULT_COMPRESSION == OBJECT_COMPRESSED_ZSTD +#if DEFAULT_COMPRESSION == COMPRESSION_ZSTD .compress_zstd = FLAGS_SET(file_flags, JOURNAL_COMPRESS), -#elif DEFAULT_COMPRESSION == OBJECT_COMPRESSED_LZ4 +#elif DEFAULT_COMPRESSION == COMPRESSION_LZ4 .compress_lz4 = FLAGS_SET(file_flags, JOURNAL_COMPRESS), -#elif DEFAULT_COMPRESSION == OBJECT_COMPRESSED_XZ +#elif DEFAULT_COMPRESSION == COMPRESSION_XZ .compress_xz = FLAGS_SET(file_flags, JOURNAL_COMPRESS), #endif .compress_threshold_bytes = compress_threshold_bytes == UINT64_MAX ?