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

@@ -22,15 +22,24 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
+/*
+ * Copyright 2013 Garrett D'Amore <garrett@damore.org>
+ *
+ * Portions of this file developed by Garrett D'Amore are licensed
+ * under the terms of the Common Development and Distribution License (CDDL)
+ * version 1.0 only.  The use of subsequent versions of the License are
+ * is specifically prohibited unless those terms are not in conflict with
+ * version 1.0 of the License.  You can find this license on-line at
+ * http://www.illumos.org/license/CDDL
+ */
+
 #ifndef _LOCALE_H
 #define _LOCALE_H
 
-#pragma ident   "%Z%%M% %I%     %E% SMI"
-
 #include <iso/locale_iso.h>
 
 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
         defined(__EXTENSIONS__)
 #include <libintl.h>

@@ -54,10 +63,46 @@
 
 #define _ValidCategory(c) \
         (((int)(c) >= LC_CTYPE) && ((int)(c) <= _LastCategory) || \
         ((int)c == LC_ALL))
 
+
+#if defined(_XPG7) || !defined(_STRICT_SYMBOLS)
+
+/*
+ * These were added in POSIX 2008 as part of the newlocale() specification.
+ */
+#define LC_CTYPE_MASK           (1 << LC_CTYPE)
+#define LC_NUMERIC_MASK         (1 << LC_NUMERIC)
+#define LC_TIME_MASK            (1 << LC_TIME)
+#define LC_COLLATE_MASK         (1 << LC_COLLATE)
+#define LC_MONETARY_MASK        (1 << LC_MONETARY)
+#define LC_MESSAGES_MASK        (1 << LC_MESSAGES)
+#define LC_ALL_MASK             (0x3f)
+
+#ifndef _LOCALE_T
+#define _LOCALE_T
+typedef struct locale *locale_t;
+#endif
+
+#if     defined(__STDC__)
+extern locale_t duplocale(locale_t);
+extern void     freelocale(locale_t);
+extern locale_t newlocale(int, const char *, locale_t);
+extern locale_t uselocale(locale_t);
+#else   /* __STDC__ */
+extern locale_t duplocale();
+extern void     freelocale();
+extern locale_t newlocale();
+extern locale_t uselocale();
+#endif  /* __STDC__ */
+
+#define LC_GLOBAL_LOCALE        (__global_locale())
+extern locale_t                 __global_locale(void);
+
+#endif  /* defined(_XPG7) || !defined(_STRICT_SYMBOLS) */
+
 #ifdef  __cplusplus
 }
 #endif
 
 #endif  /* _LOCALE_H */