libc/string/strrchr.c

J. Johnston jjohnstn@cygnus.com
Thu May 3 17:00:00 GMT 2001


Earnie Boyd wrote:
> 
> This patch improves Cygwin's speed greatly.
> 
> Earnie.
> 

Your patch needs a special case for the null terminator.  Both strchr and strrchr treat the null
terminator as part of the string and allow searches for it.  In your loop, the null terminator can
be found by strchr() but then you will increment s and will start searching beyond the end of the
string.

-- Jeff J.

>   ----------------------------------------------------------------------------------------------------
> 2001-05-03  Earnie Boyd  <earnie@users.sourceforge.net>
> 
>         * libc/string/strrchr.c: Use strchr for the speed improvements.
> 
> Index: strrchr.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/string/strrchr.c,v
> retrieving revision 1.1.1.1
> diff -u -p -r1.1.1.1 strrchr.c
> --- strrchr.c   2000/02/17 19:39:48     1.1.1.1
> +++ strrchr.c   2001/05/03 23:27:52
> @@ -41,21 +41,12 @@ _DEFUN (strrchr, (s, i),
>         int i)
>  {
>    _CONST char *last = NULL;
> -  char c = i;
> 
> -  while (*s)
> +  while (s=strchr(s, i))
>      {
> -      if (*s == c)
> -       {
> -         last = s;
> -       }
> -      s++;
> -    }
> -
> -  if (*s == c)
> -    {
>        last = s;
> +      s++;
>      }
> -
> +
>    return (char *) last;
>  }



More information about the Newlib mailing list