crc: allow checksum calculation in blocks.

This commit is contained in:
Pablo Curiel 2021-05-20 00:24:57 -04:00
parent 08e2b2d945
commit 033dae81bd

View File

@ -25,10 +25,10 @@ do { \
} while (0) } while (0)
/// Calculate a CRC32 over data. /// Calculate a CRC32 over data.
static inline u32 crc32Calculate(const void *src, size_t size) { static inline u32 crc32Calculate(u32 cur_crc, const void *src, size_t size) {
const u8 *src_u8 = (const u8 *)src; const u8 *src_u8 = (const u8 *)src;
u32 crc = 0xFFFFFFFF; u32 crc = ~cur_crc;
s64 len = size; s64 len = size;
_CRC_ALIGN(u8, b); _CRC_ALIGN(u8, b);
@ -44,14 +44,14 @@ static inline u32 crc32Calculate(const void *src, size_t size) {
_CRC_REMAINDER(u16, h); _CRC_REMAINDER(u16, h);
_CRC_REMAINDER(u8, b); _CRC_REMAINDER(u8, b);
return crc ^ 0xFFFFFFFF; return ~crc;
} }
/// Calculate a CRC32C over data. /// Calculate a CRC32C over data.
static inline u32 crc32cCalculate(const void *src, size_t size) { static inline u32 crc32cCalculate(u32 cur_crc, const void *src, size_t size) {
const u8 *src_u8 = (const u8 *)src; const u8 *src_u8 = (const u8 *)src;
u32 crc = 0xFFFFFFFF; u32 crc = ~cur_crc;
s64 len = size; s64 len = size;
_CRC_ALIGN(u8, cb); _CRC_ALIGN(u8, cb);
@ -67,7 +67,7 @@ static inline u32 crc32cCalculate(const void *src, size_t size) {
_CRC_REMAINDER(u16, ch); _CRC_REMAINDER(u16, ch);
_CRC_REMAINDER(u8, cb); _CRC_REMAINDER(u8, cb);
return crc ^ 0xFFFFFFFF; return ~crc;
} }
#undef _CRC_REMAINDER #undef _CRC_REMAINDER