This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PING][PATCH] More effective generic strrchr.
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: libc-alpha at sourceware dot org
- Date: Wed, 4 Dec 2013 13:58:31 +0100
- Subject: [PING][PATCH] More effective generic strrchr.
- Authentication-results: sourceware.org; auth=none
- References: <20131005071542 dot GA13382 at domone>
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.