summaryrefslogtreecommitdiff
path: root/crc32.c
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2011-09-09 23:06:52 -0700
committerMark Adler <madler@alumni.caltech.edu>2011-09-09 23:06:52 -0700
commit64b2e892035cf6ea98800c54dce0d63730d50272 (patch)
treee3b569f87e413eaef4a13469acfd4224b2a63d3a /crc32.c
parent4ca984fb447ac57120c394cf2fbba23837ed31c2 (diff)
downloadzlib-64b2e892035cf6ea98800c54dce0d63730d50272.tar.gz
zlib 0.9v0.9
Diffstat (limited to 'crc32.c')
-rw-r--r--crc32.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/crc32.c b/crc32.c
index e8d385f..d9485c2 100644
--- a/crc32.c
+++ b/crc32.c
@@ -3,12 +3,17 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-/* $Id: crc32.c,v 1.4 1995/04/14 14:55:12 jloup Exp $ */
+/* $Id: crc32.c,v 1.5 1995/05/01 13:55:46 jloup Exp $ */
#include "zlib.h"
extern uLong crc_table[]; /* crc table, defined below */
+#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
+#define DO2(buf) DO1(buf); DO1(buf);
+#define DO4(buf) DO2(buf); DO2(buf);
+#define DO8(buf) DO4(buf); DO4(buf);
+
/* ========================================================================= */
uLong crc32(crc, buf, len)
uLong crc;
@@ -17,8 +22,13 @@ uLong crc32(crc, buf, len)
{
if (buf == Z_NULL) return 0L;
crc = crc ^ 0xffffffffL;
+ while (len >= 8)
+ {
+ DO8(buf);
+ len -= 8;
+ }
if (len) do {
- crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
+ DO1(buf);
} while (--len);
return crc ^ 0xffffffffL;
}
@@ -29,7 +39,7 @@ uLong crc32(crc, buf, len)
*/
#ifdef DYNAMIC_CRC_TABLE
-void make_crc_table()
+local void make_crc_table()
{
uLong c;
int n, k;