:: commit 84017490210947fd463ee6774076aa8f2dc38b7a

Kamila Szewczyk <kspalaiologos@gmail.com> — 2022-05-13 05:49

parents: 83c9337ae3

ansily-compliant integer (de)serialisation

diff --git a/.gitignore b/.gitignore
index add132e..12f364c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,3 +33,7 @@ autom4te.cache/
 !/build-aux/ax_check_compile_flag.m4
 !/build-aux/ax_pthread.m4
 !/build-aux/git-version-gen
+
+.version-prev
+
+configure~
diff --git a/include/common.h b/include/common.h
index c02af0d..c0f7479 100644
--- a/include/common.h
+++ b/include/common.h
@@ -35,7 +35,7 @@ typedef int8_t s8;
 typedef int16_t s16;
 typedef int32_t s32;
 
-static s32 read_neutral_s32(u8 * data) { return data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); }
+static s32 read_neutral_s32(u8 * data) { return ((u32) data[0]) | (((u32) data[1]) << 8) | (((u32) data[2]) << 16) | (((u32) data[3]) << 24); }
 
 static void write_neutral_s32(u8 * data, s32 value) {
     data[0] = value & 0xFF;
diff --git a/src/lzp.c b/src/lzp.c
index 8a7aa97..a310c0e 100644
--- a/src/lzp.c
+++ b/src/lzp.c
@@ -20,7 +20,7 @@ static s32 lzp_encode_block(const u8 * restrict in, const u8 * in_end, u8 * rest
 
     for (s32 i = 0; i < 4; ++i) *out++ = *in++;
 
-    ctx = in[-1] | (in[-2] << 8) | (in[-3] << 16) | (in[-4] << 24);
+    ctx = ((u32) in[-1]) | (((u32) in[-2]) << 8) | (((u32) in[-3]) << 16) | (((u32) in[-4]) << 24);
 
     while (in < in_end - m_len - 32 && out < out_eob) {
         u32 idx = (ctx >> 15 ^ ctx ^ ctx >> 3) & mask;
@@ -46,7 +46,7 @@ static s32 lzp_encode_block(const u8 * restrict in, const u8 * in_end, u8 * rest
                 len += in[len] == ref[len];
 
                 in += len;
-                ctx = in[-1] | (in[-2] << 8) | (in[-3] << 16) | (in[-4] << 24);
+                ctx = ((u32) in[-1]) | (((u32) in[-2]) << 8) | (((u32) in[-3]) << 16) | (((u32) in[-4]) << 24);
 
                 *out++ = MATCH;
 
@@ -69,7 +69,7 @@ static s32 lzp_encode_block(const u8 * restrict in, const u8 * in_end, u8 * rest
         }
     }
 
-    ctx = in[-1] | (in[-2] << 8) | (in[-3] << 16) | (in[-4] << 24);
+    ctx = ((u32) in[-1]) | (((u32) in[-2]) << 8) | (((u32) in[-3]) << 16) | (((u32) in[-4]) << 24);
 
     while (in < in_end && out < out_eob) {
         u32 idx = (ctx >> 15 ^ ctx ^ ctx >> 3) & mask;
@@ -95,7 +95,7 @@ static s32 lzp_decode_block(const u8 * restrict in, const u8 * in_end, s32 * res
 
     for (s32 i = 0; i < 4; ++i) *out++ = *in++;
 
-    u32 ctx = out[-1] | (out[-2] << 8) | (out[-3] << 16) | (out[-4] << 24);
+    u32 ctx = ((u32) out[-1]) | (((u32) out[-2]) << 8) | (((u32) out[-3]) << 16) | (((u32) out[-4]) << 24);
 
     while (in < in_end) {
         u32 idx = (ctx >> 15 ^ ctx ^ ctx >> 3) & mask;
@@ -115,7 +115,7 @@ static s32 lzp_decode_block(const u8 * restrict in, const u8 * in_end, s32 * res
 
                 while (out < out_end) *out++ = *ref++;
 
-                ctx = out[-1] | out[-2] << 8 | out[-3] << 16 | out[-4] << 24;
+                ctx = ((u32) out[-1]) | (((u32) out[-2]) << 8) | (((u32) out[-3]) << 16) | (((u32) out[-4]) << 24);
             } else {
                 in++;
                 ctx = (ctx << 8) | (*out++ = MATCH);
tab: 248 wrap: offon