mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
string: Hook up the default implementation on test-strchr
Also remove the simple_STRCHR, which can be easily replaced. Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
b79cffb391
commit
c19e3394a2
@ -35,7 +35,6 @@
|
||||
#ifndef WIDE
|
||||
# ifdef USE_FOR_STRCHRNUL
|
||||
# define STRCHR strchrnul
|
||||
# define simple_STRCHR simple_STRCHRNUL
|
||||
# else
|
||||
# define STRCHR strchr
|
||||
# endif /* !USE_FOR_STRCHRNUL */
|
||||
@ -50,7 +49,6 @@
|
||||
# include <wchar.h>
|
||||
# ifdef USE_FOR_STRCHRNUL
|
||||
# define STRCHR wcschrnul
|
||||
# define simple_STRCHR simple_WCSCHRNUL
|
||||
# else
|
||||
# define STRCHR wcschr
|
||||
# endif /* !USE_FOR_STRCHRNUL */
|
||||
@ -72,20 +70,41 @@
|
||||
|
||||
typedef CHAR *(*proto_t) (const CHAR *, int);
|
||||
|
||||
/* Naive implementation to verify results. */
|
||||
CHAR *
|
||||
simple_STRCHR (const CHAR *s, int c)
|
||||
{
|
||||
size_t n = STRLEN (s) + 1;
|
||||
|
||||
while (n--)
|
||||
if (*s++ == (CHAR) c)
|
||||
return (CHAR *) s - 1;
|
||||
return NULLRET ((CHAR *) s - 1);
|
||||
}
|
||||
|
||||
IMPL (STRCHR, 1)
|
||||
|
||||
/* Also check the generic implementation. */
|
||||
#undef STRCHR
|
||||
#undef weak_alias
|
||||
#define weak_alias(a, b)
|
||||
#undef libc_hidden_builtin_def
|
||||
#define libc_hidden_builtin_def(a)
|
||||
#undef libc_hidden_def
|
||||
#define libc_hidden_def(a)
|
||||
#undef libc_hidden_weak
|
||||
#define libc_hidden_weak(a)
|
||||
#ifndef WIDE
|
||||
# define STRCHRNUL __strchrnul_default
|
||||
# include "string/strchrnul.c"
|
||||
# ifndef USE_FOR_STRCHRNUL
|
||||
# define STRCHR __strchr_default
|
||||
# include "string/strchr.c"
|
||||
# define STRCHR_DEFAULT STRCHR
|
||||
# else
|
||||
# define STRCHR_DEFAULT STRCHRNUL
|
||||
# endif
|
||||
#else
|
||||
# ifndef USE_FOR_STRCHRNUL
|
||||
# define WCSCHR __wcschr_default
|
||||
# include "wcsmbs/wcschr.c"
|
||||
# define STRCHR_DEFAULT WCSCHR
|
||||
# else
|
||||
# define WCSCHRNUL __wcschrnul_default
|
||||
# include "wcsmbs/wcschrnul.c"
|
||||
# define STRCHR_DEFAULT WCSCHRNUL
|
||||
# endif
|
||||
#endif
|
||||
IMPL (STRCHR_DEFAULT, 1)
|
||||
|
||||
static int
|
||||
check_result (impl_t *impl, const CHAR *s, int c, const CHAR *exp_res)
|
||||
{
|
||||
@ -219,7 +238,11 @@ check1 (void)
|
||||
{
|
||||
CHAR s[] __attribute__((aligned(16))) = L ("\xff");
|
||||
CHAR c = L ('\xfe');
|
||||
CHAR *exp_result = simple_STRCHR (s, c);
|
||||
#ifndef USE_FOR_STRCHRNUL
|
||||
CHAR *exp_result = NULL;
|
||||
#else
|
||||
CHAR *exp_result = s + STRLEN (s);
|
||||
#endif
|
||||
|
||||
FOR_EACH_IMPL (impl, 0)
|
||||
check_result (impl, s, c, exp_result);
|
||||
|
Loading…
Reference in New Issue
Block a user