mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-29 05:51:10 +00:00
9dd6b7799a
regcomp brings in references to various wctype functions that aren't in all the standards including regcomp. This patch fixes this in the usual way by using the __* versions of these functions (which already exist, but some didn't have libc_hidden_proto / libc_hidden_def before). Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). (Other wide character function references from the regex code mean that this patch by itself doesn't fix any XFAILed linknamespace test failures; further patches will be needed for that.) [BZ #18495] * wctype/wcfuncs.c (__iswalnum): Use libc_hidden_def. (__iswlower): Likewise. * include/wctype.h (__iswalnum): Declare. Use libc_hidden_proto. (__iswlower): Likewise. * posix/regcomp.c (re_compile_fastmap_iter): Call __towlower instead of towlower. * posix/regex_internal.c (build_wcs_upper_buffer): Call __iswlower instead of iswlower. Call __towupper instead of towupper. * posix/regex_internal.h (IS_WIDE_WORD_CHAR): Call __iswalnum instead of iswalnum.
97 lines
2.8 KiB
C
97 lines
2.8 KiB
C
/* Copyright (C) 1996-2015 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 <ctype.h>
|
|
#include <wctype.h>
|
|
#include <locale/localeinfo.h>
|
|
|
|
#include "wchar-lookup.h"
|
|
|
|
/* Provide real-function versions of all the wctype macros. */
|
|
|
|
#define func(name, type) \
|
|
extern int __isw##name (wint_t __wc); \
|
|
int \
|
|
__isw##name (wint_t wc) \
|
|
{ \
|
|
if (isascii (wc)) \
|
|
return is##name ((int) wc); \
|
|
size_t i = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_CLASS_OFFSET) + type; \
|
|
const char *desc = _NL_CURRENT (LC_CTYPE, i); \
|
|
return wctype_table_lookup (desc, wc); \
|
|
} \
|
|
weak_alias (__isw##name, isw##name)
|
|
|
|
#undef iswalnum
|
|
func (alnum, __ISwalnum)
|
|
libc_hidden_def (__iswalnum)
|
|
libc_hidden_weak (iswalnum)
|
|
#undef iswalpha
|
|
func (alpha, __ISwalpha)
|
|
libc_hidden_weak (iswalpha)
|
|
#undef iswblank
|
|
func (blank, __ISwblank)
|
|
#undef iswcntrl
|
|
func (cntrl, __ISwcntrl)
|
|
#undef iswdigit
|
|
func (digit, __ISwdigit)
|
|
libc_hidden_weak (iswdigit)
|
|
#undef iswlower
|
|
func (lower, __ISwlower)
|
|
libc_hidden_def (__iswlower)
|
|
libc_hidden_weak (iswlower)
|
|
#undef iswgraph
|
|
func (graph, __ISwgraph)
|
|
#undef iswprint
|
|
func (print, __ISwprint)
|
|
#undef iswpunct
|
|
func (punct, __ISwpunct)
|
|
#undef iswspace
|
|
func (space, __ISwspace)
|
|
libc_hidden_weak (iswspace)
|
|
#undef iswupper
|
|
func (upper, __ISwupper)
|
|
#undef iswxdigit
|
|
func (xdigit, __ISwxdigit)
|
|
libc_hidden_weak (iswxdigit)
|
|
|
|
#undef towlower
|
|
wint_t
|
|
__towlower (wc)
|
|
wint_t wc;
|
|
{
|
|
size_t i = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_OFFSET) + __TOW_tolower;
|
|
const char *desc = _NL_CURRENT (LC_CTYPE, i);
|
|
return wctrans_table_lookup (desc, wc);
|
|
}
|
|
libc_hidden_def (__towlower)
|
|
weak_alias (__towlower, towlower)
|
|
libc_hidden_weak (towlower)
|
|
|
|
#undef towupper
|
|
wint_t
|
|
__towupper (wc)
|
|
wint_t wc;
|
|
{
|
|
size_t i = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_OFFSET) + __TOW_toupper;
|
|
const char *desc = _NL_CURRENT (LC_CTYPE, i);
|
|
return wctrans_table_lookup (desc, wc);
|
|
}
|
|
libc_hidden_def (__towupper)
|
|
weak_alias (__towupper, towupper)
|
|
libc_hidden_weak (towupper)
|