From 00b0c626de39eb81265fe5eb14a48957784242cd Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Fri, 19 Jun 2009 10:41:19 +0200 Subject: [PATCH] --- yaml --- r: 154009 b: refs/heads/master c: 32a9ff9cc55b42543a84bca90b070df92af72671 h: refs/heads/master i: 154007: 3142f846848bc91ff8f2f49810e7ab887ea0ba1b v: v3 --- [refs] | 2 +- trunk/lib/checksum.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 2d27e052cb27..a32655fa5bce 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fcec9bf12442d0cd50d6cee125d168cfc3f37c5e +refs/heads/master: 32a9ff9cc55b42543a84bca90b070df92af72671 diff --git a/trunk/lib/checksum.c b/trunk/lib/checksum.c index 12e5a1c91cda..b2e2fd468461 100644 --- a/trunk/lib/checksum.c +++ b/trunk/lib/checksum.c @@ -55,7 +55,11 @@ static unsigned int do_csum(const unsigned char *buff, int len) goto out; odd = 1 & (unsigned long) buff; if (odd) { +#ifdef __LITTLE_ENDIAN result = *buff; +#else + result += (*buff << 8); +#endif len--; buff++; } @@ -71,7 +75,7 @@ static unsigned int do_csum(const unsigned char *buff, int len) if (count) { unsigned long carry = 0; do { - unsigned long w = *(unsigned long *) buff; + unsigned long w = *(unsigned int *) buff; count--; buff += 4; result += carry; @@ -87,7 +91,11 @@ static unsigned int do_csum(const unsigned char *buff, int len) } } if (len & 1) +#ifdef __LITTLE_ENDIAN + result += *buff; +#else result += (*buff << 8); +#endif result = from32to16(result); if (odd) result = ((result >> 8) & 0xff) | ((result & 0xff) << 8);