X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fmemrchr.c;h=7d702f35e1dca00df87b49ffda197976afc6094c;hb=6e9405a068eabd607da1b526b68e4373ae43da71;hp=9f29900f85b7fed6926a7c44a40add500cfd4f7a;hpb=4589d52c7c039b9d9c9d7bec075f00c9d57ee6e1;p=gnulib.git diff --git a/lib/memrchr.c b/lib/memrchr.c index 9f29900f8..7d702f35e 100644 --- a/lib/memrchr.c +++ b/lib/memrchr.c @@ -1,5 +1,8 @@ /* memrchr -- find the last occurrence of a byte in a memory block - Copyright (C) 1991, 93, 96, 97, 99, 2000 Free Software Foundation, Inc. + + Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003 Free + Software Foundation, Inc. + Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); @@ -25,31 +28,18 @@ #endif #include - -#undef __ptr_t -#if defined (__cplusplus) || (defined (__STDC__) && __STDC__) -# define __ptr_t void * -#else /* Not C++ or ANSI C. */ -# define __ptr_t char * -#endif /* C++ or ANSI C. */ +#include #if defined (_LIBC) -# include # include #else # define reg_char char #endif -#if defined (HAVE_LIMITS_H) || defined (_LIBC) -# include -#endif +#include #define LONG_MAX_32_BITS 2147483647 -#ifndef LONG_MAX -# define LONG_MAX LONG_MAX_32_BITS -#endif - #include #undef __memrchr @@ -60,11 +50,8 @@ #endif /* Search no more than N bytes of S for C. */ -__ptr_t -__memrchr (s, c_in, n) - const __ptr_t s; - int c_in; - size_t n; +void * +__memrchr (void const *s, int c_in, size_t n) { const unsigned char *char_ptr; const unsigned long int *longword_ptr; @@ -80,7 +67,7 @@ __memrchr (s, c_in, n) & (sizeof (longword) - 1)) != 0; --n) if (*--char_ptr == c) - return (__ptr_t) char_ptr; + return (void *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to 8-byte longwords. */ @@ -172,22 +159,22 @@ __memrchr (s, c_in, n) #if LONG_MAX > 2147483647 if (cp[7] == c) - return (__ptr_t) &cp[7]; + return (void *) &cp[7]; if (cp[6] == c) - return (__ptr_t) &cp[6]; + return (void *) &cp[6]; if (cp[5] == c) - return (__ptr_t) &cp[5]; + return (void *) &cp[5]; if (cp[4] == c) - return (__ptr_t) &cp[4]; + return (void *) &cp[4]; #endif if (cp[3] == c) - return (__ptr_t) &cp[3]; + return (void *) &cp[3]; if (cp[2] == c) - return (__ptr_t) &cp[2]; + return (void *) &cp[2]; if (cp[1] == c) - return (__ptr_t) &cp[1]; + return (void *) &cp[1]; if (cp[0] == c) - return (__ptr_t) cp; + return (void *) cp; } n -= sizeof (longword); @@ -198,7 +185,7 @@ __memrchr (s, c_in, n) while (n-- > 0) { if (*--char_ptr == c) - return (__ptr_t) char_ptr; + return (void *) char_ptr; } return 0;