diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-09-30 03:29:12 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-09-30 03:29:12 +0200 |
commit | c05a39147a462d610dabaf89dae59c004e7dd539 (patch) | |
tree | 10cff4a66c8d9999df7e02648b72b1c7a289ada5 /depends/xz-embedded/src/xz_crc32.c | |
parent | 2173abb9a87c67b53e64c9bdebbba5fa6b4d4b7d (diff) | |
parent | e45b444242104e557f1bce14e9c11e3792bbe41f (diff) | |
download | MultiMC-c05a39147a462d610dabaf89dae59c004e7dd539.tar MultiMC-c05a39147a462d610dabaf89dae59c004e7dd539.tar.gz MultiMC-c05a39147a462d610dabaf89dae59c004e7dd539.tar.lz MultiMC-c05a39147a462d610dabaf89dae59c004e7dd539.tar.xz MultiMC-c05a39147a462d610dabaf89dae59c004e7dd539.zip |
Implemented xz and pack200 unpackers required for proper forge installation.
Merge branch 'feature_forge_unpackers' into develop
Conflicts:
CMakeLists.txt
Diffstat (limited to 'depends/xz-embedded/src/xz_crc32.c')
-rw-r--r-- | depends/xz-embedded/src/xz_crc32.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/depends/xz-embedded/src/xz_crc32.c b/depends/xz-embedded/src/xz_crc32.c new file mode 100644 index 00000000..34532d14 --- /dev/null +++ b/depends/xz-embedded/src/xz_crc32.c @@ -0,0 +1,59 @@ +/* + * CRC32 using the polynomial from IEEE-802.3 + * + * Authors: Lasse Collin <lasse.collin@tukaani.org> + * Igor Pavlov <http://7-zip.org/> + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +/* + * This is not the fastest implementation, but it is pretty compact. + * The fastest versions of xz_crc32() on modern CPUs without hardware + * accelerated CRC instruction are 3-5 times as fast as this version, + * but they are bigger and use more memory for the lookup table. + */ + +#include "xz_private.h" + +/* + * STATIC_RW_DATA is used in the pre-boot environment on some architectures. + * See <linux/decompress/mm.h> for details. + */ +#ifndef STATIC_RW_DATA +# define STATIC_RW_DATA static +#endif + +STATIC_RW_DATA uint32_t xz_crc32_table[256]; + +XZ_EXTERN void xz_crc32_init(void) +{ + const uint32_t poly = 0xEDB88320; + + uint32_t i; + uint32_t j; + uint32_t r; + + for (i = 0; i < 256; ++i) { + r = i; + for (j = 0; j < 8; ++j) + r = (r >> 1) ^ (poly & ~((r & 1) - 1)); + + xz_crc32_table[i] = r; + } + + return; +} + +XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc) +{ + crc = ~crc; + + while (size != 0) { + crc = xz_crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); + --size; + } + + return ~crc; +} |