Print this page
2964 need POSIX 2008 locale object support
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Approved by: TBD
@@ -25,10 +25,13 @@
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+/*
+ * Copyright 2013 Garrett D'Amore <garrett@damore.org>
+ */
/*
* An application should not include this header directly. Instead it
* should be included only through the inclusion of other Sun headers.
*
@@ -41,12 +44,10 @@
*/
#ifndef _ISO_CTYPE_ISO_H
#define _ISO_CTYPE_ISO_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/feature_tests.h>
#ifdef __cplusplus
extern "C" {
#endif
@@ -71,15 +72,28 @@
#define _ISGRAPH 0x00002000
#define _ISALPHA 0x00004000
#define _ISPRINT 0x00008000
#define _ISALNUM (_ISALPHA | _ISDIGIT)
+extern unsigned char __ctype[];
+extern unsigned int *__ctype_mask;
+extern int *__trans_upper;
+extern int *__trans_lower;
#if defined(__STDC__)
-#if __cplusplus < 199711L /* Use inline functions instead for ANSI C++ */
+#if __cplusplus >= 199711L
+namespace std {
+#endif
+/*
+ * These used to be macros, which while more efficient, precludes operation
+ * with thread specific locales. The old macros will still work, but new
+ * code compiles to use functions. This is specifically permitted by the
+ * various standards. Only _tolower and _toupper were required to be
+ * delivered in macro form.
+ */
extern int isalnum(int);
extern int isalpha(int);
extern int iscntrl(int);
extern int isdigit(int);
extern int isgraph(int);
@@ -87,114 +101,37 @@
extern int isprint(int);
extern int ispunct(int);
extern int isspace(int);
extern int isupper(int);
extern int isxdigit(int);
-
-#endif /* __cplusplus < 199711L */
-
-#if __cplusplus >= 199711L
-namespace std {
+#if defined(_XPG6) || defined(_STDC_C99) || !defined(_STRICT_SYMBOLS)
+extern int isblank(int);
#endif
extern int tolower(int);
extern int toupper(int);
#if __cplusplus >= 199711L
} /* end of namespace std */
#endif
-extern unsigned char __ctype[];
-extern unsigned int *__ctype_mask;
-extern int *__trans_upper;
-extern int *__trans_lower;
-
-#if !defined(__lint)
-
-#if __cplusplus >= 199711L
-namespace std {
-
-#if defined(__XPG4_CHAR_CLASS__) || defined(_XPG4)
-
-inline int isalpha(int c) { return (__ctype_mask[c] & _ISALPHA); }
-inline int isupper(int c) { return (__ctype_mask[c] & _ISUPPER); }
-inline int islower(int c) { return (__ctype_mask[c] & _ISLOWER); }
-inline int isdigit(int c) { return (__ctype_mask[c] & _ISDIGIT); }
-inline int isxdigit(int c) { return (__ctype_mask[c] & _ISXDIGIT); }
-inline int isalnum(int c) { return (__ctype_mask[c] & _ISALNUM); }
-inline int isspace(int c) { return (__ctype_mask[c] & _ISSPACE); }
-inline int ispunct(int c) { return (__ctype_mask[c] & _ISPUNCT); }
-inline int isprint(int c) { return (__ctype_mask[c] & _ISPRINT); }
-inline int isgraph(int c) { return (__ctype_mask[c] & _ISGRAPH); }
-inline int iscntrl(int c) { return (__ctype_mask[c] & _ISCNTRL); }
-#else
-inline int isalpha(int c) { return ((__ctype + 1)[c] & (_U | _L)); }
-inline int isupper(int c) { return ((__ctype + 1)[c] & _U); }
-inline int islower(int c) { return ((__ctype + 1)[c] & _L); }
-inline int isdigit(int c) { return ((__ctype + 1)[c] & _N); }
-inline int isxdigit(int c) { return ((__ctype + 1)[c] & _X); }
-inline int isalnum(int c) { return ((__ctype + 1)[c] & (_U | _L | _N)); }
-inline int isspace(int c) { return ((__ctype + 1)[c] & _S); }
-inline int ispunct(int c) { return ((__ctype + 1)[c] & _P); }
-inline int isprint(int c) {
- return ((__ctype + 1)[c] & (_P | _U | _L | _N | _B)); }
-inline int isgraph(int c) { return ((__ctype + 1)[c] & (_P | _U | _L | _N)); }
-inline int iscntrl(int c) { return ((__ctype + 1)[c] & _C); }
-#endif /* defined(__XPG4_CHAR_CLASS__) || defined(_XPG4) */
-
-} /* end of namespace std */
-
-#else /* __cplusplus >= 199711L */
-
-#if defined(__XPG4_CHAR_CLASS__) || defined(_XPG4)
-#define isalpha(c) (__ctype_mask[(int)(c)] & _ISALPHA)
-#define isupper(c) (__ctype_mask[(int)(c)] & _ISUPPER)
-#define islower(c) (__ctype_mask[(int)(c)] & _ISLOWER)
-#define isdigit(c) (__ctype_mask[(int)(c)] & _ISDIGIT)
-#define isxdigit(c) (__ctype_mask[(int)(c)] & _ISXDIGIT)
-#define isalnum(c) (__ctype_mask[(int)(c)] & _ISALNUM)
-#define isspace(c) (__ctype_mask[(int)(c)] & _ISSPACE)
-#define ispunct(c) (__ctype_mask[(int)(c)] & _ISPUNCT)
-#define isprint(c) (__ctype_mask[(int)(c)] & _ISPRINT)
-#define isgraph(c) (__ctype_mask[(int)(c)] & _ISGRAPH)
-#define iscntrl(c) (__ctype_mask[(int)(c)] & _ISCNTRL)
-#else
-#define isalpha(c) ((__ctype + 1)[(int)(c)] & (_U | _L))
-#define isupper(c) ((__ctype + 1)[(int)(c)] & _U)
-#define islower(c) ((__ctype + 1)[(int)(c)] & _L)
-#define isdigit(c) ((__ctype + 1)[(int)(c)] & _N)
-#define isxdigit(c) ((__ctype + 1)[(int)(c)] & _X)
-#define isalnum(c) ((__ctype + 1)[(int)(c)] & (_U | _L | _N))
-#define isspace(c) ((__ctype + 1)[(int)(c)] & _S)
-#define ispunct(c) ((__ctype + 1)[(int)(c)] & _P)
-#define isprint(c) ((__ctype + 1)[(int)(c)] & (_P | _U | _L | _N | _B))
-#define isgraph(c) ((__ctype + 1)[(int)(c)] & (_P | _U | _L | _N))
-#define iscntrl(c) ((__ctype + 1)[(int)(c)] & _C)
-
-#endif /* defined(__XPG4_CHAR_CLASS__) || defined(_XPG4) */
-
-#endif /* __cplusplus >= 199711L */
-
-#endif /* !defined(__lint) */
-
#else /* defined(__STDC__) */
-extern unsigned char _ctype[];
-
#if !defined(__lint)
-#define isalpha(c) ((_ctype + 1)[(int)(c)] & (_U | _L))
-#define isupper(c) ((_ctype + 1)[(int)(c)] & _U)
-#define islower(c) ((_ctype + 1)[(int)(c)] & _L)
-#define isdigit(c) ((_ctype + 1)[(int)(c)] & _N)
-#define isxdigit(c) ((_ctype + 1)[(int)(c)] & _X)
-#define isalnum(c) ((_ctype + 1)[(int)(c)] & (_U | _L | _N))
-#define isspace(c) ((_ctype + 1)[(int)(c)] & _S)
-#define ispunct(c) ((_ctype + 1)[(int)(c)] & _P)
-#define isprint(c) ((_ctype + 1)[(int)(c)] & (_P | _U | _L | _N | _B))
-#define isgraph(c) ((_ctype + 1)[(int)(c)] & (_P | _U | _L | _N))
-#define iscntrl(c) ((_ctype + 1)[(int)(c)] & _C)
+extern int isalpha();
+extern int isupper();
+extern int islower();
+extern int isdigit();
+extern int isxdigit();
+extern int isalnum();
+extern int isspace();
+extern int ispunct();
+extern int isprint();
+extern int isgraph();
+extern int iscntrl();
+extern int isblank();
#endif /* !defined(__lint) */
#endif /* defined(__STDC__) */