patch "crc32: more optimizations" introduced a bug.
This fixes it.

Signed-off-by: Joakim Tjernlund <joakim.tjernl...@transmode.se>
---

 Perhaps I should resend as one whole patch with
 everything instead?

 lib_generic/crc32.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/lib_generic/crc32.c b/lib_generic/crc32.c
index 2837d93..7f5abb1 100644
--- a/lib_generic/crc32.c
+++ b/lib_generic/crc32.c
@@ -180,7 +180,7 @@ uint32_t ZEXPORT crc32_no_comp(uint32_t crc, const Bytef 
*buf, uInt len)
 {
     const uint32_t *tab = crc_table;
     const uint32_t *b =(uint32_t *)buf;
-    size_t save_len;
+    size_t rem_len;
 #ifdef DYNAMIC_CRC_TABLE
     if (crc_table_empty)
       make_crc_table();
@@ -188,14 +188,14 @@ uint32_t ZEXPORT crc32_no_comp(uint32_t crc, const Bytef 
*buf, uInt len)
     crc = __cpu_to_le32(crc);
     /* Align it */
     if(((long)b)&3 && len) {
-        uint8_t *p = (uint8_t *)b - 1;
+        uint8_t *p = (uint8_t *)b;
         do {
-             DO_CRC(*++p); /* use pre increment for speed */
-        } while ((--len) && ((long)b)&3 );
-        b = (uint32_t *)p + 1;
+             DO_CRC(*p++);
+        } while ((--len) && ((long)p)&3);
+        b = (uint32_t *)p;
     }
 
-    save_len = len & 3;
+    rem_len = len & 3;
     len = len >> 2;
     for (--b; len; --len) {
         /* load data 32 bits wide, xor data 32 bits wide. */
@@ -205,10 +205,10 @@ uint32_t ZEXPORT crc32_no_comp(uint32_t crc, const Bytef 
*buf, uInt len)
         DO_CRC(0);
         DO_CRC(0);
     }
-    len = save_len;
+    len = rem_len;
     /* And the last few bytes */
     if (len) {
-        uint8_t *p = (uint8_t *)(b++) - 1;
+        uint8_t *p = (uint8_t *)(b + 1) - 1;
         do {
              DO_CRC(*++p); /* use pre increment for speed */
         } while (--len);
-- 
1.6.4.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to