]> git.rm.cloudns.org Git - xonotic/gmqcc.git/commitdiff
leaving the old crc in, commented out
authorWolfgang (Blub) Bumiller <blub@speed.at>
Tue, 2 Oct 2012 15:54:19 +0000 (17:54 +0200)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Tue, 2 Oct 2012 15:54:19 +0000 (17:54 +0200)
util.c

diff --git a/util.c b/util.c
index e1db03ff522b51b821502ea9084a5a32a470cb7c..8642f8bf890dab5c1f58a35ec5b0d5b112e33ca8 100644 (file)
--- a/util.c
+++ b/util.c
@@ -334,18 +334,29 @@ static const uint16_t util_crc16_table[] = {
 /*
  * Implements a CRC function for X worth bits using (uint[X]_t)
  * as type. and util_crc[X]_table.
- * Streamable QCC compatible CRC functions.
+
+ * Quake expects a non-reflective CRC.
  */
 #define CRC(X) \
-uint##X##_t util_crc##X(uint##X##_t current, const char *k, size_t len) {  \
-    register uint##X##_t h= current;                                  \
+uint##X##_t util_crc##X(const char *k, int len, const short clamp) {  \
+    register uint##X##_t h= (uint##X##_t)0xFFFFFFFF;                  \
     for (; len; --len, ++k)                                           \
-        h = util_crc##X##_table[(h>>8)^((unsigned char)*k)]^(h<<8);   \
-    return h;                                                         \
+        h = util_crc##X##_table[(h^((unsigned char)*k))&0xFF]^(h>>8); \
+    return (~h)%clamp;                                                \
 }
 CRC(32)
 CRC(16)
 #undef 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;                  \
+    for (; len; --len, ++k)                                           \
+        h = util_crc##X##_table[(h^((unsigned char)*k))&0xFF]^(h>>8); \
+    return (~h)%clamp;                                                \
+}
+*/
+
 
 /*
  * Implements libc getline for systems that don't have it, which is