Update.
* ctype/ctype.h: Undo the patch before the last one. Put back the macro definitions for the standard functions to access the classification and mapping arrays. * include/ctype.h: Partly revert last patch. Move the macro definitions for the exported functions back to the public header. #undef all the macros defined here before redefining. * ctype/ctype-info.c: Revert last patch. * locale/lc-ctype.c: Revert last patch.
This commit is contained in:
parent
fa1861d9fc
commit
d20fec5d65
@ -1,5 +1,14 @@
|
||||
2002-09-01 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* ctype/ctype.h: Undo the patch before the last one. Put back the
|
||||
macro definitions for the standard functions to access the
|
||||
classification and mapping arrays.
|
||||
* include/ctype.h: Partly revert last patch. Move the macro
|
||||
definitions for the exported functions back to the public header.
|
||||
#undef all the macros defined here before redefining.
|
||||
* ctype/ctype-info.c: Revert last patch.
|
||||
* locale/lc-ctype.c: Revert last patch.
|
||||
|
||||
* ctype/Makefile (routines): Add isctype.
|
||||
* ctype/Versions (libc): Export isctype and __isctype for GLIBC_2.3.
|
||||
* ctype/ctype.h: Add declaration of isctype.
|
||||
|
@ -16,9 +16,6 @@
|
||||
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>
|
||||
|
||||
@ -39,21 +36,36 @@ 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_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
|
||||
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);
|
||||
|
@ -62,6 +62,24 @@ 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. */
|
||||
|
||||
@ -144,10 +162,49 @@ __exctype (_tolower);
|
||||
__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,9 +1,9 @@
|
||||
#ifndef _CTYPE_H
|
||||
|
||||
# include <ctype/ctype.h>
|
||||
|
||||
extern int __isctype (int __c, int __mask);
|
||||
|
||||
# include <ctype/ctype.h>
|
||||
|
||||
# ifndef NOT_IN_libc
|
||||
|
||||
/* The optimized macros are not defined for users because they can't see
|
||||
@ -13,32 +13,25 @@ extern int __isctype (int __c, int __mask);
|
||||
NL_CURRENT_INDIRECT. */
|
||||
|
||||
# include "../locale/localeinfo.h"
|
||||
# define __isctype(c, type) \
|
||||
# ifndef __NO_CTYPE
|
||||
# undef __isctype
|
||||
# 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)
|
||||
|
||||
# undef tolower
|
||||
# define tolower(c) \
|
||||
__tobody (c, tolower, \
|
||||
(uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128, \
|
||||
(c))
|
||||
# undef _tolower
|
||||
# define _tolower(c) tolower (c)
|
||||
# undef toupper
|
||||
# define toupper(c) \
|
||||
__tobody (c, toupper, \
|
||||
(uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128, \
|
||||
(c))
|
||||
# undef _toupper
|
||||
# define _toupper(c) toupper (c)
|
||||
|
||||
# endif /* Not __NO_CTYPE. */
|
||||
|
@ -34,8 +34,7 @@ _NL_CURRENT_DEFINE (LC_CTYPE);
|
||||
void
|
||||
_nl_postload_ctype (void)
|
||||
{
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
|
||||
const struct locale_data *data = _NL_CURRENT_DATA (LC_CTYPE);
|
||||
|
||||
#define paste(a,b) paste1(a,b)
|
||||
#define paste1(a,b) a##b
|
||||
@ -43,30 +42,29 @@ _nl_postload_ctype (void)
|
||||
#define current(type,x,offset) \
|
||||
((const type *) _NL_CURRENT (LC_CTYPE, paste(_NL_CTYPE_,x)) + offset)
|
||||
|
||||
/* These are defined in ctype-info.c.
|
||||
The declarations here must match those in localeinfo.h.
|
||||
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 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. */
|
||||
size_t offset, cnt;
|
||||
|
||||
extern const uint32_t *__ctype32_old_b;
|
||||
extern const uint32_t *__ctype32_old_toupper;
|
||||
extern const uint32_t *__ctype32_old_tolower;
|
||||
__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);
|
||||
|
||||
__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
|
||||
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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user