X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Ftools.c;h=3e6a2fc2d8bb547f62f5a4420e24d2e3f7d2b1a0;hb=744387b352bc4d7d42fd6143d8583f3c64e56b9e;hp=e2637cc84737ab7d32f485158767fec240b87efd;hpb=30b61f872c5258918ebc71b9677623de40b630a2;p=NeonServV5.git diff --git a/src/tools.c b/src/tools.c index e2637cc..3e6a2fc 100644 --- a/src/tools.c +++ b/src/tools.c @@ -513,6 +513,32 @@ int isFakeHost(char *host) { return (strlen(p2+1) > 4); } +static unsigned long crc_table[256]; + +static void crc32_init() { + unsigned long crc; + int i, j; + for(i = 0; i < 256; i++) { + crc = i; + for(j = 8; j > 0; j--) { + if(crc & 1) + crc = (crc >> 1) ^ 0xEDB88320L; + else + crc >>= 1; + } + crc_table[i] = crc; + } +} + +unsigned long crc32(const char *text) { + register unsigned long crc = 0xFFFFFFFF; + unsigned int c, i = 0; + while((c = (unsigned int)text[i++]) != 0) + crc = ((crc >> 8) & 0x00FFFFFF) ^ crc_table[(crc^c) & 0xFF]; + return (crc^0xFFFFFFFF); +} + void init_tools() { register_default_language_table(msgtab); + crc32_init(); }