/* Return the CRC of the bytes buf[0..len-1]. */ static -uint32_t crc(uint8_t *buf, int len) +uint32_t crc(uint8_t *buf, int len, uint32_t crc) { - return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL; + crc = crc ^ 0xffffffffL; + return update_crc(crc, buf, len) ^ 0xffffffffL; } <# -(define (crc32 str #!optional (len (##sys#size str))) - ((foreign-lambda unsigned-integer32 "crc" nonnull-scheme-pointer int) str len) ) +(define (crc32 str #!optional (len (##sys#size str)) (crc 0)) + ((foreign-lambda unsigned-integer32 "crc" nonnull-scheme-pointer int unsigned-integer32) str len crc) ) ) ;module crc