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,34 ****
--- 25,37 ----
/*
* 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,52 ****
*/
#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
--- 44,53 ----
*** 71,85 ****
#define _ISGRAPH 0x00002000
#define _ISALPHA 0x00004000
#define _ISPRINT 0x00008000
#define _ISALNUM (_ISALPHA | _ISDIGIT)
#if defined(__STDC__)
! #if __cplusplus < 199711L /* Use inline functions instead for ANSI C++ */
extern int isalnum(int);
extern int isalpha(int);
extern int iscntrl(int);
extern int isdigit(int);
extern int isgraph(int);
--- 72,99 ----
#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
! 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,200 ****
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 {
#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)
#endif /* !defined(__lint) */
#endif /* defined(__STDC__) */
--- 101,137 ----
extern int isprint(int);
extern int ispunct(int);
extern int isspace(int);
extern int isupper(int);
extern int isxdigit(int);
! #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
#else /* defined(__STDC__) */
#if !defined(__lint)
! 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__) */