(library (crc32) (export crc32) (import (chezscheme)) (load-shared-object "libz.so") (define crc32 (foreign-procedure "crc32" (unsigned-long u8* unsigned-int) unsigned-long)) (define crc32-combine (foreign-procedure "crc32_combine" (unsigned-long unsigned-long unsigned-long) unsigned-long)) ;; FIXME: stop copying the bytevector. I'm not sure how to pass an offset ;; into the bv. (define (crc32-region salt bv start end) (assert (< start end)) (let ((len (- end start))) (let ((copy (make-bytevector len))) (bytevector-copy! bv start copy 0 len) (let ((crc (crc32 salt copy 0))) (crc32 crc copy len))))))