1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 ////////////////////////////////////////////////////////////////////////////////
11 // Minimal xlocale implementation for Solaris.  This implements the subset of
12 // the xlocale APIs that libc++ depends on.
13 ////////////////////////////////////////////////////////////////////////////////
14 #ifndef __XLOCALE_H_INCLUDED
15 #define __XLOCALE_H_INCLUDED
16 
17 #include <stdlib.h>
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 
24 int snprintf_l(char *__s, size_t __n, locale_t __l, const char *__format, ...);
25 int asprintf_l(char **__s, locale_t __l, const char *__format, ...);
26 
27 int sscanf_l(const char *__s, locale_t __l, const char *__format, ...);
28 
29 int toupper_l(int __c, locale_t __l);
30 int tolower_l(int __c, locale_t __l);
31 
32 struct lconv *localeconv(void);
33 struct lconv *localeconv_l(locale_t __l);
34 
35 // FIXME: These are quick-and-dirty hacks to make things pretend to work
36 static inline
strtoll_l(const char * __nptr,char ** __endptr,int __base,locale_t __loc)37 long long strtoll_l(const char *__nptr, char **__endptr,
38     int __base, locale_t __loc) {
39   return strtoll(__nptr, __endptr, __base);
40 }
41 static inline
strtol_l(const char * __nptr,char ** __endptr,int __base,locale_t __loc)42 long strtol_l(const char *__nptr, char **__endptr,
43     int __base, locale_t __loc) {
44   return strtol(__nptr, __endptr, __base);
45 }
46 static inline
strtoull_l(const char * __nptr,char ** __endptr,int __base,locale_t __loc)47 unsigned long long strtoull_l(const char *__nptr, char **__endptr,
48     int __base, locale_t __loc) {
49   return strtoull(__nptr, __endptr, __base);
50 }
51 static inline
strtoul_l(const char * __nptr,char ** __endptr,int __base,locale_t __loc)52 unsigned long strtoul_l(const char *__nptr, char **__endptr,
53     int __base, locale_t __loc) {
54   return strtoul(__nptr, __endptr, __base);
55 }
56 static inline
strtof_l(const char * __nptr,char ** __endptr,locale_t __loc)57 float strtof_l(const char *__nptr, char **__endptr,
58     locale_t __loc) {
59   return strtof(__nptr, __endptr);
60 }
61 static inline
strtod_l(const char * __nptr,char ** __endptr,locale_t __loc)62 double strtod_l(const char *__nptr, char **__endptr,
63     locale_t __loc) {
64   return strtod(__nptr, __endptr);
65 }
66 static inline
strtold_l(const char * __nptr,char ** __endptr,locale_t __loc)67 long double strtold_l(const char *__nptr, char **__endptr,
68     locale_t __loc) {
69   return strtold(__nptr, __endptr);
70 }
71 
72 
73 #ifdef __cplusplus
74 }
75 #endif
76 
77 #endif
78