glibc/string/rawmemchr.c
Wilco Dijkstra 3038145ca2 Improve generic rawmemchr for targets that don't have an
assembler version by tailcalling memchr with the maximum size.
If a target has an optimized memchr this is significantly faster,
if not, then this makes little difference.
Also optimize the special case of zero to use strlen as this is
typically faster than memchr.

	* string/rawmemchr.c (RAWMEMCHR): Use faster memchr/strlen.
2016-12-14 13:16:13 +00:00

34 lines
1.1 KiB
C

/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <string.h>
#ifndef RAWMEMCHR
# define RAWMEMCHR __rawmemchr
#endif
/* Find the first occurrence of C in S. */
void *
RAWMEMCHR (const void *s, int c)
{
if (c != '\0')
return memchr (s, c, (size_t)-1);
return (char *)s + strlen (s);
}
libc_hidden_def (__rawmemchr)
weak_alias (__rawmemchr, rawmemchr)