Add miniz to the daemon framework 82/284482/3
authorMichal Bloch <m.bloch@samsung.com>
Tue, 22 Nov 2022 11:54:43 +0000 (12:54 +0100)
committerMichal Bloch <m.bloch@partner.samsung.com>
Wed, 23 Nov 2022 13:10:46 +0000 (13:10 +0000)
Change-Id: If4b899546504659e320719ecb28286453b658e81

Makefile.am
src/logger/compression_common.h
src/logger/compression_miniz.c [new file with mode: 0644]
src/logger/log_compressed_storage.c
src/tests/test_logger_compressed_storage.c

index 9565bcd..8c3abb1 100644 (file)
@@ -132,9 +132,11 @@ dlog_logger_LDFLAGS = \
 dlog_logger_SOURCES = \
        external/sd-daemon/sd-daemon.c \
        external/fastlz/fastlz.c \
+       external/miniz/miniz.c \
        src/logger/logger.c \
        src/logger/logger_privileges.c \
        src/logger/compression_fastlz.c \
+       src/logger/compression_miniz.c \
        src/logger/dlogutil_line.c \
        src/logger/fd_entity.c \
        src/logger/log_buffer.c \
@@ -527,9 +529,11 @@ src_tests_test_logger_log_storage_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=malloc
 
 src_tests_test_logger_compressed_storage_SOURCES = src/tests/test_logger_compressed_storage.c \
        src/logger/compression_fastlz.c \
+       src/logger/compression_miniz.c \
        src/logger/log_compressed_storage.c \
        src/shared/ptrs_list.c \
        src/shared/queued_entry_timestamp.c \
+       external/miniz/miniz.c \
        external/fastlz/fastlz.c
 src_tests_test_logger_compressed_storage_CFLAGS = $(check_CFLAGS)
 src_tests_test_logger_compressed_storage_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=malloc
index 464cbac..40efa67 100644 (file)
@@ -14,5 +14,6 @@ struct compression_algo {
        size_t (*get_workspace_size)(size_t input_size);
 };
 
+extern struct compression_algo miniz;
 extern struct compression_algo fastlz;
 
diff --git a/src/logger/compression_miniz.c b/src/logger/compression_miniz.c
new file mode 100644 (file)
index 0000000..a965e1a
--- /dev/null
@@ -0,0 +1,34 @@
+#include "log_compressed_storage.h"
+#include "miniz.h"
+
+static int miniz_compression(const char *in, size_t size_in, char *compressed, size_t compressed_capacity)
+{
+       mz_ulong size_out = compressed_capacity;
+       int r = mz_compress((unsigned char *)compressed, &size_out, (const unsigned char *)in, size_in);
+       return r == MZ_OK ? size_out : 0;
+}
+
+static int miniz_decompression(const char *compressed, size_t size_compressed, char *decompressed, size_t size_decompressed)
+{
+       mz_ulong size_decompressed_out = size_decompressed;
+       int r = mz_uncompress((unsigned char *)decompressed, &size_decompressed_out, (const unsigned char *)compressed, size_compressed);
+       return r == MZ_OK ? (size_t) size_decompressed_out : 0;
+}
+
+static bool miniz_is_legal_to_compress(char *data, size_t size)
+{
+       return true;
+}
+
+static size_t miniz_get_workspace_size(size_t input_size)
+{
+       return compressBound(input_size);
+}
+
+struct compression_algo miniz = {
+       .comp = miniz_compression,
+       .decomp = miniz_decompression,
+       .is_legal = miniz_is_legal_to_compress,
+       .get_workspace_size = miniz_get_workspace_size,
+};
+
index f5f5510..2050c3a 100644 (file)
@@ -15,6 +15,7 @@
  */
 #include "log_compressed_storage.h"
 #include "fastlz.h"
+#include "miniz.h"
 
 #include <ptrs_list.h>
 #include <stdlib.h>
@@ -89,6 +90,8 @@ static struct compression_algo *get_algo_by_name(const char *algo_name)
 
        if (!strcmp(algo_name, "fastlz"))
                return &fastlz;
+       if (!strcmp(algo_name, "miniz"))
+               return &miniz;
        return NULL;
 }
 
index 8e4fb2c..514261e 100644 (file)
@@ -15,6 +15,7 @@
  */
 #include "../src/logger/log_compressed_storage.h"
 #include "fastlz.h"
+#include "miniz.h"
 #include "logcommon.h"
 
 #include <stdio.h>
@@ -254,7 +255,7 @@ void test_clear()
 void test_dumping_oneshot()
 {
        static const size_t CNT = 100;
-       log_compressed_storage *s1 = MAKE_STORAGE(5000);
+       log_compressed_storage *s1 = MAKE_STORAGE(7000); // just enough to fit (for easy flushing afterwards)
        assert(s1);
        log_compressed_storage_reader *r1 = log_compressed_storage_new_reader(s1, true, false, dont_call_this_callback, NULL);
        assert(r1);
@@ -462,6 +463,14 @@ static size_t get_good_size_fastlz() {
        return fastlz_compress(good_compressible_input, sizeof good_compressible_input, buffer);
 }
 
+static size_t get_good_size_miniz() {
+       mz_ulong out_size = compressBound(sizeof good_compressible_input);
+       unsigned char *const buffer = malloc(out_size);
+
+       mz_compress(buffer, &out_size, (const unsigned char *) good_compressible_input, sizeof good_compressible_input);
+       return out_size;
+}
+
 int main(void)
 {
        srand(0);
@@ -473,6 +482,7 @@ int main(void)
                size_t size;
        } algos[] =
                { { .algo = "fastlz", .size = get_good_size_fastlz(), }
+               , { .algo = "miniz" , .size = get_good_size_miniz(), }
        };
 
        for (size_t i = 0; i < NELEMS(algos); ++i) {