--- old/usr/src/head/iso/ctype_iso.h	Fri Jul 11 11:42:52 2014
+++ new/usr/src/head/iso/ctype_iso.h	Fri Jul 11 11:42:52 2014
@@ -27,6 +27,9 @@
  * 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
@@ -43,8 +46,6 @@
 #ifndef _ISO_CTYPE_ISO_H
 #define	_ISO_CTYPE_ISO_H
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/feature_tests.h>
 
 #ifdef	__cplusplus
@@ -73,11 +74,24 @@
 #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);
@@ -89,11 +103,8 @@
 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);
@@ -103,96 +114,22 @@
 } /* 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) */
 
