diff options
author | Niels de Vos <ndevos@redhat.com> | 2014-11-02 19:15:49 +0100 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-11-21 09:12:20 -0800 |
commit | 66c789765d783bba8fe651e6a26feb5483af71a5 (patch) | |
tree | 3a66738c2662384f0892c4746bd6f0bbcaa06de2 | |
parent | eb7a2f47bdee5048cfdaf2af149af5cfd7de4b10 (diff) |
Replace copied (from rsync) checksum code by adler32() from zlib
The weak checksum code that is included in libglusterfs has initialy
been copied from the rsync sources. Instead of maintaining a copy of a
function, we should use a function from a shared library. The algorithm
seems to be Adler-32, zlib provides an implementation.
The strong checksum function has already been replaced by MD5 from
OpenSSL. It is time to also remove the comments about the origin of the
implementation, because it is not correct anymore.
Change-Id: I70c16ae1d1c36b458a035e4adb3e51a20afcf652
BUG: 1149943
Reported-by: Wade Mealing <wmealing@redhat.com>
Signed-off-by: Niels de Vos <ndevos@redhat.com>
Reviewed-on: http://review.gluster.org/9035
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | libglusterfs/src/Makefile.am | 2 | ||||
-rw-r--r-- | libglusterfs/src/checksum.c | 39 |
3 files changed, 9 insertions, 35 deletions
diff --git a/configure.ac b/configure.ac index 024b4ef24a8..54364cda71f 100644 --- a/configure.ac +++ b/configure.ac @@ -364,7 +364,10 @@ AC_CHECK_HEADERS([sys/ioctl.h], AC_DEFINE(HAVE_IOCTL_IN_SYS_IOCTL_H, 1, [have sy AC_CHECK_HEADERS([sys/extattr.h]) +# libglusterfs/checksum AC_CHECK_HEADERS([openssl/md5.h]) +AC_CHECK_LIB([z], [adler32], [ZLIB_LIBS="-lz"], AC_MSG_ERROR([zlib is required to build glusterfs])) +AC_SUBST(ZLIB_LIBS) AC_CHECK_HEADERS([linux/falloc.h]) diff --git a/libglusterfs/src/Makefile.am b/libglusterfs/src/Makefile.am index bb57425e110..d117cc17605 100644 --- a/libglusterfs/src/Makefile.am +++ b/libglusterfs/src/Makefile.am @@ -7,7 +7,7 @@ libglusterfs_la_CPPFLAGS = $(GF_CPPFLAGS) -D__USE_FILE_OFFSET64 \ -I$(CONTRIBDIR)/libexecinfo ${ARGP_STANDALONE_CPPFLAGS} \ -DSBIN_DIR=\"$(sbindir)\" -libglusterfs_la_LIBADD = @LEXLIB@ +libglusterfs_la_LIBADD = @LEXLIB@ $(ZLIB_LIBS) libglusterfs_la_LDFLAGS = -version-info $(LIBGLUSTERFS_LT_VERSION) lib_LTLIBRARIES = libglusterfs.la diff --git a/libglusterfs/src/checksum.c b/libglusterfs/src/checksum.c index e14a3044c20..5fac1330094 100644 --- a/libglusterfs/src/checksum.c +++ b/libglusterfs/src/checksum.c @@ -9,57 +9,28 @@ */ #include <openssl/md5.h> +#include <zlib.h> #include <stdint.h> -#include "glusterfs.h" - /* - * The "weak" checksum required for the rsync algorithm, - * adapted from the rsync source code. The following comment - * appears there: - * - * "a simple 32 bit checksum that can be upadted from either end - * (inspired by Mark Adler's Adler-32 checksum)" + * The "weak" checksum required for the rsync algorithm. * * Note: these functions are only called to compute checksums on * pathnames; they don't need to handle arbitrarily long strings of * data. Thus int32_t and uint32_t are sufficient */ - uint32_t gf_rsync_weak_checksum (unsigned char *buf, size_t len) { - int32_t i = 0; - uint32_t s1, s2; - - uint32_t csum; - - s1 = s2 = 0; - if (len >= 4) { - for (; i < (len-4); i+=4) { - s2 += 4*(s1 + buf[i]) + 3*buf[i+1] + 2*buf[i+2] + buf[i+3]; - s1 += buf[i+0] + buf[i+1] + buf[i+2] + buf[i+3]; - } - } - - for (; i < len; i++) { - s1 += buf[i]; - s2 += s1; - } - - csum = (s1 & 0xffff) + (s2 << 16); - - return csum; + return adler32 (0, buf, len); } /* - * The "strong" checksum required for the rsync algorithm, - * adapted from the rsync source code. + * The "strong" checksum required for the rsync algorithm. */ - void gf_rsync_strong_checksum (unsigned char *data, size_t len, unsigned char *md5) { - MD5(data, len, md5); + MD5 (data, len, md5); } |