This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PING][PATCH] More effective generic strrchr.


ping
On Sat, Oct 05, 2013 at 09:15:42AM +0200, OndÅej BÃlka wrote:
> 
> A generic implementation of strrchr could be improved by following
> patch. As it is likely that last occurrence of c will be near end we 
> could quickly find it. This is also much faster for degenerate inputs
> like:
> 
> strrchr("xyxyxyxyxyxyxyxyxyxyxyxyx...",'x');
> 
> where a loop slows us down.
> 
> 	* string/strrchr.c: Improve implementation.
> 
> ---
>  string/strrchr.c | 19 ++-----------------
>  1 file changed, 2 insertions(+), 17 deletions(-)
> 
> diff --git a/string/strrchr.c b/string/strrchr.c
> index bdec841..ad242b6 100644
> --- a/string/strrchr.c
> +++ b/string/strrchr.c
> @@ -23,23 +23,8 @@
>  char *
>  strrchr (const char *s, int c)
>  {
> -  const char *found, *p;
> -
> -  c = (unsigned char) c;
> -
> -  /* Since strchr is fast, we use it rather than the obvious loop.  */
> -
> -  if (c == '\0')
> -    return strchr (s, '\0');
> -
> -  found = NULL;
> -  while ((p = strchr (s, c)) != NULL)
> -    {
> -      found = p;
> -      s = p + 1;
> -    }
> -
> -  return (char *) found;
> +  /* We need to include terminating zero for case c == 0.  */
> +  return __memrchr (s, c, strlen (s) + 1);
>  }
>  
>  #ifdef weak_alias
> -- 
> 1.8.4.rc3

-- 

User was distributing pornography on server; system seized by FBI.


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