X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fmemchr.c;h=6d903b1014f4ea729f986a3706328a8835e278bb;hb=599a664564268f6a1b5895c928a59459c9851b2a;hp=3da039bf4558befb58a7d4d6fa24781adb1b8100;hpb=945223b6cda69a3695f1ce75216c391276fec262;p=gnulib.git diff --git a/lib/memchr.c b/lib/memchr.c index 3da039bf4..6d903b101 100644 --- a/lib/memchr.c +++ b/lib/memchr.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2006, 2008 +/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2011 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), @@ -45,8 +45,6 @@ along with this program. If not, see . */ # define BP_SYM(sym) sym #endif -#include "intprops.h" - #undef __memchr #ifdef _LIBC # undef memchr @@ -65,7 +63,7 @@ __memchr (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; @@ -94,20 +92,20 @@ __memchr (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)) - { - int 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 @@ -146,8 +144,8 @@ __memchr (void const *s, int c_in, size_t n) longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) - & (repeated_one << 7)) != 0) - break; + & (repeated_one << 7)) != 0) + break; longword_ptr++; n -= sizeof (longword); } @@ -164,7 +162,7 @@ __memchr (void const *s, int c_in, size_t n) for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c) - return (void *) char_ptr; + return (void *) char_ptr; } return NULL;