diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-30 12:25:54 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-30 12:25:54 +0200 |
| commit | 78a8b89a70c8e080acbe3cde22bb9eb615e2565c (patch) | |
| tree | cf8968972f80fdbea4726ab16d08457f91a833e2 /dev/kernel | |
| parent | e082ba19157a0d654c9e9f537c65bf6dcfc450a4 (diff) | |
kernel/crc32.cc: Fix poly div inside ke_calculate_crc32.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
| -rw-r--r-- | dev/kernel/src/Crc32.cc | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/dev/kernel/src/Crc32.cc b/dev/kernel/src/Crc32.cc index 0e635afb..df9cd642 100644 --- a/dev/kernel/src/Crc32.cc +++ b/dev/kernel/src/Crc32.cc @@ -12,7 +12,7 @@ namespace Kernel { /// @brief The CRC32 seed table. - UInt32 kCrcTbl[kCrcCnt] = { + UInt32 kChecksumPolys[kCrcCnt] = { 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, 0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, @@ -67,15 +67,18 @@ namespace Kernel 0xAD7D5351L}; /// @brief Calculate CRC32 of p - /// @param p the data to compute. + /// @param in the data to compute. /// @param len the length of the data. - /// @return CRC32 of **p**. - UInt32 ke_calculate_crc32(const Char* p, Int32 len) noexcept + /// @return CRC32 of **in**. + UInt32 ke_calculate_crc32(const Char* in, Int32 len) noexcept { + if (!in || *in == 0) + return ~0; + UInt32 crc = 0xffffffff; - while (--len > 0) - crc = kCrcTbl[((UInt8)crc ^ *(p++))] ^ (crc >> 8); + while ((len--) > 0) + crc = (crc >> 8) ^ kChecksumPolys[(crc ^ *(in++)) & 0xFF]; return ~crc; } |
