ref: 5d86bd8fa3a3adb3438e1a76534a54f0017f9b5b
parent: 6f4cde93ab8c7f0e573e498b44521f3aba384d9d
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Thu Feb 15 10:52:24 EST 2024
ext4srv: fix a missed size decrement; fix 32-bit int crc32 on big endian
--- a/sys/src/cmd/ext4srv/ext4_crc32.c
+++ b/sys/src/cmd/ext4srv/ext4_crc32.c
@@ -136,8 +136,10 @@
u32int ext4_crc32c(u32int crc, const void *buf, u32int size)
{
const u8int *p = (const u8int *)buf;
- while(size > 0 && ((uintptr)p & 3) != 0)
+ while(size > 0 && ((uintptr)p & 3) != 0){
+ size--;
crc = crc32c_tab[0][(crc ^ *p++) & 0xFF] ^ (crc >> 8);
+ }
const u32int *p32 = (const u32int *)p;
while(size >= 4){
--- a/sys/src/cmd/ext4srv/include/ext4_crc32.h
+++ b/sys/src/cmd/ext4srv/include/ext4_crc32.h
@@ -19,6 +19,7 @@
* @return updated crc32c value*/
u32int ext4_crc32c(u32int crc, const void *buf, u32int size);
+#ifndef CONFIG_BIG_ENDIAN
#define ext4_crc32_u(crc, x) ( \
(crc) = (crc) ^ (x), \
crc32c_tab[0][(crc)>>24] ^ \
@@ -26,5 +27,14 @@
crc32c_tab[2][((crc)>>8) & 0xff] ^ \
crc32c_tab[3][(crc) & 0xff] \
)
+#else
+#define ext4_crc32_u(crc, x) ( \
+ (crc) = (crc) ^ (x), \
+ crc32c_tab[0][(crc) & 0xff] ^ \
+ crc32c_tab[1][((crc)>>8) & 0xff] ^ \
+ crc32c_tab[2][((crc)>>16) & 0xff] ^ \
+ crc32c_tab[3][(crc)>>24] \
+)
+#endif
void ext4_crc32_init(void);
--
⑨