#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. */
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>
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
-/* 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
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)
{
};
#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.
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. */
-#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 */
/* 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
#include <sys/types.h>
#ifdef __GNUC__
+# undef alloca
# define alloca __builtin_alloca
# define HAVE_ALLOCA 1
#else
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
#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;
-
- size_t offset, cnt;
-
- __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);
-
- 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);
+/* 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_old_b; /* Characteristics. */
+ extern __const __int32_t *__ctype_old_tolower; /* Case conversions. */
+ extern __const __int32_t *__ctype_old_toupper; /* Case conversions. */
+
+ extern const uint32_t *__ctype32_old_b;
+ extern const uint32_t *__ctype32_old_toupper;
+ extern const uint32_t *__ctype32_old_tolower;
+
+ __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
}
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. */
fgetpos (stream, &position);
else
/* We must make sure we reposition the stream the next call. */
- last_use = none;
+ last_use = nouse;
}
}
/* 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.
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
if (status == NSS_STATUS_SUCCESS)
fgetpos (stream, &position);
else
- last_use = none;
+ last_use = nouse;
}
}
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
#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;
/* 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;
}
#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
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)
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)
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.
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. */