blob: 359508d9f8f0ba2dec965b9ba5929d36eacb4c5c [file] [log] [blame]
David Chisnall06af2bb2012-02-29 13:17:28 +00001////////////////////////////////////////////////////////////////////////////////
2// Minimal xlocale implementation for Solaris. This implements the subset of
3// the xlocale APIs that libc++ depends on.
4////////////////////////////////////////////////////////////////////////////////
5#ifndef __XLOCALE_H_INCLUDED
6#define __XLOCALE_H_INCLUDED
7
8#ifdef __cplusplus
9extern "C" {
10#endif
11
12
13typedef struct _LC_locale_t* locale_t;
14
15#define LC_COLLATE_MASK (1<<0)
16#define LC_CTYPE_MASK (1<<1)
17#define LC_MESSAGES_MASK (1<<2)
18#define LC_MONETARY_MASK (1<<3)
19#define LC_NUMERIC_MASK (1<<4)
20#define LC_TIME_MASK (1<<5)
21#define LC_ALL_MASK (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | \
22 LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK)
23
24#define LC_GLOBAL_LOCALE ((locale_t)-1)
25
26size_t __mb_cur_max(locale_t l);
27#define MB_CUR_MAX_L(l) __mb_cur_max(l)
28
29locale_t newlocale(int mask, const char * locale, locale_t base);
30void freelocale(locale_t loc);
31
32wint_t btowc_l(int __c, locale_t __l);
33
34int wctob_l(wint_t __c, locale_t __l);
35
36size_t wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l);
37
38size_t mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n,
39 mbstate_t *__ps, locale_t __l);
40
41int mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l);
42
43size_t mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l);
44
45struct lconv *localeconv_l(locale_t __l);
46
47size_t mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len,
48 mbstate_t *__ps, locale_t __l);
49
50int sprintf_l(char *__s, locale_t __l, const char *__format, ...);
51
52int snprintf_l(char *__s, size_t __n, locale_t __l, const char *__format, ...);
53
54int asprintf_l(char **__s, locale_t __l, const char *__format, ...);
55
56int sscanf_l(const char *__s, locale_t __l, const char *__format, ...);
57
58int isalnum_l(int,locale_t);
59int isalpha_l(int,locale_t);
60int isblank_l(int,locale_t);
61int iscntrl_l(int,locale_t);
62int isdigit_l(int,locale_t);
63int isgraph_l(int,locale_t);
64int islower_l(int,locale_t);
65int isprint_l(int,locale_t);
66int ispunct_l(int,locale_t);
67int isspace_l(int,locale_t);
68int isupper_l(int,locale_t);
69int isxdigit_l(int,locale_t);
70
71int iswalnum_l(wchar_t,locale_t);
72int iswalpha_l(wchar_t,locale_t);
73int iswblank_l(wchar_t,locale_t);
74int iswcntrl_l(wchar_t,locale_t);
75int iswdigit_l(wchar_t,locale_t);
76int iswgraph_l(wchar_t,locale_t);
77int iswlower_l(wchar_t,locale_t);
78int iswprint_l(wchar_t,locale_t);
79int iswpunct_l(wchar_t,locale_t);
80int iswspace_l(wchar_t,locale_t);
81int iswupper_l(wchar_t,locale_t);
82int iswxdigit_l(wchar_t,locale_t);
83
84int iswctype_l(wint_t, wctype_t, locale_t);
85
86int toupper_l(int __c, locale_t __l);
87int tolower_l(int __c, locale_t __l);
88wint_t towupper_l(wint_t __c, locale_t __l);
89wint_t towlower_l(wint_t __c, locale_t __l);
90
91
92int strcoll_l(const char *__s1, const char *__s2, locale_t __l);
93int wcscoll_l(const wchar_t *__s1, const wchar_t *__s2, locale_t __l);
94size_t strftime_l(char *__s, size_t __size, const char *__fmt, const struct tm
95 *__tm, locale_t __l);
96
97size_t strxfrm_l(char *__s1, const char *__s2, size_t __n, locale_t __l);
98
99size_t wcsxfrm_l(wchar_t *__ws1, const wchar_t *__ws2, size_t __n,
100 locale_t __l);
101
102
103
104size_t
105mbsnrtowcs_l(wchar_t * __restrict dst, const char ** __restrict src,
106 size_t nms, size_t len, mbstate_t * __restrict ps, locale_t loc);
107
108
109size_t
110wcsnrtombs_l(char * __restrict dst, const wchar_t ** __restrict src,
111 size_t nwc, size_t len, mbstate_t * __restrict ps, locale_t loc);
112
113locale_t __cloc(void);
114
115// FIXME: These are quick-and-dirty hacks to make things pretend to work
116static inline
117long long strtoll_l(const char *__nptr, char **__endptr,
118 int __base, locale_t __loc) {
119 return strtoll(__nptr, __endptr, __base);
120}
121static inline
122long strtol_l(const char *__nptr, char **__endptr,
123 int __base, locale_t __loc) {
124 return strtol(__nptr, __endptr, __base);
125}
126static inline
127long double strtold_l(const char *__nptr, char **__endptr,
128 locale_t __loc) {
129 return strtold(__nptr, __endptr);
130}
131static inline
132unsigned long long strtoull_l(const char *__nptr, char **__endptr,
133 int __base, locale_t __loc) {
134 return strtoull(__nptr, __endptr, __base);
135}
136static inline
137unsigned long strtoul_l(const char *__nptr, char **__endptr,
138 int __base, locale_t __loc) {
139 return strtoul(__nptr, __endptr, __base);
140}
141
142#ifdef __cplusplus
143}
144#endif
145
146#endif