X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fmemrchr.c;h=358f61834b40626e40e50909fdf76c8b42997d38;hb=6f730e7ae5225bf9eb36554d94805b97a72784bd;hp=2796dea3f5b4ce19c6e1225b5b51fdab75be590d;hpb=2c33678711c8d7ac62ddd06b4df234a0ccbb74a7;p=gnulib.git diff --git a/lib/memrchr.c b/lib/memrchr.c index 2796dea3f..358f61834 100644 --- a/lib/memrchr.c +++ b/lib/memrchr.c @@ -1,7 +1,7 @@ /* memrchr -- find the last occurrence of a byte in a memory block - Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2005, - 2006, 2007, 2008 Free Software Foundation, Inc. + Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2010 Free Software + Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and @@ -32,8 +32,6 @@ #include #include -#include "intprops.h" - #undef __memrchr #ifdef _LIBC # undef memrchr @@ -52,7 +50,7 @@ __memrchr (void const *s, int c_in, size_t n) performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ - typedef unsigned long longword; + typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; @@ -81,20 +79,20 @@ __memrchr (void const *s, int c_in, size_t n) repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; - if (0xffffffffU < TYPE_MAXIMUM (longword)) + if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) - { - size_t i; - - for (i = 64; i < sizeof (longword) * 8; i *= 2) - { - repeated_one |= repeated_one << i; - repeated_c |= repeated_c << i; - } - } + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } } /* Instead of the traditional loop which tests each byte, we will test a @@ -133,11 +131,11 @@ __memrchr (void const *s, int c_in, size_t n) longword longword1 = *--longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) - & (repeated_one << 7)) != 0) - { - longword_ptr++; - break; - } + & (repeated_one << 7)) != 0) + { + longword_ptr++; + break; + } n -= sizeof (longword); } @@ -153,7 +151,7 @@ __memrchr (void const *s, int c_in, size_t n) while (n-- > 0) { if (*--char_ptr == c) - return (void *) char_ptr; + return (void *) char_ptr; } return NULL;