diff options
-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); } |