diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-09-28 18:43:30 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-09-28 18:43:30 +0200 |
commit | d267d86f6e24c4f947c30c1a3642d57b82f8addd (patch) | |
tree | a0c0cc7ced7f8d38ea5c12108ded83c762fba2f9 /depends/xz-embedded/src/xz_crc64.c | |
parent | d903b0f0ea4bbeb6a20771575295ea28795dc5d7 (diff) | |
download | MultiMC-d267d86f6e24c4f947c30c1a3642d57b82f8addd.tar MultiMC-d267d86f6e24c4f947c30c1a3642d57b82f8addd.tar.gz MultiMC-d267d86f6e24c4f947c30c1a3642d57b82f8addd.tar.lz MultiMC-d267d86f6e24c4f947c30c1a3642d57b82f8addd.tar.xz MultiMC-d267d86f6e24c4f947c30c1a3642d57b82f8addd.zip |
Replace lzma with xz. Tweaks to fix debug builds.
Diffstat (limited to 'depends/xz-embedded/src/xz_crc64.c')
-rw-r--r-- | depends/xz-embedded/src/xz_crc64.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/depends/xz-embedded/src/xz_crc64.c b/depends/xz-embedded/src/xz_crc64.c new file mode 100644 index 00000000..ca1caee8 --- /dev/null +++ b/depends/xz-embedded/src/xz_crc64.c @@ -0,0 +1,50 @@ +/* + * CRC64 using the polynomial from ECMA-182 + * + * This file is similar to xz_crc32.c. See the comments there. + * + * 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. + */ + +#include "xz_private.h" + +#ifndef STATIC_RW_DATA +# define STATIC_RW_DATA static +#endif + +STATIC_RW_DATA uint64_t xz_crc64_table[256]; + +XZ_EXTERN void xz_crc64_init(void) +{ + const uint64_t poly = 0xC96C5795D7870F42; + + uint32_t i; + uint32_t j; + uint64_t r; + + for (i = 0; i < 256; ++i) { + r = i; + for (j = 0; j < 8; ++j) + r = (r >> 1) ^ (poly & ~((r & 1) - 1)); + + xz_crc64_table[i] = r; + } + + return; +} + +XZ_EXTERN uint64_t xz_crc64(const uint8_t *buf, size_t size, uint64_t crc) +{ + crc = ~crc; + + while (size != 0) { + crc = xz_crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); + --size; + } + + return ~crc; +} |