From: Bruno Haible Date: Sun, 1 Feb 2009 21:11:23 +0000 (+0100) Subject: Fix use of integer types in memcmp.c. X-Git-Tag: v0.1~6380 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=978619651b0d1562882641de860f8adfb3cc25d6;p=gnulib.git Fix use of integer types in memcmp.c. --- diff --git a/ChangeLog b/ChangeLog index 119d5ad93..491806abc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2009-02-01 Bruno Haible + + Don't assume sizeof (long) >= sizeof (void *). + * lib/memcmp.c: Include stdint.h. + (memcmp_bytes): Change argument types to op_t. Change type of srcp1, + srcp2 to 'const byte *'. + (memcmp_common_alignment, memcmp_not_common_alignment): Change argument + types to uintptr_t. + (rpl_memcmp): Change type of srcp1, srcp2 to 'uintptr_t'. + * modules/memcmp (Depends-on): Add stdint. + Reported by Ozkan Sezer . + 2009-01-30 Eric Blake fix more require-before-expand issues diff --git a/lib/memcmp.c b/lib/memcmp.c index 78735f5e3..01810715b 100644 --- a/lib/memcmp.c +++ b/lib/memcmp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1995, 1997, 1998, 2003, 2006 Free Software +/* Copyright (C) 1991, 1993, 1995, 1997, 1998, 2003, 2006, 2009 Free Software Foundation, Inc. Contributed by Torbjorn Granlund (tege@sics.se). @@ -25,6 +25,8 @@ #include +#include + #undef memcmp #ifdef _LIBC @@ -88,16 +90,16 @@ typedef unsigned char byte; __inline # endif static int -memcmp_bytes (long unsigned int a, long unsigned int b) +memcmp_bytes (op_t a, op_t b) { - long int srcp1 = (long int) &a; - long int srcp2 = (long int) &b; + const byte *srcp1 = (const byte *) &a; + const byte *srcp2 = (const byte *) &b; op_t a0, b0; do { - a0 = ((byte *) srcp1)[0]; - b0 = ((byte *) srcp2)[0]; + a0 = srcp1[0]; + b0 = srcp2[0]; srcp1 += 1; srcp2 += 1; } @@ -113,7 +115,7 @@ memcmp_bytes (long unsigned int a, long unsigned int b) __inline #endif static int -memcmp_common_alignment (long int srcp1, long int srcp2, size_t len) +memcmp_common_alignment (uintptr_t srcp1, uintptr_t srcp2, size_t len) { op_t a0, a1; op_t b0, b1; @@ -198,7 +200,7 @@ memcmp_common_alignment (long int srcp1, long int srcp2, size_t len) __inline #endif static int -memcmp_not_common_alignment (long int srcp1, long int srcp2, size_t len) +memcmp_not_common_alignment (uintptr_t srcp1, uintptr_t srcp2, size_t len) { op_t a0, a1, a2, a3; op_t b0, b1, b2, b3; @@ -302,8 +304,8 @@ rpl_memcmp (const void *s1, const void *s2, size_t len) { op_t a0; op_t b0; - long int srcp1 = (long int) s1; - long int srcp2 = (long int) s2; + uintptr_t srcp1 = (uintptr_t) s1; + uintptr_t srcp2 = (uintptr_t) s2; op_t res; if (len >= OP_T_THRES) diff --git a/modules/memcmp b/modules/memcmp index c65bad1c3..c6bc26200 100644 --- a/modules/memcmp +++ b/modules/memcmp @@ -12,6 +12,7 @@ lib/memcmp.c m4/memcmp.m4 Depends-on: +stdint configure.ac: gl_FUNC_MEMCMP