Print this page
2964 need POSIX 2008 locale object support
Reviewed by: Robert Mustacchi <rm@joyent.com>

@@ -18,10 +18,11 @@
  *
  * CDDL HEADER END
  */
 
 /*
+ * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 /*      Copyright (c) 1988 AT&T */
 /*        All Rights Reserved   */

@@ -84,24 +85,34 @@
         defined(__XOPEN_OR_POSIX)
 extern void *memccpy(void *_RESTRICT_KYWD, const void *_RESTRICT_KYWD,
                 int, size_t);
 #endif
 
-#if defined(__EXTENSIONS__) || \
-        (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))
-        /* || defined(_XPG7) */
-extern int strcasecmp(const char *, const char *);
-extern int strncasecmp(const char *, const char *, size_t);
+#if !defined(_STRICT_SYMBOLS) || defined(_XPG7)
+
 extern char *stpcpy(char *_RESTRICT_KYWD, const char *_RESTRICT_KYWD);
 extern char *stpncpy(char *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, size_t);
 extern char *strndup(const char *, size_t);
 extern size_t strnlen(const char *, size_t);
 extern char *strsignal(int);
+
+#ifndef _LOCALE_T
+#define _LOCALE_T
+typedef struct locale *locale_t;
 #endif
 
-#if defined(__EXTENSIONS__) || \
-        (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))
+extern int strcoll_l(const char *, const char *, locale_t);
+extern size_t strxfrm_l(char *_RESTRICT_KYWD, const char *_RESTRICT_KYWD,
+    size_t, locale_t);
+extern int strcasecmp_l(const char *, const char *, locale_t);
+extern int strncasecmp_l(const char *, const char *, size_t, locale_t);
+
+#endif /* defined(_STRICT_SYMBOLS) || defined(_XPG7) */
+
+#if !defined(_STRICT_SYMBOLS)
+
+/* Note that some of these are also declared in strings.h for XPG4_2+ */
 extern int uucopy(const void *_RESTRICT_KYWD, void *_RESTRICT_KYWD, size_t);
 extern int uucopystr(const void *_RESTRICT_KYWD, void *_RESTRICT_KYWD, size_t);
 extern int ffs(int);
 extern int ffsl(long);
 extern int ffsll(long long);

@@ -113,10 +124,13 @@
 extern char *strnstr(const char *, const char *, size_t);
 extern size_t strlcpy(char *, const char *, size_t);
 extern size_t strlcat(char *, const char *, size_t);
 extern char *strsep(char **stringp, const char *delim);
 extern char *strchrnul(const char *, int);
+extern char *strcasestr_l(const char *, const char *, locale_t);
+extern int strcasecmp(const char *, const char *);
+extern int strncasecmp(const char *, const char *, size_t);
 #endif /* defined(__EXTENSIONS__)... */
 
 #if defined(__EXTENSIONS__) || \
         (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
         defined(_XPG4_2)

@@ -192,44 +206,49 @@
 #if defined(__EXTENSIONS__) || !defined(_STRICT_STDC) || \
         defined(__XOPEN_OR_POSIX)
 extern void *memccpy();
 #endif
 
-#if defined(__EXTENSIONS__) || \
-        (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))
-        /* || defined(_XPG7) */
+#if defined(_XPG7) || !defined(_STRICT_SYMBOLS)
 extern int strcasecmp();
 extern int strncasecmp();
+extern int strcasecmp_l();
+extern int strncasecmp_l();
 extern char *stpcpy();
 extern char *stpncpy();
 extern char *strndup();
 extern size_t strnlen();
 extern char *strsignal();
 #endif
 
-#if defined(__EXTENSIONS__) || \
-        (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))
+#if !defined(_STRICT_SYMBOLS)
 extern int uucopy();
 extern int uucopystr();
 extern int ffs();
 extern int ffsl();
 extern int ffsll();
 extern int fls();
 extern int flsl();
 extern int flsll();
 extern char *strcasestr();
+extern char *strcasestr_l();
 extern char *strnstr();
 extern size_t strlcpy();
 extern size_t strlcat();
 extern char *strsep();
 extern char *strchrnul();
-#endif /* defined(__EXTENSIONS__) ... */
+#endif /* _STRICT_SYMBOLS */
 
 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2)
 extern char *strdup();
 #endif
 
+#if defined(_XPG7) || !defined(_STRICT_SYMBOLS)
+extern size_t strcoll_l();
+extern size_t strxfrm_l();
+#endif
+
 #endif  /* __STDC__ */
 
 #ifdef  __cplusplus
 }
 #endif