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