2003-01-06 Roland McGrath <roland@redhat.com>

* sysdeps/i386/i486/bits/string.h (memset): Add parens around macro
	arguments.
	(memcpy, memrchr, strcpy, __stpcpy, strncpy, strcat): Likewise.
	(strcmp, strncat, strncmp, strchr, __strchrnul, strchrnul): Likewise.
	(index, strrchr, rindex, strcspn, strspn, strpbrk, strstr): Likewise.
This commit is contained in:
Roland McGrath 2003-01-07 07:37:54 +00:00
parent ad5468d69f
commit 6876cdf853

View File

@ -1,5 +1,6 @@
/* Optimized, inlined string functions. i486 version. /* Optimized, inlined string functions. i486 version.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Copyright (C) 1997,1998,1999,2000,2001,2002,2003
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -50,8 +51,8 @@
#define _HAVE_STRING_ARCH_memcpy 1 #define _HAVE_STRING_ARCH_memcpy 1
#define memcpy(dest, src, n) \ #define memcpy(dest, src, n) \
(__extension__ (__builtin_constant_p (n) \ (__extension__ (__builtin_constant_p (n) \
? __memcpy_c (dest, src, n) \ ? __memcpy_c ((dest), (src), (n)) \
: __memcpy_g (dest, src, n))) : __memcpy_g ((dest), (src), (n))))
#define __memcpy_c(dest, src, n) \ #define __memcpy_c(dest, src, n) \
((n) == 0 \ ((n) == 0 \
? (dest) \ ? (dest) \
@ -202,15 +203,15 @@ memcmp (__const void *__s1, __const void *__s2, size_t __n)
#define memset(s, c, n) \ #define memset(s, c, n) \
(__extension__ (__builtin_constant_p (n) && (n) <= 16 \ (__extension__ (__builtin_constant_p (n) && (n) <= 16 \
? ((n) == 1 \ ? ((n) == 1 \
? __memset_c1 (s, c) \ ? __memset_c1 ((s), (c)) \
: __memset_gc (s, c, n)) \ : __memset_gc ((s), (c), (n))) \
: (__builtin_constant_p (c) \ : (__builtin_constant_p (c) \
? (__builtin_constant_p (n) \ ? (__builtin_constant_p (n) \
? __memset_ccn (s, c, n) \ ? __memset_ccn ((s), (c), (n)) \
: memset (s, c, n)) \ : memset ((s), (c), (n))) \
: (__builtin_constant_p (n) \ : (__builtin_constant_p (n) \
? __memset_gcn (s, c, n) \ ? __memset_gcn ((s), (c), (n)) \
: memset (s, c, n))))) : memset ((s), (c), (n))))))
#define __memset_c1(s, c) ({ void *__s = (s); \ #define __memset_c1(s, c) ({ void *__s = (s); \
*((unsigned char *) __s) = (unsigned char) (c); \ *((unsigned char *) __s) = (unsigned char) (c); \
@ -500,7 +501,7 @@ __memrchr (__const void *__s, int __c, size_t __n)
return __res + 1; return __res + 1;
} }
# ifdef __USE_GNU # ifdef __USE_GNU
# define memrchr(s, c, n) __memrchr (s, c, n) # define memrchr(s, c, n) __memrchr ((s), (c), (n))
# endif # endif
#endif #endif
@ -565,11 +566,11 @@ __strlen_g (__const char *__str)
#define strcpy(dest, src) \ #define strcpy(dest, src) \
(__extension__ (__builtin_constant_p (src) \ (__extension__ (__builtin_constant_p (src) \
? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8 \ ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8 \
? __strcpy_a_small (dest, src, strlen (src) + 1) \ ? __strcpy_a_small ((dest), (src), strlen (src) + 1) \
: (char *) memcpy ((char *) dest, \ : (char *) memcpy ((char *) (dest), \
(__const char *) src, \ (__const char *) (src), \
strlen (src) + 1)) \ strlen (src) + 1)) \
: __strcpy_g (dest, src))) : __strcpy_g ((dest), (src))))
#define __strcpy_a_small(dest, src, srclen) \ #define __strcpy_a_small(dest, src, srclen) \
(__extension__ ({ char *__dest = (dest); \ (__extension__ ({ char *__dest = (dest); \
@ -651,9 +652,9 @@ __strcpy_g (char *__dest, __const char *__src)
# define __stpcpy(dest, src) \ # define __stpcpy(dest, src) \
(__extension__ (__builtin_constant_p (src) \ (__extension__ (__builtin_constant_p (src) \
? (strlen (src) + 1 <= 8 \ ? (strlen (src) + 1 <= 8 \
? __stpcpy_a_small (dest, src, strlen (src) + 1) \ ? __stpcpy_a_small ((dest), (src), strlen (src) + 1) \
: __stpcpy_c (dest, src, strlen (src) + 1)) \ : __stpcpy_c ((dest), (src), strlen (src) + 1)) \
: __stpcpy_g (dest, src))) : __stpcpy_g ((dest), (src))))
# define __stpcpy_c(dest, src, srclen) \ # define __stpcpy_c(dest, src, srclen) \
((srclen) % 4 == 0 \ ((srclen) % 4 == 0 \
? __mempcpy_by4 (dest, src, srclen) - 1 \ ? __mempcpy_by4 (dest, src, srclen) - 1 \
@ -662,7 +663,7 @@ __strcpy_g (char *__dest, __const char *__src)
: __mempcpy_byn (dest, src, srclen) - 1)) : __mempcpy_byn (dest, src, srclen) - 1))
/* In glibc itself we use this symbol for namespace reasons. */ /* In glibc itself we use this symbol for namespace reasons. */
# define stpcpy(dest, src) __stpcpy (dest, src) # define stpcpy(dest, src) __stpcpy ((dest), (src))
# define __stpcpy_a_small(dest, src, srclen) \ # define __stpcpy_a_small(dest, src, srclen) \
(__extension__ ({ union { \ (__extension__ ({ union { \
@ -825,10 +826,10 @@ __stpcpy_g (char *__dest, __const char *__src)
#define strncpy(dest, src, n) \ #define strncpy(dest, src, n) \
(__extension__ (__builtin_constant_p (src) \ (__extension__ (__builtin_constant_p (src) \
? ((strlen (src) + 1 >= ((size_t) (n)) \ ? ((strlen (src) + 1 >= ((size_t) (n)) \
? (char *) memcpy ((char *) dest, \ ? (char *) memcpy ((char *) (dest), \
(__const char *) src, n) \ (__const char *) (src), n) \
: __strncpy_cg (dest, src, strlen (src) + 1, n))) \ : __strncpy_cg ((dest), (src), strlen (src) + 1, n))) \
: __strncpy_gg (dest, src, n))) : __strncpy_gg ((dest), (src), n)))
#define __strncpy_cg(dest, src, srclen, n) \ #define __strncpy_cg(dest, src, srclen, n) \
(((srclen) % 4 == 0) \ (((srclen) % 4 == 0) \
? __strncpy_by4 (dest, src, srclen, n) \ ? __strncpy_by4 (dest, src, srclen, n) \
@ -956,8 +957,8 @@ __strncpy_gg (char *__dest, __const char *__src, size_t __n)
#define _HAVE_STRING_ARCH_strcat 1 #define _HAVE_STRING_ARCH_strcat 1
#define strcat(dest, src) \ #define strcat(dest, src) \
(__extension__ (__builtin_constant_p (src) \ (__extension__ (__builtin_constant_p (src) \
? __strcat_c (dest, src, strlen (src) + 1) \ ? __strcat_c ((dest), (src), strlen (src) + 1) \
: __strcat_g (dest, src))) : __strcat_g ((dest), (src))))
__STRING_INLINE char *__strcat_c (char *__dest, __const char __src[], __STRING_INLINE char *__strcat_c (char *__dest, __const char __src[],
size_t __srclen); size_t __srclen);
@ -1027,11 +1028,11 @@ __strcat_g (char *__dest, __const char *__src)
(__extension__ ({ char *__dest = (dest); \ (__extension__ ({ char *__dest = (dest); \
__builtin_constant_p (src) && __builtin_constant_p (n) \ __builtin_constant_p (src) && __builtin_constant_p (n) \
? (strlen (src) < ((size_t) (n)) \ ? (strlen (src) < ((size_t) (n)) \
? strcat (__dest, src) \ ? strcat (__dest, (src)) \
: (*((char *)__mempcpy (strchr (__dest, '\0'), \ : (*(char *)__mempcpy (strchr (__dest, '\0'), \
(__const char *) src, n)) = 0, \ (__const char *) (src), \
__dest)) \ (n)) = 0, __dest)) \
: __strncat_g (__dest, src, n); })) : __strncat_g (__dest, (src), (n)); }))
__STRING_INLINE char *__strncat_g (char *__dest, __const char __src[], __STRING_INLINE char *__strncat_g (char *__dest, __const char __src[],
size_t __n); size_t __n);
@ -1091,7 +1092,7 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
(__extension__ (__builtin_constant_p (s1) && __builtin_constant_p (s2) \ (__extension__ (__builtin_constant_p (s1) && __builtin_constant_p (s2) \
&& (sizeof ((s1)[0]) != 1 || strlen (s1) >= 4) \ && (sizeof ((s1)[0]) != 1 || strlen (s1) >= 4) \
&& (sizeof ((s2)[0]) != 1 || strlen (s2) >= 4) \ && (sizeof ((s2)[0]) != 1 || strlen (s2) >= 4) \
? memcmp ((__const char *) s1, (__const char *) s2, \ ? memcmp ((__const char *) (s1), (__const char *) (s2), \
(strlen (s1) < strlen (s2) \ (strlen (s1) < strlen (s2) \
? strlen (s1) : strlen (s2)) + 1) \ ? strlen (s1) : strlen (s2)) + 1) \
: (__builtin_constant_p (s1) && sizeof ((s1)[0]) == 1 \ : (__builtin_constant_p (s1) && sizeof ((s1)[0]) == 1 \
@ -1112,7 +1113,7 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
: __strcmp_gc ((__const unsigned char *) (s1), \ : __strcmp_gc ((__const unsigned char *) (s1), \
(__const unsigned char *) (s2), \ (__const unsigned char *) (s2), \
strlen (s2))) \ strlen (s2))) \
: __strcmp_gg (s1, s2))))) : __strcmp_gg ((s1), (s2))))))
#define __strcmp_cc(s1, s2, l) \ #define __strcmp_cc(s1, s2, l) \
(__extension__ ({ register int __result = (s1)[0] - (s2)[0]; \ (__extension__ ({ register int __result = (s1)[0] - (s2)[0]; \
@ -1193,10 +1194,10 @@ __strcmp_gg (__const char *__s1, __const char *__s2)
#define _HAVE_STRING_ARCH_strncmp 1 #define _HAVE_STRING_ARCH_strncmp 1
#define strncmp(s1, s2, n) \ #define strncmp(s1, s2, n) \
(__extension__ (__builtin_constant_p (s1) && strlen (s1) < ((size_t) (n)) \ (__extension__ (__builtin_constant_p (s1) && strlen (s1) < ((size_t) (n)) \
? strcmp (s1, s2) \ ? strcmp ((s1), (s2)) \
: (__builtin_constant_p (s2) && strlen (s2) < ((size_t) (n))\ : (__builtin_constant_p (s2) && strlen (s2) < ((size_t) (n))\
? strcmp (s1, s2) \ ? strcmp ((s1), (s2)) \
: __strncmp_g (s1, s2, n)))) : __strncmp_g ((s1), (s2), (n)))))
__STRING_INLINE int __strncmp_g (__const char *__s1, __const char *__s2, __STRING_INLINE int __strncmp_g (__const char *__s1, __const char *__s2,
size_t __n); size_t __n);
@ -1239,9 +1240,9 @@ __strncmp_g (__const char *__s1, __const char *__s2, size_t __n)
#define strchr(s, c) \ #define strchr(s, c) \
(__extension__ (__builtin_constant_p (c) \ (__extension__ (__builtin_constant_p (c) \
? ((c) == '\0' \ ? ((c) == '\0' \
? (char *) __rawmemchr (s, c) \ ? (char *) __rawmemchr ((s), (c)) \
: __strchr_c (s, ((c) & 0xff) << 8)) \ : __strchr_c ((s), ((c) & 0xff) << 8)) \
: __strchr_g (s, c))) : __strchr_g ((s), (c))))
__STRING_INLINE char *__strchr_c (__const char *__s, int __c); __STRING_INLINE char *__strchr_c (__const char *__s, int __c);
@ -1298,9 +1299,9 @@ __strchr_g (__const char *__s, int __c)
#define __strchrnul(s, c) \ #define __strchrnul(s, c) \
(__extension__ (__builtin_constant_p (c) \ (__extension__ (__builtin_constant_p (c) \
? ((c) == '\0' \ ? ((c) == '\0' \
? (char *) __rawmemchr (s, c) \ ? (char *) __rawmemchr ((s), c) \
: __strchrnul_c (s, ((c) & 0xff) << 8)) \ : __strchrnul_c ((s), ((c) & 0xff) << 8)) \
: __strchrnul_g (s, c))) : __strchrnul_g ((s), c)))
__STRING_INLINE char *__strchrnul_c (__const char *__s, int __c); __STRING_INLINE char *__strchrnul_c (__const char *__s, int __c);
@ -1351,7 +1352,7 @@ __strchrnul_g (__const char *__s, int __c)
return __res; return __res;
} }
#ifdef __USE_GNU #ifdef __USE_GNU
# define strchrnul(s, c) __strchrnul (s, c) # define strchrnul(s, c) __strchrnul ((s), (c))
#endif #endif
@ -1360,8 +1361,8 @@ __strchrnul_g (__const char *__s, int __c)
# define _HAVE_STRING_ARCH_index 1 # define _HAVE_STRING_ARCH_index 1
# define index(s, c) \ # define index(s, c) \
(__extension__ (__builtin_constant_p (c) \ (__extension__ (__builtin_constant_p (c) \
? __strchr_c (s, ((c) & 0xff) << 8) \ ? __strchr_c ((s), ((c) & 0xff) << 8) \
: __strchr_g (s, c))) : __strchr_g ((s), (c))))
#endif #endif
@ -1369,8 +1370,8 @@ __strchrnul_g (__const char *__s, int __c)
#define _HAVE_STRING_ARCH_strrchr 1 #define _HAVE_STRING_ARCH_strrchr 1
#define strrchr(s, c) \ #define strrchr(s, c) \
(__extension__ (__builtin_constant_p (c) \ (__extension__ (__builtin_constant_p (c) \
? __strrchr_c (s, ((c) & 0xff) << 8) \ ? __strrchr_c ((s), ((c) & 0xff) << 8) \
: __strrchr_g (s, c))) : __strrchr_g ((s), (c))))
#ifdef __i686__ #ifdef __i686__
__STRING_INLINE char *__strrchr_c (__const char *__s, int __c); __STRING_INLINE char *__strrchr_c (__const char *__s, int __c);
@ -1474,8 +1475,8 @@ __strrchr_g (__const char *__s, int __c)
# define _HAVE_STRING_ARCH_rindex 1 # define _HAVE_STRING_ARCH_rindex 1
# define rindex(s, c) \ # define rindex(s, c) \
(__extension__ (__builtin_constant_p (c) \ (__extension__ (__builtin_constant_p (c) \
? __strrchr_c (s, ((c) & 0xff) << 8) \ ? __strrchr_c ((s), ((c) & 0xff) << 8) \
: __strrchr_g (s, c))) : __strrchr_g ((s), (c))))
#endif #endif
@ -1487,9 +1488,9 @@ __strrchr_g (__const char *__s, int __c)
? ((reject)[0] == '\0' \ ? ((reject)[0] == '\0' \
? strlen (s) \ ? strlen (s) \
: ((reject)[1] == '\0' \ : ((reject)[1] == '\0' \
? __strcspn_c1 (s, (((reject)[0] << 8) & 0xff00)) \ ? __strcspn_c1 ((s), (((reject)[0] << 8) & 0xff00)) \
: __strcspn_cg (s, reject, strlen (reject)))) \ : __strcspn_cg ((s), (reject), strlen (reject)))) \
: __strcspn_g (s, reject))) : __strcspn_g ((s), (reject))))
__STRING_INLINE size_t __strcspn_c1 (__const char *__s, int __reject); __STRING_INLINE size_t __strcspn_c1 (__const char *__s, int __reject);
@ -1608,9 +1609,9 @@ __strcspn_g (__const char *__s, __const char *__reject)
? ((accept)[0] == '\0' \ ? ((accept)[0] == '\0' \
? ((void) (s), 0) \ ? ((void) (s), 0) \
: ((accept)[1] == '\0' \ : ((accept)[1] == '\0' \
? __strspn_c1 (s, (((accept)[0] << 8 ) & 0xff00)) \ ? __strspn_c1 ((s), (((accept)[0] << 8 ) & 0xff00)) \
: __strspn_cg (s, accept, strlen (accept)))) \ : __strspn_cg ((s), (accept), strlen (accept)))) \
: __strspn_g (s, accept))) : __strspn_g ((s), (accept))))
#ifndef _FORCE_INLINES #ifndef _FORCE_INLINES
__STRING_INLINE size_t __strspn_c1 (__const char *__s, int __accept); __STRING_INLINE size_t __strspn_c1 (__const char *__s, int __accept);
@ -1727,9 +1728,9 @@ __strspn_g (__const char *__s, __const char *__accept)
? ((accept)[0] == '\0' \ ? ((accept)[0] == '\0' \
? ((void) (s), NULL) \ ? ((void) (s), NULL) \
: ((accept)[1] == '\0' \ : ((accept)[1] == '\0' \
? strchr (s, (accept)[0]) \ ? strchr ((s), (accept)[0]) \
: __strpbrk_cg (s, accept, strlen (accept)))) \ : __strpbrk_cg ((s), (accept), strlen (accept)))) \
: __strpbrk_g (s, accept))) : __strpbrk_g ((s), (accept))))
__STRING_INLINE char *__strpbrk_cg (__const char *__s, __const char __accept[], __STRING_INLINE char *__strpbrk_cg (__const char *__s, __const char __accept[],
size_t __accept_len); size_t __accept_len);
@ -1832,11 +1833,12 @@ __strpbrk_g (__const char *__s, __const char *__accept)
#define strstr(haystack, needle) \ #define strstr(haystack, needle) \
(__extension__ (__builtin_constant_p (needle) && sizeof ((needle)[0]) == 1 \ (__extension__ (__builtin_constant_p (needle) && sizeof ((needle)[0]) == 1 \
? ((needle)[0] == '\0' \ ? ((needle)[0] == '\0' \
? haystack \ ? (haystack) \
: ((needle)[1] == '\0' \ : ((needle)[1] == '\0' \
? strchr (haystack, (needle)[0]) \ ? strchr ((haystack), (needle)[0]) \
: __strstr_cg (haystack, needle, strlen (needle)))) \ : __strstr_cg ((haystack), (needle), \
: __strstr_g (haystack, needle))) strlen (needle)))) \
: __strstr_g ((haystack), (needle))))
/* Please note that this function need not handle NEEDLEs with a /* Please note that this function need not handle NEEDLEs with a
length shorter than two. */ length shorter than two. */