]> git.rm.cloudns.org Git - xonotic/gmqcc.git/commitdiff
Add the actual crc implementation
authorWolfgang (Blub) Bumiller <blub@speed.at>
Tue, 2 Oct 2012 15:56:59 +0000 (17:56 +0200)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Tue, 2 Oct 2012 15:56:59 +0000 (17:56 +0200)
util.c

diff --git a/util.c b/util.c
index 8642f8bf890dab5c1f58a35ec5b0d5b112e33ca8..bdc3f0f99d94f3848892af42102f3de92222f374 100644 (file)
--- a/util.c
+++ b/util.c
@@ -338,11 +338,11 @@ static const uint16_t util_crc16_table[] = {
  * Quake expects a non-reflective CRC.
  */
 #define CRC(X) \
-uint##X##_t util_crc##X(const char *k, int len, const short clamp) {  \
-    register uint##X##_t h= (uint##X##_t)0xFFFFFFFF;                  \
+uint##X##_t util_crc##X(uint##X##_t current, const char *k, size_t len) {  \
+    register uint##X##_t h= current;                                  \
     for (; len; --len, ++k)                                           \
-        h = util_crc##X##_table[(h^((unsigned char)*k))&0xFF]^(h>>8); \
-    return (~h)%clamp;                                                \
+        h = util_crc##X##_table[(h>>8)^((unsigned char)*k)]^(h<<8);   \
+    return h;                                                         \
 }
 CRC(32)
 CRC(16)