From e200028869b5c17d95a00de77c9f57e0fbe97081 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 6 Aug 2016 00:14:09 +0300 Subject: [PATCH] tinf_adler32(): Allow to work in incremental manner. By letting passing in previously calculated partial checksum. --- src/adler32.c | 6 +++--- src/tinf.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/adler32.c b/src/adler32.c index f99b2d7..fc4cbed 100644 --- a/src/adler32.c +++ b/src/adler32.c @@ -41,12 +41,12 @@ #define A32_BASE 65521 #define A32_NMAX 5552 -unsigned int tinf_adler32(const void *data, unsigned int length) +unsigned int tinf_adler32(const void *data, unsigned int length, unsigned int prev_sum /* 1 */) { const unsigned char *buf = (const unsigned char *)data; - unsigned int s1 = 1; - unsigned int s2 = 0; + unsigned int s1 = prev_sum & 0xffff; + unsigned int s2 = prev_sum >> 16; while (length > 0) { diff --git a/src/tinf.h b/src/tinf.h index e00f171..2d103e0 100644 --- a/src/tinf.h +++ b/src/tinf.h @@ -106,7 +106,7 @@ int tinf_gzip_parse_trailer(TINF_GZIP_INFO *gz, const unsigned char **source, un int TINFCC tinf_zlib_uncompress(void *dest, unsigned int *destLen, const void *source, unsigned int sourceLen); -unsigned int TINFCC tinf_adler32(const void *data, unsigned int length); +unsigned int TINFCC tinf_adler32(const void *data, unsigned int length, unsigned int prev_sum /* 1 */); unsigned int TINFCC tinf_crc32(const void *data, unsigned int length);