crc improvement added by rivo on Sat Jan 26 17:03:51 2013

 /* 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