summaryrefslogtreecommitdiff
path: root/src/basic
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-04-04 14:34:32 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2023-04-04 18:32:12 +0900
commit83f3d73da8d132773dd91aae0fa7babb74920774 (patch)
tree6d00fe2542d3cb6262748b0fb3080199e4af332b /src/basic
parent9dfbae203e3afa500163bc46e0070c4cb2180aac (diff)
downloadsystemd-83f3d73da8d132773dd91aae0fa7babb74920774.tar.gz
compress: introduce compression_supported() helper function
Diffstat (limited to 'src/basic')
-rw-r--r--src/basic/compress.c10
-rw-r--r--src/basic/compress.h3
2 files changed, 13 insertions, 0 deletions
diff --git a/src/basic/compress.c b/src/basic/compress.c
index 0a330ecb55..59621dc05b 100644
--- a/src/basic/compress.c
+++ b/src/basic/compress.c
@@ -65,6 +65,16 @@ static const char* const compression_table[_COMPRESSION_MAX] = {
DEFINE_STRING_TABLE_LOOKUP(compression, Compression);
+bool compression_supported(Compression c) {
+ static const unsigned supported =
+ (1U << COMPRESSION_NONE) |
+ (1U << COMPRESSION_XZ) * HAVE_XZ |
+ (1U << COMPRESSION_LZ4) * HAVE_LZ4 |
+ (1U << COMPRESSION_ZSTD) * HAVE_ZSTD;
+
+ return c >= 0 && c < _COMPRESSION_MAX && FLAGS_SET(supported, 1U << c);
+}
+
int compress_blob_xz(const void *src, uint64_t src_size,
void *dst, size_t dst_alloc_size, size_t *dst_size) {
#if HAVE_XZ
diff --git a/src/basic/compress.h b/src/basic/compress.h
index 583b105c66..2201bca74c 100644
--- a/src/basic/compress.h
+++ b/src/basic/compress.h
@@ -2,6 +2,7 @@
#pragma once
#include <errno.h>
+#include <stdbool.h>
#include <stdint.h>
#include <unistd.h>
@@ -17,6 +18,8 @@ typedef enum Compression {
const char* compression_to_string(Compression compression);
Compression compression_from_string(const char *compression);
+bool compression_supported(Compression c);
+
int compress_blob_xz(const void *src, uint64_t src_size,
void *dst, size_t dst_alloc_size, size_t *dst_size);
int compress_blob_lz4(const void *src, uint64_t src_size,