mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 02:40:08 +00:00
* sysdeps/generic/libc-tls.c (__pthread_initialize_minimal): Pass
TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN instead of 0, 1. * include/getopt.h: Include <features.h> before <posix/getopt.h>. * locale/findlocale.c (_nl_remove_locale): Don't search in _nl_locale_file_list if DATA->alloc is ld_archive. Use _nl_unload_locale to do the rest of the work. * locale/loadarchive.c (_nl_load_locale_from_archive): Set usage_count of new structure to UNDELETABLE. * wctype/wctype.h (iswalnum, iswalpha, iswcntrl, iswdigit, iswlower, iswgraph, iswprint, iswpunct, iswspace, iswupper, iswxdigit, iswblank, towlower, towupper): Macros removed. * ctype/ctype.h (__tobody): Put parens around macro argument. (__isctype): Macro removed. (__ctype_b, __ctype_tolower, __ctype_toupper): Decls removed. (isalnum, isalpha, iscntrl, isdigit, islower, isgraph, isprint, ispunct, isspace, isupper, isxdigit, isblank, _tolower, _toupper, tolower, toupper): Macros and inlines removed. * include/ctype.h [! NOT_IN_libc] (isalnum, isalpha, iscntrl, isdigit, islower, isgraph, isprint, ispunct, isspace, isupper, isxdigit, isblank, _tolower, _toupper, tolower, toupper): Define here instead, using _NL_CURRENT. * ctype/ctype.c (__ctype_tolower, __ctype_toupper): Define as macros using _NL_CURRENT. * ctype/ctype-extn.c (__ctype_tolower, __ctype_toupper): Likewise. * ctype/ctype-info.c (__ctype_b, __ctype_tolower, __ctype_toupper): Renamed these to __ctype_old_*. Define old names only for SHLIB_COMPAT. (__ctype32_b, __ctype32_tolower, __ctype32_toupper): Likewise. (__ctype32_wctrans, __ctype32_wctrans, __ctype32_width): Removed. * locale/lc-ctype.c (_nl_postload_ctype): Use renamed variables, conditional on SHLIB_COMPAT. Don't set removed variables at all. * wctype/wcfuncs.c: Use _NL_CURRENT instead of those globals. * wcsmbs/wcwidth.h (internal_wcwidth): Likewise. * resolv/res_init.c [RESOLVSORT] (sort_mask): Renamed sort_mask_chars. (ISSORTMASK): Update use. * intl/localealias.c [__GNUC__]: #undef alloca before #define. * nss/nss_files/files-XXX.c (last_use): Rename `none' to `nouse'. (_nss_files_getENTNAME_r): Likewise. * nss/nss_files/files-alias.c (last_use, _nss_files_getaliasent_r): Likewise. * Makerules (all-nonlib): Renamed from all-tests. Include $(others) here too. * locale/Makefile (CPPFLAGS-locale, CPPFLAGS-localedef, CPPFLAGS-ld-ctype, CPPFLAGS-ld-time, CPPFLAGS-ld-numeric, CPPFLAGS-ld-monetary, CPPFLAGS-ld-collate, CPPFLAGS-ld-identification, CPPFLAGS-charmap, CPPFLAGS-locarchive, CPPFLAGS-linereader, CPPFLAGS-charmap-dir): Variables removed. Instead, catch all the program modules via cppflags-iterator.mk. * sunrpc/Makefile (CPPFLAGS-rpc_main): Variable removed. Instead, catch all rpcgen-objs via cppflags-iterator.mk. * posix/tst-getconf.sh: If no third arg, work with static linking.
This commit is contained in:
parent
0ba454fccb
commit
0f283ffc5e
59
ChangeLog
59
ChangeLog
@ -1,5 +1,64 @@
|
||||
2002-09-01 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* sysdeps/generic/libc-tls.c (__pthread_initialize_minimal): Pass
|
||||
TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN instead of 0, 1.
|
||||
|
||||
* include/getopt.h: Include <features.h> before <posix/getopt.h>.
|
||||
|
||||
* locale/findlocale.c (_nl_remove_locale): Don't search in
|
||||
_nl_locale_file_list if DATA->alloc is ld_archive.
|
||||
Use _nl_unload_locale to do the rest of the work.
|
||||
|
||||
* locale/loadarchive.c (_nl_load_locale_from_archive): Set usage_count
|
||||
of new structure to UNDELETABLE.
|
||||
|
||||
* wctype/wctype.h (iswalnum, iswalpha, iswcntrl, iswdigit, iswlower,
|
||||
iswgraph, iswprint, iswpunct, iswspace, iswupper, iswxdigit, iswblank,
|
||||
towlower, towupper): Macros removed.
|
||||
* ctype/ctype.h (__tobody): Put parens around macro argument.
|
||||
(__isctype): Macro removed.
|
||||
(__ctype_b, __ctype_tolower, __ctype_toupper): Decls removed.
|
||||
(isalnum, isalpha, iscntrl, isdigit, islower, isgraph, isprint,
|
||||
ispunct, isspace, isupper, isxdigit, isblank, _tolower, _toupper,
|
||||
tolower, toupper): Macros and inlines removed.
|
||||
* include/ctype.h [! NOT_IN_libc]
|
||||
(isalnum, isalpha, iscntrl, isdigit, islower, isgraph, isprint,
|
||||
ispunct, isspace, isupper, isxdigit, isblank, _tolower, _toupper,
|
||||
tolower, toupper): Define here instead, using _NL_CURRENT.
|
||||
* ctype/ctype.c (__ctype_tolower, __ctype_toupper): Define as macros
|
||||
using _NL_CURRENT.
|
||||
* ctype/ctype-extn.c (__ctype_tolower, __ctype_toupper): Likewise.
|
||||
* ctype/ctype-info.c (__ctype_b, __ctype_tolower, __ctype_toupper):
|
||||
Renamed these to __ctype_old_*. Define old names only for SHLIB_COMPAT.
|
||||
(__ctype32_b, __ctype32_tolower, __ctype32_toupper): Likewise.
|
||||
(__ctype32_wctrans, __ctype32_wctrans, __ctype32_width): Removed.
|
||||
* locale/lc-ctype.c (_nl_postload_ctype): Use renamed variables,
|
||||
conditional on SHLIB_COMPAT. Don't set removed variables at all.
|
||||
* wctype/wcfuncs.c: Use _NL_CURRENT instead of those globals.
|
||||
* wcsmbs/wcwidth.h (internal_wcwidth): Likewise.
|
||||
* resolv/res_init.c [RESOLVSORT] (sort_mask): Renamed sort_mask_chars.
|
||||
(ISSORTMASK): Update use.
|
||||
* intl/localealias.c [__GNUC__]: #undef alloca before #define.
|
||||
* nss/nss_files/files-XXX.c (last_use): Rename `none' to `nouse'.
|
||||
(_nss_files_getENTNAME_r): Likewise.
|
||||
* nss/nss_files/files-alias.c (last_use, _nss_files_getaliasent_r):
|
||||
Likewise.
|
||||
|
||||
* Makerules (all-nonlib): Renamed from all-tests.
|
||||
Include $(others) here too.
|
||||
* locale/Makefile (CPPFLAGS-locale, CPPFLAGS-localedef,
|
||||
CPPFLAGS-ld-ctype, CPPFLAGS-ld-time, CPPFLAGS-ld-numeric,
|
||||
CPPFLAGS-ld-monetary, CPPFLAGS-ld-collate, CPPFLAGS-ld-identification,
|
||||
CPPFLAGS-charmap, CPPFLAGS-locarchive, CPPFLAGS-linereader,
|
||||
CPPFLAGS-charmap-dir): Variables removed. Instead, catch all
|
||||
the program modules via cppflags-iterator.mk.
|
||||
* sunrpc/Makefile (CPPFLAGS-rpc_main): Variable removed.
|
||||
Instead, catch all rpcgen-objs via cppflags-iterator.mk.
|
||||
|
||||
2002-08-31 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* posix/tst-getconf.sh: If no third arg, work with static linking.
|
||||
|
||||
* locale/categories.def (LC_TIME): No more _nl_postload_time.
|
||||
|
||||
* locale/setlocale.c (_nl_category_postload): Use weak refs only under
|
||||
|
@ -1040,11 +1040,11 @@ check: tests
|
||||
.PHONY: xcheck
|
||||
xcheck: xtests
|
||||
|
||||
all-tests = $(strip $(tests) $(xtests) $(test-srcs))
|
||||
ifneq (,$(all-tests))
|
||||
cpp-srcs-left = $(all-tests:=.c)
|
||||
all-nonlib = $(strip $(tests) $(xtests) $(test-srcs) $(others))
|
||||
ifneq (,$(all-nonlib))
|
||||
cpp-srcs-left = $(all-nonlib:=.c)
|
||||
lib := tests
|
||||
include $(patsubst %,$(..)cppflags-iterator.mk,$(all-tests))
|
||||
include $(patsubst %,$(..)cppflags-iterator.mk,$(all-nonlib))
|
||||
endif
|
||||
|
||||
.PHONY: TAGS
|
||||
|
@ -19,6 +19,11 @@
|
||||
#define __NO_CTYPE
|
||||
#include <ctype.h>
|
||||
|
||||
#define __ctype_tolower \
|
||||
((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128)
|
||||
#define __ctype_toupper \
|
||||
((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128)
|
||||
|
||||
/* Real function versions of the non-ANSI ctype functions. isblank is
|
||||
now in ISO C99 but we leave it here. */
|
||||
|
||||
|
@ -16,6 +16,9 @@
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
|
||||
|
||||
#include <ctype.h>
|
||||
#include <locale/localeinfo.h>
|
||||
|
||||
@ -36,36 +39,21 @@ extern const char _nl_C_LC_CTYPE_class_blank[] attribute_hidden;
|
||||
extern const char _nl_C_LC_CTYPE_class_cntrl[] attribute_hidden;
|
||||
extern const char _nl_C_LC_CTYPE_class_punct[] attribute_hidden;
|
||||
extern const char _nl_C_LC_CTYPE_class_alnum[] attribute_hidden;
|
||||
extern const char _nl_C_LC_CTYPE_map_toupper[] attribute_hidden;
|
||||
extern const char _nl_C_LC_CTYPE_map_tolower[] attribute_hidden;
|
||||
extern const char _nl_C_LC_CTYPE_width[] attribute_hidden;
|
||||
|
||||
#define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o)
|
||||
|
||||
const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
|
||||
const __uint32_t *__ctype32_b = b (__uint32_t, class32, 0);
|
||||
const __int32_t *__ctype_tolower = b (__int32_t, tolower, 128);
|
||||
const __int32_t *__ctype_toupper = b (__int32_t, toupper, 128);
|
||||
const __uint32_t *__ctype32_tolower = b (__uint32_t, tolower, 128);
|
||||
const __uint32_t *__ctype32_toupper = b (__uint32_t, toupper, 128);
|
||||
const char *__ctype32_wctype[12] attribute_hidden =
|
||||
{
|
||||
b(char, class_upper, 32),
|
||||
b(char, class_lower, 32),
|
||||
b(char, class_alpha, 32),
|
||||
b(char, class_digit, 32),
|
||||
b(char, class_xdigit, 32),
|
||||
b(char, class_space, 32),
|
||||
b(char, class_print, 32),
|
||||
b(char, class_graph, 32),
|
||||
b(char, class_blank, 32),
|
||||
b(char, class_cntrl, 32),
|
||||
b(char, class_punct, 32),
|
||||
b(char, class_alnum, 32)
|
||||
};
|
||||
const char *__ctype32_wctrans[2] attribute_hidden =
|
||||
{
|
||||
b(char, map_toupper, 0),
|
||||
b(char, map_tolower, 0)
|
||||
};
|
||||
const char *__ctype32_width attribute_hidden = b (char, width, 0);
|
||||
const unsigned short int *__ctype_old_b = b (unsigned short int, class, 128);
|
||||
const __uint32_t *__ctype32_old_b = b (__uint32_t, class32, 0);
|
||||
const __int32_t *__ctype_old_tolower = b (__int32_t, tolower, 128);
|
||||
const __int32_t *__ctype_old_toupper = b (__int32_t, toupper, 128);
|
||||
const __uint32_t *__ctype32_old_tolower = b (__uint32_t, tolower, 128);
|
||||
const __uint32_t *__ctype32_old_toupper = b (__uint32_t, toupper, 128);
|
||||
|
||||
compat_symbol (libc, __ctype_old_b, __ctype_b, GLIBC_2_0);
|
||||
compat_symbol (libc, __ctype_old_tolower, __ctype_tolower, GLIBC_2_0);
|
||||
compat_symbol (libc, __ctype_old_toupper, __ctype_toupper, GLIBC_2_0);
|
||||
compat_symbol (libc, __ctype32_old_b, __ctype32_b, GLIBC_2_0);
|
||||
compat_symbol (libc, __ctype32_old_tolower, __ctype32_tolower, GLIBC_2_2);
|
||||
compat_symbol (libc, __ctype32_old_toupper, __ctype32_toupper, GLIBC_2_2);
|
||||
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1997, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991,92,97,99,2002 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
|
||||
@ -36,6 +36,11 @@ func (isspace, _ISspace)
|
||||
func (isupper, _ISupper)
|
||||
func (isxdigit, _ISxdigit)
|
||||
|
||||
#define __ctype_tolower \
|
||||
((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128)
|
||||
#define __ctype_toupper \
|
||||
((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128)
|
||||
|
||||
int
|
||||
tolower (int c)
|
||||
{
|
||||
|
@ -62,31 +62,13 @@ enum
|
||||
};
|
||||
#endif /* ! _ISbit */
|
||||
|
||||
/* These are defined in ctype-info.c.
|
||||
The declarations here must match those in localeinfo.h.
|
||||
|
||||
These point into arrays of 384, so they can be indexed by any `unsigned
|
||||
char' value [0,255]; by EOF (-1); or by any `signed char' value
|
||||
[-128,-1). ISO C requires that the ctype functions work for `unsigned
|
||||
char' values and for EOF; we also support negative `signed char' values
|
||||
for broken old programs. The case conversion arrays are of `int's
|
||||
rather than `unsigned char's because tolower (EOF) must be EOF, which
|
||||
doesn't fit into an `unsigned char'. But today more important is that
|
||||
the arrays are also used for multi-byte character sets. */
|
||||
extern __const unsigned short int *__ctype_b; /* Characteristics. */
|
||||
extern __const __int32_t *__ctype_tolower; /* Case conversions. */
|
||||
extern __const __int32_t *__ctype_toupper; /* Case conversions. */
|
||||
|
||||
#define __isctype(c, type) \
|
||||
(__ctype_b[(int) (c)] & (unsigned short int) type)
|
||||
|
||||
#define __isascii(c) (((c) & ~0x7f) == 0) /* If C is a 7 bit value. */
|
||||
#define __toascii(c) ((c) & 0x7f) /* Mask off high bits. */
|
||||
|
||||
#define __exctype(name) extern int name (int) __THROW
|
||||
|
||||
|
||||
__BEGIN_NAMESPACE_STD
|
||||
|
||||
/* The following names are all functions:
|
||||
int isCHARACTERISTIC(int c);
|
||||
which return nonzero iff C has CHARACTERISTIC.
|
||||
@ -147,59 +129,20 @@ __exctype (_tolower);
|
||||
if (__builtin_constant_p (c)) \
|
||||
{ \
|
||||
int __c = (c); \
|
||||
__res = __c < -128 || __c > 255 ? __c : a[__c]; \
|
||||
__res = __c < -128 || __c > 255 ? __c : (a)[__c]; \
|
||||
} \
|
||||
else \
|
||||
__res = f args; \
|
||||
} \
|
||||
else \
|
||||
__res = a[(int) (c)]; \
|
||||
__res = (a)[(int) (c)]; \
|
||||
__res; }))
|
||||
|
||||
#if !defined __NO_CTYPE && !defined __cplusplus
|
||||
# define isalnum(c) __isctype((c), _ISalnum)
|
||||
# define isalpha(c) __isctype((c), _ISalpha)
|
||||
# define iscntrl(c) __isctype((c), _IScntrl)
|
||||
# define isdigit(c) __isctype((c), _ISdigit)
|
||||
# define islower(c) __isctype((c), _ISlower)
|
||||
# define isgraph(c) __isctype((c), _ISgraph)
|
||||
# define isprint(c) __isctype((c), _ISprint)
|
||||
# define ispunct(c) __isctype((c), _ISpunct)
|
||||
# define isspace(c) __isctype((c), _ISspace)
|
||||
# define isupper(c) __isctype((c), _ISupper)
|
||||
# define isxdigit(c) __isctype((c), _ISxdigit)
|
||||
|
||||
# ifdef __USE_ISOC99
|
||||
# define isblank(c) __isctype((c), _ISblank)
|
||||
# endif
|
||||
|
||||
# ifdef __USE_EXTERN_INLINES
|
||||
extern __inline int
|
||||
tolower (int __c) __THROW
|
||||
{
|
||||
return __c >= -128 && __c < 256 ? __ctype_tolower[__c] : __c;
|
||||
}
|
||||
|
||||
extern __inline int
|
||||
toupper (int __c) __THROW
|
||||
{
|
||||
return __c >= -128 && __c < 256 ? __ctype_toupper[__c] : __c;
|
||||
}
|
||||
# endif
|
||||
|
||||
# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
|
||||
# define tolower(c) __tobody (c, tolower, __ctype_tolower, (c))
|
||||
# define toupper(c) __tobody (c, toupper, __ctype_toupper, (c))
|
||||
# endif /* Optimizing gcc */
|
||||
|
||||
# if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
|
||||
# define isascii(c) __isascii (c)
|
||||
# define toascii(c) __toascii (c)
|
||||
|
||||
# define _tolower(c) ((int) __ctype_tolower[(int) (c)])
|
||||
# define _toupper(c) ((int) __ctype_toupper[(int) (c)])
|
||||
# endif
|
||||
|
||||
#endif /* Not __NO_CTYPE. */
|
||||
|
||||
|
||||
|
@ -1 +1,45 @@
|
||||
#include <ctype/ctype.h>
|
||||
#ifndef _CTYPE_H
|
||||
|
||||
# include <ctype/ctype.h>
|
||||
|
||||
# ifndef NOT_IN_libc
|
||||
|
||||
/* The optimized macros are not defined for users because they can't see
|
||||
the thread-local locale state. For inside libc, define them using the
|
||||
_NL_CURRENT accessors. We don't use _NL_CURRENT_LOCALE->__ctype_b here
|
||||
because we want to cause a link-time ref to _nl_current_LC_CTYPE under
|
||||
NL_CURRENT_INDIRECT. */
|
||||
|
||||
# include "../locale/localeinfo.h"
|
||||
# define __isctype(c, type) \
|
||||
(((uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128) \
|
||||
[(int) (c)] & (uint16_t) type)
|
||||
# ifndef __NO_CTYPE
|
||||
# define isalnum(c) __isctype((c), _ISalnum)
|
||||
# define isalpha(c) __isctype((c), _ISalpha)
|
||||
# define iscntrl(c) __isctype((c), _IScntrl)
|
||||
# define isdigit(c) __isctype((c), _ISdigit)
|
||||
# define islower(c) __isctype((c), _ISlower)
|
||||
# define isgraph(c) __isctype((c), _ISgraph)
|
||||
# define isprint(c) __isctype((c), _ISprint)
|
||||
# define ispunct(c) __isctype((c), _ISpunct)
|
||||
# define isspace(c) __isctype((c), _ISspace)
|
||||
# define isupper(c) __isctype((c), _ISupper)
|
||||
# define isxdigit(c) __isctype((c), _ISxdigit)
|
||||
# define isblank(c) __isctype((c), _ISblank)
|
||||
|
||||
# define tolower(c) \
|
||||
__tobody (c, tolower, \
|
||||
(uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128, \
|
||||
(c))
|
||||
# define _tolower(c) tolower (c)
|
||||
# define toupper(c) \
|
||||
__tobody (c, toupper, \
|
||||
(uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128, \
|
||||
(c))
|
||||
# define _toupper(c) toupper (c)
|
||||
|
||||
# endif /* Not __NO_CTYPE. */
|
||||
# endif /* _LIBC_REENTRANT. */
|
||||
|
||||
#endif /* ctype.h */
|
||||
|
@ -1,5 +1,6 @@
|
||||
#ifndef _GETOPT_H
|
||||
|
||||
#include <features.h> /* Get __GNU_LIBRARY__ defined now. */
|
||||
#include <posix/getopt.h>
|
||||
|
||||
# ifdef _GETOPT_H
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Handle aliases for locale names.
|
||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-1999, 2000,01,02 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
|
||||
@ -36,6 +36,7 @@
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
# undef alloca
|
||||
# define alloca __builtin_alloca
|
||||
# define HAVE_ALLOCA 1
|
||||
#else
|
||||
|
@ -101,18 +101,11 @@ CFLAGS-charmap.c = -Wno-write-strings -Wno-char-subscripts
|
||||
CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts
|
||||
CFLAGS-charmap-dir.c = -Wno-write-strings
|
||||
|
||||
CPPFLAGS-locale = -DNOT_IN_libc
|
||||
CPPFLAGS-localedef = -DNOT_IN_libc
|
||||
CPPFLAGS-ld-ctype = -DNOT_IN_libc
|
||||
CPPFLAGS-ld-time = -DNOT_IN_libc
|
||||
CPPFLAGS-ld-numeric = -DNOT_IN_libc
|
||||
CPPFLAGS-ld-monetary = -DNOT_IN_libc
|
||||
CPPFLAGS-ld-collate = -DNOT_IN_libc
|
||||
CPPFLAGS-ld-identification = -DNOT_IN_libc
|
||||
CPPFLAGS-charmap = -DNOT_IN_libc
|
||||
CPPFLAGS-locarchive = -DNOT_IN_libc
|
||||
CPPFLAGS-linereader = -DNOT_IN_libc
|
||||
CPPFLAGS-charmap-dir = -DNOT_IN_libc
|
||||
# This makes sure -DNOT_IN_libc is passed for all these modules.
|
||||
cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \
|
||||
$(locale-modules) $(lib-modules))
|
||||
lib := locale_programs
|
||||
include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
|
||||
|
||||
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
|
||||
# This ensures they will load libc.so for needed symbols if loaded by
|
||||
|
@ -270,40 +270,23 @@ _nl_remove_locale (int locale, struct locale_data *data)
|
||||
{
|
||||
if (--data->usage_count == 0)
|
||||
{
|
||||
/* First search the entry in the list of loaded files. */
|
||||
struct loaded_l10nfile *ptr = _nl_locale_file_list[locale];
|
||||
|
||||
/* Search for the entry. It must be in the list. Otherwise it
|
||||
is a bug and we crash badly. */
|
||||
while ((struct locale_data *) ptr->data != data)
|
||||
ptr = ptr->next;
|
||||
|
||||
/* Mark the data as not available anymore. So when the data has
|
||||
to be used again it is reloaded. */
|
||||
ptr->decided = 0;
|
||||
ptr->data = NULL;
|
||||
|
||||
/* Free the name. */
|
||||
free ((char *) data->name);
|
||||
|
||||
#ifdef _POSIX_MAPPED_FILES
|
||||
/* Really delete the data. First delete the real data. */
|
||||
if (__builtin_expect (data->alloc == ld_mapped, 1))
|
||||
if (data->alloc != ld_archive)
|
||||
{
|
||||
/* Try to unmap the area. If this fails we mark the area as
|
||||
permanent. */
|
||||
if (__munmap ((caddr_t) data->filedata, data->filesize) != 0)
|
||||
{
|
||||
data->usage_count = UNDELETABLE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* _POSIX_MAPPED_FILES */
|
||||
/* The memory was malloced. */
|
||||
free ((void *) data->filedata);
|
||||
/* First search the entry in the list of loaded files. */
|
||||
struct loaded_l10nfile *ptr = _nl_locale_file_list[locale];
|
||||
|
||||
/* Now free the structure itself. */
|
||||
free (data);
|
||||
/* Search for the entry. It must be in the list. Otherwise it
|
||||
is a bug and we crash badly. */
|
||||
while ((struct locale_data *) ptr->data != data)
|
||||
ptr = ptr->next;
|
||||
|
||||
/* Mark the data as not available anymore. So when the data has
|
||||
to be used again it is reloaded. */
|
||||
ptr->decided = 0;
|
||||
ptr->data = NULL;
|
||||
}
|
||||
|
||||
/* This does the real work. */
|
||||
_nl_unload_locale (data);
|
||||
}
|
||||
}
|
||||
|
@ -34,7 +34,8 @@ _NL_CURRENT_DEFINE (LC_CTYPE);
|
||||
void
|
||||
_nl_postload_ctype (void)
|
||||
{
|
||||
const struct locale_data *data = _NL_CURRENT_DATA (LC_CTYPE);
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
|
||||
|
||||
#define paste(a,b) paste1(a,b)
|
||||
#define paste1(a,b) a##b
|
||||
@ -42,29 +43,30 @@ _nl_postload_ctype (void)
|
||||
#define current(type,x,offset) \
|
||||
((const type *) _NL_CURRENT (LC_CTYPE, paste(_NL_CTYPE_,x)) + offset)
|
||||
|
||||
extern const uint32_t *__ctype32_b;
|
||||
extern const uint32_t *__ctype32_toupper;
|
||||
extern const uint32_t *__ctype32_tolower;
|
||||
extern const char *__ctype32_wctype[12] attribute_hidden;
|
||||
extern const char *__ctype32_wctrans[2] attribute_hidden;
|
||||
extern const char *__ctype32_width attribute_hidden;
|
||||
/* These are defined in ctype-info.c.
|
||||
The declarations here must match those in localeinfo.h.
|
||||
|
||||
size_t offset, cnt;
|
||||
These point into arrays of 384, so they can be indexed by any `unsigned
|
||||
char' value [0,255]; by EOF (-1); or by any `signed char' value
|
||||
[-128,-1). ISO C requires that the ctype functions work for `unsigned
|
||||
char' values and for EOF; we also support negative `signed char' values
|
||||
for broken old programs. The case conversion arrays are of `int's
|
||||
rather than `unsigned char's because tolower (EOF) must be EOF, which
|
||||
doesn't fit into an `unsigned char'. But today more important is that
|
||||
the arrays are also used for multi-byte character sets. */
|
||||
extern __const unsigned short int *__ctype_old_b; /* Characteristics. */
|
||||
extern __const __int32_t *__ctype_old_tolower; /* Case conversions. */
|
||||
extern __const __int32_t *__ctype_old_toupper; /* Case conversions. */
|
||||
|
||||
__ctype_b = current (uint16_t, CLASS, 128);
|
||||
__ctype_toupper = current (uint32_t, TOUPPER, 128);
|
||||
__ctype_tolower = current (uint32_t, TOLOWER, 128);
|
||||
__ctype32_b = current (uint32_t, CLASS32, 0);
|
||||
__ctype32_toupper = current (uint32_t, TOUPPER32, 0);
|
||||
__ctype32_tolower = current (uint32_t, TOLOWER32, 0);
|
||||
extern const uint32_t *__ctype32_old_b;
|
||||
extern const uint32_t *__ctype32_old_toupper;
|
||||
extern const uint32_t *__ctype32_old_tolower;
|
||||
|
||||
offset = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_CLASS_OFFSET);
|
||||
for (cnt = 0; cnt < 12; cnt++)
|
||||
__ctype32_wctype[cnt] = data->values[offset + cnt].string;
|
||||
|
||||
offset = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_OFFSET);
|
||||
for (cnt = 0; cnt < 2; cnt++)
|
||||
__ctype32_wctrans[cnt] = data->values[offset + cnt].string;
|
||||
|
||||
__ctype32_width = current (char, WIDTH, 0);
|
||||
__ctype_old_b = current (uint16_t, CLASS, 128);
|
||||
__ctype_old_toupper = current (uint32_t, TOUPPER, 128);
|
||||
__ctype_old_tolower = current (uint32_t, TOLOWER, 128);
|
||||
__ctype32_old_b = current (uint32_t, CLASS32, 0);
|
||||
__ctype32_old_toupper = current (uint32_t, TOUPPER32, 0);
|
||||
__ctype32_old_tolower = current (uint32_t, TOLOWER32, 0);
|
||||
#endif
|
||||
}
|
||||
|
@ -477,6 +477,15 @@ _nl_load_locale_from_archive (int category, const char **namep)
|
||||
/* _nl_intern_locale_data leaves us these fields to initialize. */
|
||||
lia->data[cnt]->alloc = ld_archive;
|
||||
lia->data[cnt]->name = lia->name;
|
||||
|
||||
/* We do this instead of bumping the count each time we return
|
||||
this data because the mappings stay around forever anyway
|
||||
and we might as well hold on to a little more memory and not
|
||||
have to rebuild it on the next lookup of the same thing.
|
||||
If we were to maintain the usage_count normally and let the
|
||||
structures be freed, we would have to remove the elements
|
||||
from archloaded too. */
|
||||
lia->data[cnt]->usage_count = UNDELETABLE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2002-09-01 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* tst-ctype.c (main): Use nl_langinfo instead of __ctype_b global.
|
||||
|
||||
2002-08-28 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* tst-xlocale1.c (main): Remove __ from function names.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2000,02 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.org>, 2000.
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
|
||||
#include <ctype.h>
|
||||
#include <locale.h>
|
||||
#include <langinfo.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@ -72,12 +73,15 @@ main (void)
|
||||
char *resline = NULL;
|
||||
size_t reslinelen = 0;
|
||||
int n;
|
||||
const unsigned short int *__ctype_b;
|
||||
|
||||
setlocale (LC_ALL, "");
|
||||
|
||||
printf ("Testing the ctype data of the `%s' locale\n",
|
||||
setlocale (LC_CTYPE, NULL));
|
||||
|
||||
__ctype_b = ((const unsigned short *) nl_langinfo (_NL_CTYPE_CLASS)) + 128;
|
||||
|
||||
#if 0
|
||||
/* Just for debugging. */
|
||||
|
||||
|
@ -63,7 +63,7 @@ __libc_lock_define_initialized (static, lock)
|
||||
|
||||
static FILE *stream;
|
||||
static fpos_t position;
|
||||
static enum { none, getent, getby } last_use;
|
||||
static enum { nouse, getent, getby } last_use;
|
||||
static int keep_stream;
|
||||
|
||||
/* Open database file if not already opened. */
|
||||
@ -265,7 +265,7 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
|
||||
fgetpos (stream, &position);
|
||||
else
|
||||
/* We must make sure we reposition the stream the next call. */
|
||||
last_use = none;
|
||||
last_use = nouse;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Mail alias file parser in nss_files module.
|
||||
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996,97,98,99,2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
@ -36,7 +36,7 @@ __libc_lock_define_initialized (static, lock)
|
||||
|
||||
static FILE *stream;
|
||||
static fpos_t position;
|
||||
static enum { none, getent, getby } last_use;
|
||||
static enum { nouse, getent, getby } last_use;
|
||||
|
||||
|
||||
static enum nss_status
|
||||
@ -408,7 +408,7 @@ _nss_files_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen,
|
||||
if (status == NSS_STATUS_SUCCESS)
|
||||
fgetpos (stream, &position);
|
||||
else
|
||||
last_use = none;
|
||||
last_use = nouse;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,18 @@
|
||||
|
||||
common_objpfx=$1; shift
|
||||
elf_objpfx=$1; shift
|
||||
rtld_installed_name=$1; shift
|
||||
if [ $# -eq 0 ]; then
|
||||
# Static case.
|
||||
runit() {
|
||||
"$@"
|
||||
}
|
||||
else
|
||||
rtld_installed_name=$1; shift
|
||||
runit() {
|
||||
${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} "$@"
|
||||
}
|
||||
fi
|
||||
|
||||
logfile=$common_objpfx/posix/tst-getconf.out
|
||||
|
||||
# Since we use `sort' we must make sure to use the same locale everywhere.
|
||||
@ -15,8 +26,7 @@ rm -f $logfile
|
||||
result=0
|
||||
while read name; do
|
||||
echo -n "getconf $name: " >> $logfile
|
||||
${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} \
|
||||
${common_objpfx}posix/getconf "$name" 2>> $logfile >> $logfile
|
||||
runit ${common_objpfx}posix/getconf "$name" 2>> $logfile >> $logfile
|
||||
if test $? -ne 0; then
|
||||
echo "*** $name FAILED" >> $logfile
|
||||
result=1
|
||||
@ -194,8 +204,7 @@ EOF
|
||||
|
||||
while read name; do
|
||||
echo -n "getconf $name /: " >> $logfile
|
||||
${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} \
|
||||
${common_objpfx}posix/getconf "$name" / 2>> $logfile >> $logfile
|
||||
runit ${common_objpfx}posix/getconf "$name" / 2>> $logfile >> $logfile
|
||||
if test $? -ne 0; then
|
||||
echo "*** $name FAILED" >> $logfile
|
||||
result=1
|
||||
|
@ -95,8 +95,8 @@ static void res_setoptions (res_state, const char *, const char *)
|
||||
internal_function;
|
||||
|
||||
#ifdef RESOLVSORT
|
||||
static const char sort_mask[] = "/&";
|
||||
#define ISSORTMASK(ch) (strchr(sort_mask, ch) != NULL)
|
||||
static const char sort_mask_chars[] = "/&";
|
||||
#define ISSORTMASK(ch) (strchr(sort_mask_chars, ch) != NULL)
|
||||
static u_int32_t net_mask __P((struct in_addr));
|
||||
#endif
|
||||
|
||||
|
@ -122,7 +122,6 @@ ifeq (yes,$(have_doors))
|
||||
CPPFLAGS-key_call.c += -DHAVE_DOORS=1
|
||||
endif
|
||||
CPPFLAGS += -D_RPC_THREAD_SAFE_
|
||||
CPPFLAGS-rpc_main += -DNOT_IN_libc
|
||||
|
||||
include ../Rules
|
||||
|
||||
@ -131,6 +130,11 @@ $(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs)) \
|
||||
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||
$(+link)
|
||||
|
||||
# This makes sure -DNOT_IN_libc is passed for all these modules.
|
||||
cpp-srcs-left := $(rpcgen-objs:.o=.c)
|
||||
lib := rpcgen
|
||||
include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
|
||||
|
||||
# Tell rpcgen where to find the C preprocessor.
|
||||
rpcgen-cmd = CPP='$(CC) -E -x c-header' $(built-program-cmd) -Y ../scripts
|
||||
|
||||
|
@ -176,6 +176,6 @@ void
|
||||
__attribute__ ((weak))
|
||||
__pthread_initialize_minimal (void)
|
||||
{
|
||||
__libc_setup_tls (0, 1);
|
||||
__libc_setup_tls (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN);
|
||||
}
|
||||
#endif
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
#include "../wctype/wchar-lookup.h"
|
||||
#include "../locale/localeinfo.h"
|
||||
|
||||
/* Table containing width information. */
|
||||
extern const char *__ctype32_width attribute_hidden;
|
||||
@ -33,7 +34,7 @@ internal_wcwidth (wchar_t wc)
|
||||
/* The tables have been prepared in such a way that
|
||||
1. wc == L'\0' yields res = 0,
|
||||
2. !iswprint (wc) implies res = '\xff'. */
|
||||
res = wcwidth_table_lookup (__ctype32_width, wc);
|
||||
res = wcwidth_table_lookup (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_WIDTH), wc);
|
||||
|
||||
return res == (unsigned char) '\xff' ? -1 : (int) res;
|
||||
}
|
||||
|
@ -21,19 +21,17 @@
|
||||
|
||||
#include "wchar-lookup.h"
|
||||
|
||||
/* These are not exported. */
|
||||
extern const char *__ctype32_wctype[12] attribute_hidden;
|
||||
extern const char *__ctype32_wctrans[2] attribute_hidden;
|
||||
|
||||
/* Provide real-function versions of all the wctype macros. */
|
||||
|
||||
#define func(name, type) \
|
||||
extern int __##name (wint_t __wc); \
|
||||
int \
|
||||
__##name (wint_t wc) \
|
||||
{ \
|
||||
return wctype_table_lookup (__ctype32_wctype[type], wc); \
|
||||
} \
|
||||
#define func(name, type) \
|
||||
extern int __##name (wint_t __wc); \
|
||||
int \
|
||||
__##name (wint_t 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 (__##name, name)
|
||||
|
||||
#undef iswalnum
|
||||
@ -71,7 +69,9 @@ wint_t
|
||||
towlower (wc)
|
||||
wint_t wc;
|
||||
{
|
||||
return wctrans_table_lookup (__ctype32_wctrans[__TOW_tolower], 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)
|
||||
|
||||
@ -80,6 +80,8 @@ wint_t
|
||||
towupper (wc)
|
||||
wint_t wc;
|
||||
{
|
||||
return wctrans_table_lookup (__ctype32_wctrans[__TOW_toupper], 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)
|
||||
|
@ -190,64 +190,6 @@ extern wctype_t wctype (__const char *__property) __THROW;
|
||||
extern int iswctype (wint_t __wc, wctype_t __desc) __THROW;
|
||||
__END_NAMESPACE_C99
|
||||
|
||||
#if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
|
||||
/* The tables are always organized in a way which allows direct access
|
||||
for single byte characters. */
|
||||
extern unsigned int *__ctype32_b;
|
||||
|
||||
# define iswalnum(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwalnum) : iswalnum (wc)))
|
||||
# define iswalpha(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwalpha) : iswalpha (wc)))
|
||||
# define iswcntrl(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwcntrl) : iswcntrl (wc)))
|
||||
# define iswdigit(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwdigit) : iswdigit (wc)))
|
||||
# define iswlower(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwlower) : iswlower (wc)))
|
||||
# define iswgraph(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwgraph) : iswgraph (wc)))
|
||||
# define iswprint(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwprint) : iswprint (wc)))
|
||||
# define iswpunct(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwpunct) : iswpunct (wc)))
|
||||
# define iswspace(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwspace) : iswspace (wc)))
|
||||
# define iswupper(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwupper) : iswupper (wc)))
|
||||
# define iswxdigit(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwxdigit) : iswxdigit (wc)))
|
||||
|
||||
# ifdef __USE_ISOC99
|
||||
# define iswblank(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwblank) : iswblank (wc)))
|
||||
# endif
|
||||
|
||||
#endif /* gcc && optimizing */
|
||||
|
||||
/*
|
||||
* Wide-character case-mapping functions: 7.15.3.1.
|
||||
@ -270,24 +212,6 @@ extern wint_t towlower (wint_t __wc) __THROW;
|
||||
extern wint_t towupper (wint_t __wc) __THROW;
|
||||
__END_NAMESPACE_C99
|
||||
|
||||
#if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
|
||||
/* The tables are always organized in a way which allows direct access
|
||||
for single byte characters. */
|
||||
extern const wint_t *__ctype32_tolower;
|
||||
extern const wint_t *__ctype32_toupper;
|
||||
|
||||
# define towlower(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (wint_t) __ctype32_tolower[(wint_t) (wc)] : towlower (wc)))
|
||||
|
||||
# define towupper(wc) \
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (wint_t) __ctype32_toupper[(wint_t) (wc)] : towupper (wc)))
|
||||
|
||||
#endif /* gcc && optimizing */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* need iswxxx. */
|
||||
|
Loading…
Reference in New Issue
Block a user