X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Ftools.c;h=71cd40d756b6858f272bb5d123cc60a8c8d4d821;hb=c575e458c6257e75b97884847143b20965a5dfda;hp=cce88797ec697c70cc847f352178ed546304c8a3;hpb=47cf5beaf09ce7f94a099ae5907537a2c9bf2c11;p=NeonServV5.git diff --git a/src/tools.c b/src/tools.c index cce8879..71cd40d 100644 --- a/src/tools.c +++ b/src/tools.c @@ -1,4 +1,4 @@ -/* tools.c - NeonServ v5.0 +/* tools.c - NeonServ v5.2 * Copyright (C) 2011 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -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(); }