summaryrefslogtreecommitdiff
path: root/wctype/wctype.h
diff options
context:
space:
mode:
Diffstat (limited to 'wctype/wctype.h')
-rw-r--r--wctype/wctype.h174
1 files changed, 100 insertions, 74 deletions
diff --git a/wctype/wctype.h b/wctype/wctype.h
index ffa4b25808..8ab8d7b793 100644
--- a/wctype/wctype.h
+++ b/wctype/wctype.h
@@ -22,51 +22,55 @@
*/
#ifndef _WCTYPE_H
-#define _WCTYPE_H 1
-#include <features.h>
-#include <bits/types.h>
+#ifndef __need_iswxxx
+# define _WCTYPE_H 1
-__BEGIN_DECLS
+# include <features.h>
+# include <bits/types.h>
/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
there. So define it ourselves if it remains undefined. */
-#define __need_wint_t
-#include <stddef.h>
-#ifndef _WINT_T
+# define __need_wint_t
+# include <stddef.h>
+# ifndef _WINT_T
/* Integral type unchanged by default argument promotions that can
hold any value corresponding to members of the extended character
set, as well as at least one value that does not correspond to any
member of the extended character set. */
-# define _WINT_T
+# define _WINT_T
typedef unsigned int wint_t;
+# endif
+
+/* Constant expression of type `wint_t' whose value does not correspond
+ to any member of the extended character set. */
+# ifndef WEOF
+# define WEOF (0xffffffffu)
+# endif
#endif
+#undef __need_iswxxx
-/* Scalar type that can hold values which represent locale-specific
- character mappings. */
-typedef __const unsigned int *wctrans_t;
+
+/* The following part is also used in the <wcsmbs.h> header when compiled
+ in the Unix98 compatibility mode. */
+#ifndef __iswxxx_defined
+# define __iswxxx_defined 1
/* Scalar type that can hold values which represent locale-specific
character classifications. */
typedef unsigned long int wctype_t;
-/* Constant expression of type `wint_t' whose value does not correspond
- to any member of the extended character set. */
-#ifndef WEOF
-# define WEOF (0xffffffffu)
-#endif
-
-#ifndef _ISbit
+# ifndef _ISbit
/* The characteristics are stored always in network byte order (big
endian). We define the bit value interpretations here dependent on the
machine's byte order. */
-# include <endian.h>
-# if __BYTE_ORDER == __BIG_ENDIAN
-# define _ISbit(bit) (1 << bit)
-# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
-# define _ISbit(bit) (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8))
-# endif
+# include <endian.h>
+# if __BYTE_ORDER == __BIG_ENDIAN
+# define _ISbit(bit) (1 << bit)
+# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+# define _ISbit(bit) (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8))
+# endif
enum
{
@@ -83,9 +87,11 @@ enum
_ISpunct = _ISbit (10), /* Punctuation. */
_ISalnum = _ISbit (11) /* Alphanumeric. */
};
-#endif /* Not _ISbit */
+# endif /* Not _ISbit */
+__BEGIN_DECLS
+
/*
* Wide-character classification functions: 7.15.2.1.
*/
@@ -157,54 +163,72 @@ extern int iswctype __P ((wint_t __wc, wctype_t __desc));
* Wide-character case-mapping functions: 7.15.3.1.
*/
+/* Scalar type that can hold values which represent locale-specific
+ character mappings. */
+typedef __const __int32_t *wctrans_t;
+
/* Converts an uppercase letter to the corresponding lowercase letter. */
extern wint_t towlower __P ((wint_t __wc));
/* Converts an lowercase letter to the corresponding uppercase letter. */
extern wint_t towupper __P ((wint_t __wc));
-/*
- * Extensible wide-character mapping functions: 7.15.3.2.
- */
-
-/* Construct value that describes a mapping between wide characters
- identified by the string argument PROPERTY. */
-extern wctrans_t wctrans __P ((__const char *__property));
-
/* Map the wide character WC using the mapping described by DESC. */
-extern wint_t towctrans __P ((wint_t __wc, wctrans_t __desc));
+extern wint_t __towctrans __P ((wint_t __wc, wctrans_t __desc));
+# ifndef __NO_WCTYPE
+# define iswalnum(wc) __iswctype ((wc), _ISalnum)
+# define iswalpha(wc) __iswctype ((wc), _ISalpha)
+# define iswcntrl(wc) __iswctype ((wc), _IScntrl)
+# define iswdigit(wc) __iswctype ((wc), _ISdigit)
+# define iswlower(wc) __iswctype ((wc), _ISlower)
+# define iswgraph(wc) __iswctype ((wc), _ISgraph)
+# define iswprint(wc) __iswctype ((wc), _ISprint)
+# define iswpunct(wc) __iswctype ((wc), _ISpunct)
+# define iswspace(wc) __iswctype ((wc), _ISspace)
+# define iswupper(wc) __iswctype ((wc), _ISupper)
+# define iswxdigit(wc) __iswctype ((wc), _ISxdigit)
+
+# ifdef __USE_GNU
+# define iswblank(wc) __iswctype ((wc), _ISblank)
+# endif
-#ifndef __NO_WCTYPE
-# define iswalnum(wc) __iswctype ((wc), _ISalnum)
-# define iswalpha(wc) __iswctype ((wc), _ISalpha)
-# define iswcntrl(wc) __iswctype ((wc), _IScntrl)
-# define iswdigit(wc) __iswctype ((wc), _ISdigit)
-# define iswlower(wc) __iswctype ((wc), _ISlower)
-# define iswgraph(wc) __iswctype ((wc), _ISgraph)
-# define iswprint(wc) __iswctype ((wc), _ISprint)
-# define iswpunct(wc) __iswctype ((wc), _ISpunct)
-# define iswspace(wc) __iswctype ((wc), _ISspace)
-# define iswupper(wc) __iswctype ((wc), _ISupper)
-# define iswxdigit(wc) __iswctype ((wc), _ISxdigit)
-
-# ifdef __USE_GNU
-# define iswblank(wc) __iswctype ((wc), _ISblank)
-# endif
/* Pointer to conversion tables. */
extern __const __int32_t *__ctype_tolower; /* Case conversions. */
extern __const __int32_t *__ctype_toupper; /* Case conversions. */
-# define towlower(wc) towctrans ((wc), __ctype_tolower)
-# define towupper(wc) towctrans ((wc), __ctype_toupper)
+# define towlower(wc) __towctrans ((wc), __ctype_tolower)
+# define towupper(wc) __towctrans ((wc), __ctype_toupper)
+
+# endif /* Not __NO_WCTYPE. */
+
+__END_DECLS
+
+#endif /* need iswxxx. */
+
-#endif /* Not __NO_WCTYPE. */
+/* The remaining definitions and declarations must not appear in the
+ <wcsmbs.h> header. */
+#ifdef _WCTYPE_H
-#ifdef __USE_GNU
+/*
+ * Extensible wide-character mapping functions: 7.15.3.2.
+ */
+
+__BEGIN_DECLS
+
+/* Construct value that describes a mapping between wide characters
+ identified by the string argument PROPERTY. */
+extern wctrans_t wctrans __P ((__const char *__property));
+
+/* Map the wide character WC using the mapping described by DESC. */
+extern wint_t towctrans __P ((wint_t __wc, wctrans_t __desc));
+
+# ifdef __USE_GNU
/* Declare the interface to extended locale model. */
-# include <xlocale.h>
+# include <xlocale.h>
/* Test for any wide character for which `iswalpha' or `iswdigit' is
true. */
@@ -282,30 +306,32 @@ extern wint_t __towctrans_l __P ((wint_t __wc, wctrans_t __desc,
__locale_t __locale));
-# ifndef __NO_WCTYPE
-# define __iswalnum_l(wc, loc) __iswctype_l ((wc), _ISalnum, (loc))
-# define __iswalpha_l(wc, loc) __iswctype_l ((wc), _ISalpha, (loc))
-# define __iswcntrl_l(wc, loc) __iswctype_l ((wc), _IScntrl, (loc))
-# define __iswdigit_l(wc, loc) __iswctype_l ((wc), _ISdigit, (loc))
-# define __iswlower_l(wc, loc) __iswctype_l ((wc), _ISlower, (loc))
-# define __iswgraph_l(wc, loc) __iswctype_l ((wc), _ISgraph, (loc))
-# define __iswprint_l(wc, loc) __iswctype_l ((wc), _ISprint, (loc))
-# define __iswpunct_l(wc, loc) __iswctype_l ((wc), _ISpunct, (loc))
-# define __iswspace_l(wc, loc) __iswctype_l ((wc), _ISspace, (loc))
-# define __iswupper_l(wc, loc) __iswctype_l ((wc), _ISupper, (loc))
-# define __iswxdigit_l(wc, loc) __iswctype_l ((wc), _ISxdigit, (loc))
-
-# define __iswblank_l(wc, loc) __iswctype_l ((wc), _ISblank, (loc))
-
-# define __towlower_l(wc, loc) __towctrans_l ((wc), (loc)->__ctype_tolower, \
+# ifndef __NO_WCTYPE
+# define __iswalnum_l(wc, loc) __iswctype_l ((wc), _ISalnum, (loc))
+# define __iswalpha_l(wc, loc) __iswctype_l ((wc), _ISalpha, (loc))
+# define __iswcntrl_l(wc, loc) __iswctype_l ((wc), _IScntrl, (loc))
+# define __iswdigit_l(wc, loc) __iswctype_l ((wc), _ISdigit, (loc))
+# define __iswlower_l(wc, loc) __iswctype_l ((wc), _ISlower, (loc))
+# define __iswgraph_l(wc, loc) __iswctype_l ((wc), _ISgraph, (loc))
+# define __iswprint_l(wc, loc) __iswctype_l ((wc), _ISprint, (loc))
+# define __iswpunct_l(wc, loc) __iswctype_l ((wc), _ISpunct, (loc))
+# define __iswspace_l(wc, loc) __iswctype_l ((wc), _ISspace, (loc))
+# define __iswupper_l(wc, loc) __iswctype_l ((wc), _ISupper, (loc))
+# define __iswxdigit_l(wc, loc) __iswctype_l ((wc), _ISxdigit, (loc))
+
+# define __iswblank_l(wc, loc) __iswctype_l ((wc), _ISblank, (loc))
+
+# define __towlower_l(wc, loc) __towctrans_l ((wc), (loc)->__ctype_tolower, \
(loc))
-# define __towupper_l(wc, loc) __towctrans_l ((wc), (loc)->__ctype_toupper, \
+# define __towupper_l(wc, loc) __towctrans_l ((wc), (loc)->__ctype_toupper, \
(loc))
-# endif /* Not __NO_WCTYPE. */
+# endif /* Not __NO_WCTYPE. */
-#endif /* Use GNU. */
+# endif /* Use GNU. */
__END_DECLS
+#endif /* __WCTYPE_H defined. */
+
#endif /* wctype.h */