mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
2f44ee08db
regcomp brings in references to wcscoll, which isn't in all the standards that contain regcomp. In turn, wcscoll brings in references to wcscmp, also not in all those standards. This patch fixes this by making those functions into weak aliases of __wcscoll and __wcscmp and calling those names instead as needed. Tested for x86_64 and x86 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #18497] * wcsmbs/wcscmp.c [!WCSCMP] (WCSCMP): Define as __wcscmp instead of wcscmp. (wcscmp): Define as weak alias of WCSCMP. * wcsmbs/wcscoll.c (STRCOLL): Define as __wcscoll instead of wcscoll. (USE_HIDDEN_DEF): Define. [!USE_IN_EXTENDED_LOCALE_MODEL] (wcscoll): Define as weak alias of __wcscoll. Don't use libc_hidden_weak. * wcsmbs/wcscoll_l.c (STRCMP): Define as __wcscmp instead of wcscmp. * sysdeps/i386/i686/multiarch/wcscmp-c.c [SHARED] (libc_hidden_def): Define __GI___wcscmp instead of __GI_wcscmp. (weak_alias): Undefine and redefine. * sysdeps/i386/i686/multiarch/wcscmp.S (wcscmp): Rename to __wcscmp and define as weak alias of __wcscmp. * sysdeps/x86_64/wcscmp.S (wcscmp): Likewise. * include/wchar.h (__wcscmp): Declare. Use libc_hidden_proto. (__wcscoll): Likewise. (wcscmp): Don't use libc_hidden_proto. (wcscoll): Likewise. * posix/regcomp.c (build_range_exp): Call __wcscoll instead of wcscoll. * posix/regexec.c (check_node_accept_bytes): Likewise. * conform/Makefile (test-xfail-XPG3/regex.h/linknamespace): Remove variable. (test-xfail-XPG4/regex.h/linknamespace): Likewise. (test-xfail-POSIX/regex.h/linknamespace): Likewise.
221 lines
8.2 KiB
C
221 lines
8.2 KiB
C
#ifndef _WCHAR_H
|
|
#include <wcsmbs/wchar.h>
|
|
|
|
# ifndef _ISOMAC
|
|
# ifdef _WCHAR_H
|
|
|
|
extern __typeof (wcscasecmp_l) __wcscasecmp_l;
|
|
extern __typeof (wcsncasecmp_l) __wcsncasecmp_l;
|
|
extern __typeof (wcscoll_l) __wcscoll_l;
|
|
extern __typeof (wcsxfrm_l) __wcsxfrm_l;
|
|
extern __typeof (wcstol_l) __wcstol_l;
|
|
extern __typeof (wcstoul_l) __wcstoul_l;
|
|
extern __typeof (wcstoll_l) __wcstoll_l;
|
|
extern __typeof (wcstoull_l) __wcstoull_l;
|
|
extern __typeof (wcstod_l) __wcstod_l;
|
|
extern __typeof (wcstof_l) __wcstof_l;
|
|
extern __typeof (wcstold_l) __wcstold_l;
|
|
extern __typeof (wcsftime_l) __wcsftime_l;
|
|
libc_hidden_proto (__wcstol_l)
|
|
libc_hidden_proto (__wcstoul_l)
|
|
libc_hidden_proto (__wcstoll_l)
|
|
libc_hidden_proto (__wcstoull_l)
|
|
libc_hidden_proto (__wcstod_l)
|
|
libc_hidden_proto (__wcstof_l)
|
|
libc_hidden_proto (__wcstold_l)
|
|
libc_hidden_proto (__wcsftime_l)
|
|
|
|
|
|
extern double __wcstod_internal (const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr, int __group)
|
|
__THROW;
|
|
extern float __wcstof_internal (const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr, int __group)
|
|
__THROW;
|
|
extern long double __wcstold_internal (const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __group) __THROW;
|
|
extern long int __wcstol_internal (const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base, int __group) __THROW;
|
|
extern unsigned long int __wcstoul_internal (const wchar_t *__restrict __npt,
|
|
wchar_t **__restrict __endptr,
|
|
int __base, int __group) __THROW;
|
|
__extension__
|
|
extern long long int __wcstoll_internal (const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base, int __group) __THROW;
|
|
__extension__
|
|
extern unsigned long long int __wcstoull_internal (const wchar_t *
|
|
__restrict __nptr,
|
|
wchar_t **
|
|
__restrict __endptr,
|
|
int __base,
|
|
int __group) __THROW;
|
|
libc_hidden_proto (__wcstof_internal)
|
|
libc_hidden_proto (__wcstod_internal)
|
|
libc_hidden_proto (__wcstold_internal)
|
|
libc_hidden_proto (__wcstol_internal)
|
|
libc_hidden_proto (__wcstoll_internal)
|
|
libc_hidden_proto (__wcstoul_internal)
|
|
libc_hidden_proto (__wcstoull_internal)
|
|
libc_hidden_proto (wcstof)
|
|
libc_hidden_proto (wcstod)
|
|
libc_hidden_proto (wcstold)
|
|
libc_hidden_proto (wcstol)
|
|
libc_hidden_proto (wcstoll)
|
|
libc_hidden_proto (wcstoul)
|
|
libc_hidden_proto (wcstoull)
|
|
|
|
libc_hidden_proto (__wcscasecmp_l)
|
|
libc_hidden_proto (__wcsncasecmp_l)
|
|
|
|
libc_hidden_proto (__wcscoll_l)
|
|
libc_hidden_proto (__wcsxfrm_l)
|
|
|
|
libc_hidden_proto (fputws_unlocked)
|
|
libc_hidden_proto (putwc_unlocked)
|
|
libc_hidden_proto (putwc)
|
|
|
|
libc_hidden_proto (vswscanf)
|
|
|
|
libc_hidden_proto (mbrtowc)
|
|
libc_hidden_proto (wcrtomb)
|
|
extern int __wcscmp (const wchar_t *__s1, const wchar_t *__s2)
|
|
__THROW __attribute_pure__;
|
|
libc_hidden_proto (__wcscmp)
|
|
libc_hidden_proto (wcsftime)
|
|
libc_hidden_proto (wcsspn)
|
|
libc_hidden_proto (wcschr)
|
|
/* The C++ overloading of wcschr means we have to repeat the type to
|
|
declare __wcschr instead of using typeof, to avoid errors in C++
|
|
tests; in addition, __THROW cannot be used with a function type
|
|
from typeof in C++. The same applies to __wmemchr and, as regards
|
|
__THROW, to __wcscmp and __wcscoll. */
|
|
extern wchar_t *__wcschr (const wchar_t *__wcs, wchar_t __wc)
|
|
__THROW __attribute_pure__;
|
|
libc_hidden_proto (__wcschr)
|
|
extern int __wcscoll (const wchar_t *__s1, const wchar_t *__s2) __THROW;
|
|
libc_hidden_proto (__wcscoll)
|
|
libc_hidden_proto (wcspbrk)
|
|
|
|
extern typeof (wmemset) __wmemset;
|
|
extern wchar_t *__wmemchr (const wchar_t *__s, wchar_t __c, size_t __n)
|
|
__THROW __attribute_pure__;
|
|
libc_hidden_proto (wmemchr)
|
|
libc_hidden_proto (__wmemchr)
|
|
libc_hidden_proto (wmemset)
|
|
libc_hidden_proto (__wmemset)
|
|
|
|
/* Now define the internal interfaces. */
|
|
extern int __wcscasecmp (const wchar_t *__s1, const wchar_t *__s2)
|
|
__attribute_pure__;
|
|
extern int __wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
|
|
size_t __n)
|
|
__attribute_pure__;
|
|
extern size_t __wcslen (const wchar_t *__s) __attribute_pure__;
|
|
extern size_t __wcsnlen (const wchar_t *__s, size_t __maxlen)
|
|
__attribute_pure__;
|
|
extern wchar_t *__wcscat (wchar_t *dest, const wchar_t *src);
|
|
extern wint_t __btowc (int __c);
|
|
extern int __mbsinit (const __mbstate_t *__ps);
|
|
extern size_t __mbrtowc (wchar_t *__restrict __pwc,
|
|
const char *__restrict __s, size_t __n,
|
|
__mbstate_t *__restrict __p);
|
|
libc_hidden_proto (__mbrtowc)
|
|
libc_hidden_proto (__mbrlen)
|
|
extern size_t __wcrtomb (char *__restrict __s, wchar_t __wc,
|
|
__mbstate_t *__restrict __ps);
|
|
extern size_t __mbsrtowcs (wchar_t *__restrict __dst,
|
|
const char **__restrict __src,
|
|
size_t __len, __mbstate_t *__restrict __ps);
|
|
extern size_t __wcsrtombs (char *__restrict __dst,
|
|
const wchar_t **__restrict __src,
|
|
size_t __len, __mbstate_t *__restrict __ps);
|
|
extern size_t __mbsnrtowcs (wchar_t *__restrict __dst,
|
|
const char **__restrict __src, size_t __nmc,
|
|
size_t __len, __mbstate_t *__restrict __ps);
|
|
extern size_t __wcsnrtombs (char *__restrict __dst,
|
|
const wchar_t **__restrict __src,
|
|
size_t __nwc, size_t __len,
|
|
__mbstate_t *__restrict __ps);
|
|
extern wchar_t *__wcsncpy (wchar_t *__restrict __dest,
|
|
const wchar_t *__restrict __src, size_t __n);
|
|
extern wchar_t *__wcpcpy (wchar_t *__dest, const wchar_t *__src);
|
|
extern wchar_t *__wcpncpy (wchar_t *__dest, const wchar_t *__src,
|
|
size_t __n);
|
|
extern wchar_t *__wmemcpy (wchar_t *__s1, const wchar_t *s2,
|
|
size_t __n);
|
|
extern wchar_t *__wmempcpy (wchar_t *__restrict __s1,
|
|
const wchar_t *__restrict __s2,
|
|
size_t __n);
|
|
extern wchar_t *__wmemmove (wchar_t *__s1, const wchar_t *__s2,
|
|
size_t __n);
|
|
extern wchar_t *__wcschrnul (const wchar_t *__s, wchar_t __wc)
|
|
__attribute_pure__;
|
|
|
|
extern int __vfwscanf (__FILE *__restrict __s,
|
|
const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg)
|
|
/* __attribute__ ((__format__ (__wscanf__, 2, 0)) */;
|
|
extern int __vswprintf (wchar_t *__restrict __s, size_t __n,
|
|
const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg)
|
|
/* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
|
|
extern int __fwprintf (__FILE *__restrict __s,
|
|
const wchar_t *__restrict __format, ...)
|
|
/* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
|
|
extern int __vfwprintf (__FILE *__restrict __s,
|
|
const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg)
|
|
/* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
|
|
#ifndef __cplusplus
|
|
extern int __vfwprintf_chk (FILE *__restrict __s, int __flag,
|
|
const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg)
|
|
/* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
|
|
extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
|
|
int __flag, size_t __s_len,
|
|
const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg)
|
|
/* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
|
|
libc_hidden_proto (__vfwprintf_chk)
|
|
libc_hidden_proto (__vswprintf_chk)
|
|
#endif
|
|
|
|
extern int __isoc99_fwscanf (__FILE *__restrict __stream,
|
|
const wchar_t *__restrict __format, ...);
|
|
extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...);
|
|
extern int __isoc99_swscanf (const wchar_t *__restrict __s,
|
|
const wchar_t *__restrict __format, ...)
|
|
__THROW;
|
|
extern int __isoc99_vfwscanf (__FILE *__restrict __s,
|
|
const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg);
|
|
extern int __isoc99_vwscanf (const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg);
|
|
extern int __isoc99_vswscanf (const wchar_t *__restrict __s,
|
|
const wchar_t *__restrict __format,
|
|
__gnuc_va_list __arg) __THROW;
|
|
libc_hidden_proto (__isoc99_vswscanf)
|
|
libc_hidden_proto (__isoc99_vfwscanf)
|
|
|
|
/* Internal functions. */
|
|
extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len,
|
|
mbstate_t *ps, __locale_t l) attribute_hidden;
|
|
|
|
/* Special version. We know that all uses of mbsinit inside the libc
|
|
have a non-NULL parameter. And certainly we can access the
|
|
internals of the data structure directly. */
|
|
# define mbsinit(state) ((state)->__count == 0)
|
|
# define __mbsinit(state) ((state)->__count == 0)
|
|
|
|
# endif
|
|
# endif
|
|
#endif
|
|
|
|
/* Undefine all __need_* constants in case we are included to get those
|
|
constants but the whole file was already read. */
|
|
#undef __need_mbstate_t
|
|
#undef __need_wint_t
|