mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01: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
1 changed files with 38 additions and 15 deletions
|
@ -35,7 +35,6 @@
|
||||||
#ifndef WIDE
|
#ifndef WIDE
|
||||||
# ifdef USE_FOR_STRCHRNUL
|
# ifdef USE_FOR_STRCHRNUL
|
||||||
# define STRCHR strchrnul
|
# define STRCHR strchrnul
|
||||||
# define simple_STRCHR simple_STRCHRNUL
|
|
||||||
# else
|
# else
|
||||||
# define STRCHR strchr
|
# define STRCHR strchr
|
||||||
# endif /* !USE_FOR_STRCHRNUL */
|
# endif /* !USE_FOR_STRCHRNUL */
|
||||||
|
@ -50,7 +49,6 @@
|
||||||
# include <wchar.h>
|
# include <wchar.h>
|
||||||
# ifdef USE_FOR_STRCHRNUL
|
# ifdef USE_FOR_STRCHRNUL
|
||||||
# define STRCHR wcschrnul
|
# define STRCHR wcschrnul
|
||||||
# define simple_STRCHR simple_WCSCHRNUL
|
|
||||||
# else
|
# else
|
||||||
# define STRCHR wcschr
|
# define STRCHR wcschr
|
||||||
# endif /* !USE_FOR_STRCHRNUL */
|
# endif /* !USE_FOR_STRCHRNUL */
|
||||||
|
@ -72,20 +70,41 @@
|
||||||
|
|
||||||
typedef CHAR *(*proto_t) (const CHAR *, int);
|
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)
|
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
|
static int
|
||||||
check_result (impl_t *impl, const CHAR *s, int c, const CHAR *exp_res)
|
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 s[] __attribute__((aligned(16))) = L ("\xff");
|
||||||
CHAR c = L ('\xfe');
|
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)
|
FOR_EACH_IMPL (impl, 0)
|
||||||
check_result (impl, s, c, exp_result);
|
check_result (impl, s, c, exp_result);
|
||||||
|
|
Loading…
Add table
Reference in a new issue