This repository has been archived on 2023-07-17. You can view files and clone it, but cannot push or open issues or pull requests.
bl_mcu_sdk/components/xz/xz_crc32.c
2022-10-29 16:12:13 +08:00

67 lines
1.4 KiB
C

/*
* 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];
extern const uint32_t crc32Tab[256];
XZ_EXTERN void xz_crc32_init(void)
{
#if 0
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;
}
#endif
return;
}
XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
{
crc = ~crc;
while (size != 0) {
crc = crc32Tab[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
--size;
}
return ~crc;
}