From 50385e06ec207af0171c021f1909e9ef38c00519 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sun, 18 Aug 2019 16:09:31 +0200 Subject: Replace update_crc32 helper function with crc32 from zlib It is optimized to the maximum and if we already use zlib anyway, why not use zlib crc32? This also makes zlib a hard dependency which also means the whole "do we have a compressor" sanity check in the build system can be removed. Signed-off-by: David Oberhollenzer --- lib/Makemodule.am | 7 ++++++- lib/comp/process_block.c | 3 ++- lib/sqfs/data_writer.c | 3 ++- lib/util/crc32.c | 36 ------------------------------------ 4 files changed, 10 insertions(+), 39 deletions(-) delete mode 100644 lib/util/crc32.c (limited to 'lib') diff --git a/lib/Makemodule.am b/lib/Makemodule.am index 3c206d6..6301435 100644 --- a/lib/Makemodule.am +++ b/lib/Makemodule.am @@ -47,8 +47,10 @@ libutil_a_SOURCES += lib/util/read_data.c include/util.h libutil_a_SOURCES += lib/util/print_version.c lib/util/mkdir_p.c libutil_a_SOURCES += lib/util/str_table.c include/str_table.h libutil_a_SOURCES += lib/util/dirstack.c lib/util/padd_file.c -libutil_a_SOURCES += lib/util/read_data_at.c lib/util/crc32.c +libutil_a_SOURCES += lib/util/read_data_at.c libutil_a_SOURCES += lib/util/source_date_epoch.c +libutil_a_CFLAGS = $(AM_CFLAGS) +libutil_a_CPPFLAGS = $(AM_CPPFLAGS) if HAVE_PTHREAD libcompress_a_SOURCES += lib/comp/block_processor_parallel.c @@ -62,6 +64,9 @@ libcompress_a_SOURCES += lib/comp/gzip.c libcompress_a_CFLAGS += $(ZLIB_CFLAGS) libcompress_a_CPPFLAGS += -DWITH_GZIP + +libutil_a_CFLAGS += $(ZLIB_CFLAGS) +libutil_a_CPPFLAGS += -DWITH_GZIP endif if WITH_XZ diff --git a/lib/comp/process_block.c b/lib/comp/process_block.c index 76cd07d..0fcbae0 100644 --- a/lib/comp/process_block.c +++ b/lib/comp/process_block.c @@ -10,6 +10,7 @@ #include "util.h" #include +#include int process_block(block_t *block, compressor_t *cmp, uint8_t *scratch, size_t scratch_size) @@ -17,7 +18,7 @@ int process_block(block_t *block, compressor_t *cmp, ssize_t ret; if (!(block->flags & BLK_DONT_CHECKSUM)) - block->checksum = update_crc32(0, block->data, block->size); + block->checksum = crc32(0, block->data, block->size); if (!(block->flags & BLK_DONT_COMPRESS)) { ret = cmp->do_block(cmp, block->data, block->size, diff --git a/lib/sqfs/data_writer.c b/lib/sqfs/data_writer.c index 55c92ad..c584f1e 100644 --- a/lib/sqfs/data_writer.c +++ b/lib/sqfs/data_writer.c @@ -16,6 +16,7 @@ #include #include #include +#include struct data_writer_t { block_t *frag_block; @@ -229,7 +230,7 @@ static int handle_fragment(data_writer_t *data, block_t *blk) { file_info_t *fi = blk->user, *ref; - fi->fragment_chksum = update_crc32(0, blk->data, blk->size); + fi->fragment_chksum = crc32(0, blk->data, blk->size); ref = fragment_by_chksum(fi, fi->fragment_chksum, blk->size, data->list, data->super->block_size); diff --git a/lib/util/crc32.c b/lib/util/crc32.c deleted file mode 100644 index 27c5b85..0000000 --- a/lib/util/crc32.c +++ /dev/null @@ -1,36 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * crc32.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "config.h" -#include "util.h" - -/* - Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C - implementation that balances processor cache usage against speed" - */ -static const uint32_t s_crc32[16] = { - 0x00000000, 0x1DB71064, 0x3B6E20C8, 0x26D930AC, - 0x76DC4190, 0x6B6B51F4, 0x4DB26158, 0x5005713C, - 0xEDB88320, 0xF00F9344, 0xD6D6A3E8, 0xCB61B38C, - 0x9B64C2B0, 0x86D3D2D4, 0xA00AE278, 0xBDBDF21C -}; - -uint32_t update_crc32(uint32_t crc, const void *data, size_t size) -{ - const uint8_t *ptr = data; - uint8_t b; - - crc = ~crc; - - while (size--) { - b = *ptr++; - - crc = (crc >> 4) ^ s_crc32[(crc & 0x0F) ^ (b & 0x0F)]; - crc = (crc >> 4) ^ s_crc32[(crc & 0x0F) ^ (b >> 4)]; - } - - return ~crc; -} -- cgit v1.2.3