aboutsummaryrefslogtreecommitdiffstats
path: root/src/crc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/crc.c')
-rw-r--r--src/crc.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/crc.c b/src/crc.c
index de1a085..7aceb5c 100644
--- a/src/crc.c
+++ b/src/crc.c
@@ -55,23 +55,30 @@ static const uint32_t crc_table[256] = {
0x2d02ef8dL
};
-#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
+#define DO1(buf) crc = crc_table[(crc ^ (uint32_t) (*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);
-uint32_t crc32(uint32_t crc, const uint8_t *buf, int len)
+uint32_t
+crc32 (uint32_t crc, const void *_buf, int len)
{
- if (!buf) return 0;
+ uint8_t *buf = (uint8_t *) _buf;
+ if (!buf)
+ return 0;
- crc = crc ^ 0xffffffffL;
- while (len >= 8)
+
+ crc = crc ^ 0xffffffffL;
+ while (len >= 8)
{
- DO8(buf);
+ DO8 (buf);
len -= 8;
}
- if (len) do {
- DO1(buf);
- } while (--len);
- return crc ^ 0xffffffffL;
+ if (len)
+ do
+ {
+ DO1 (buf);
+ }
+ while (--len);
+ return crc ^ 0xffffffffL;
}