/* * BriefLZ - small fast Lempel-Ziv * * C crc32 * * Copyright (c) 1998-2004 by Joergen Ibsen / Jibz * All Rights Reserved * * http://www.ibsensoftware.com/ * * This software is provided 'as-is', without any express * or implied warranty. In no event will the authors be * held liable for any damages arising from the use of * this software. * * Permission is granted to anyone to use this software * for any purpose, including commercial applications, * and to alter it and redistribute it freely, subject to * the following restrictions: * * 1. The origin of this software must not be * misrepresented; you must not claim that you * wrote the original software. If you use this * software in a product, an acknowledgment in * the product documentation would be appreciated * but is not required. * * 2. Altered source versions must be plainly marked * as such, and must not be misrepresented as * being the original software. * * 3. This notice may not be removed or altered from * any source distribution. */ /* * CRC32 algorithm taken from the zlib source, which is * Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler */ #include "brieflz.h" static const unsigned int blz_crctab_n[16] = { 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; unsigned int BLZCC blz_crc32(const void *source, unsigned int length, unsigned int initial_crc32) { const unsigned char *buf = (const unsigned char *)source; unsigned int crc = initial_crc32 ^ 0xffffffffu; unsigned int i; if (length == 0) return 0; for (i = 0; i < length; ++i) { crc ^= buf[i]; crc = blz_crctab_n[crc & 0x0f] ^ (crc >> 4); crc = blz_crctab_n[crc & 0x0f] ^ (crc >> 4); } return crc ^ 0xffffffffu; }