From: Rafał Miłecki Date: Mon, 13 Nov 2017 22:07:45 +0000 (+0100) Subject: otrx: use helper function when checking image's CRC32 X-Git-Tag: v18.06.0-rc1~1760 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=c6761e7c8e5d0d33e2f266c297b403f337f93c6b;p=oweals%2Fopenwrt.git otrx: use helper function when checking image's CRC32 This requires changing this helper to accept initial/current CRC32 value as argument but it allows dropping duplicated (complex?) code calculating the CRC32. Signed-off-by: Rafał Miłecki --- diff --git a/package/utils/otrx/src/otrx.c b/package/utils/otrx/src/otrx.c index 101a31004d..7b02977abb 100644 --- a/package/utils/otrx/src/otrx.c +++ b/package/utils/otrx/src/otrx.c @@ -124,9 +124,7 @@ static const uint32_t crc32_tbl[] = { 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, }; -uint32_t otrx_crc32(uint8_t *buf, size_t len) { - uint32_t crc = 0xffffffff; - +uint32_t otrx_crc32(uint32_t crc, uint8_t *buf, size_t len) { while (len) { crc = crc32_tbl[(crc ^ *buf) & 0xff] ^ (crc >> 8); buf++; @@ -158,7 +156,6 @@ static int otrx_check(int argc, char **argv) { size_t bytes, length; uint8_t buf[1024]; uint32_t crc32; - int i; int err = 0; if (argc < 3) { @@ -203,8 +200,7 @@ static int otrx_check(int argc, char **argv) { fseek(trx, trx_offset + TRX_FLAGS_OFFSET, SEEK_SET); length -= TRX_FLAGS_OFFSET; while ((bytes = fread(buf, 1, otrx_min(sizeof(buf), length), trx)) > 0) { - for (i = 0; i < bytes; i++) - crc32 = crc32_tbl[(crc32 ^ buf[i]) & 0xff] ^ (crc32 >> 8); + crc32 = otrx_crc32(crc32, buf, bytes); length -= bytes; } @@ -316,7 +312,7 @@ static int otrx_create_write_hdr(FILE *trx, struct trx_header *hdr) { return -ENOMEM; } - crc32 = otrx_crc32(buf + TRX_FLAGS_OFFSET, length - TRX_FLAGS_OFFSET); + crc32 = otrx_crc32(0xffffffff, buf + TRX_FLAGS_OFFSET, length - TRX_FLAGS_OFFSET); hdr->crc32 = cpu_to_le32(crc32); fseek(trx, 0, SEEK_SET);