This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: libc/string/strrchr.c


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;
>  }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]