• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // -*- C++ -*-
2 //===--------------------- support/ibm/xlocale.h -------------------===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10 
11 #ifndef _LIBCPP_SUPPORT_IBM_XLOCALE_H
12 #define _LIBCPP_SUPPORT_IBM_XLOCALE_H
13 #include <support/ibm/locale_mgmt_aix.h>
14 
15 #if defined(_AIX)
16 #include "cstdlib"
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #if !defined(_AIX71)
23 // AIX 7.1 and higher has these definitions.  Definitions and stubs
24 // are provied here as a temporary workaround on AIX 6.1.
25 static inline
isalnum_l(int c,locale_t locale)26 int isalnum_l(int c, locale_t locale)
27 {
28   return __xisalnum(locale, c);
29 }
30 static inline
isalpha_l(int c,locale_t locale)31 int isalpha_l(int c, locale_t locale)
32 {
33   return __xisalpha(locale, c);
34 }
35 static inline
isblank_l(int c,locale_t locale)36 int isblank_l(int c, locale_t locale)
37 {
38   return __xisblank(locale, c);
39 }
40 static inline
iscntrl_l(int c,locale_t locale)41 int iscntrl_l(int c, locale_t locale)
42 {
43   return __xiscntrl(locale, c);
44 }
45 static inline
isdigit_l(int c,locale_t locale)46 int isdigit_l(int c, locale_t locale)
47 {
48   return __xisdigit(locale, c);
49 }
50 static inline
isgraph_l(int c,locale_t locale)51 int isgraph_l(int c, locale_t locale)
52 {
53   return __xisgraph(locale, c);
54 }
55 static inline
islower_l(int c,locale_t locale)56 int islower_l(int c, locale_t locale)
57 {
58   return __xislower(locale, c);
59 }
60 static inline
isprint_l(int c,locale_t locale)61 int isprint_l(int c, locale_t locale)
62 {
63   return __xisprint(locale, c);
64 }
65 
66 static inline
ispunct_l(int c,locale_t locale)67 int ispunct_l(int c, locale_t locale)
68 {
69   return __xispunct(locale, c);
70 }
71 static inline
isspace_l(int c,locale_t locale)72 int isspace_l(int c, locale_t locale)
73 {
74   return __xisspace(locale, c);
75 }
76 static inline
isupper_l(int c,locale_t locale)77 int isupper_l(int c, locale_t locale)
78 {
79   return __xisupper(locale, c);
80 }
81 
82 static inline
isxdigit_l(int c,locale_t locale)83 int isxdigit_l(int c, locale_t locale)
84 {
85   return __xisxdigit(locale, c);
86 }
87 
88 static inline
iswalnum_l(wchar_t wc,locale_t locale)89 int iswalnum_l(wchar_t wc, locale_t locale)
90 {
91   return __xiswalnum(locale, wc);
92 }
93 
94 static inline
iswalpha_l(wchar_t wc,locale_t locale)95 int iswalpha_l(wchar_t wc, locale_t locale)
96 {
97   return __xiswalpha(locale, wc);
98 }
99 
100 static inline
iswblank_l(wchar_t wc,locale_t locale)101 int iswblank_l(wchar_t wc, locale_t locale)
102 {
103   return __xiswblank(locale, wc);
104 }
105 
106 static inline
iswcntrl_l(wchar_t wc,locale_t locale)107 int iswcntrl_l(wchar_t wc, locale_t locale)
108 {
109   return __xiswcntrl(locale, wc);
110 }
111 
112 static inline
iswdigit_l(wchar_t wc,locale_t locale)113 int iswdigit_l(wchar_t wc, locale_t locale)
114 {
115   return __xiswdigit(locale, wc);
116 }
117 
118 static inline
iswgraph_l(wchar_t wc,locale_t locale)119 int iswgraph_l(wchar_t wc, locale_t locale)
120 {
121   return __xiswgraph(locale, wc);
122 }
123 
124 static inline
iswlower_l(wchar_t wc,locale_t locale)125 int iswlower_l(wchar_t wc, locale_t locale)
126 {
127   return __xiswlower(locale, wc);
128 }
129 
130 static inline
iswprint_l(wchar_t wc,locale_t locale)131 int iswprint_l(wchar_t wc, locale_t locale)
132 {
133   return __xiswprint(locale, wc);
134 }
135 
136 static inline
iswpunct_l(wchar_t wc,locale_t locale)137 int iswpunct_l(wchar_t wc, locale_t locale)
138 {
139   return __xiswpunct(locale, wc);
140 }
141 
142 static inline
iswspace_l(wchar_t wc,locale_t locale)143 int iswspace_l(wchar_t wc, locale_t locale)
144 {
145   return __xiswspace(locale, wc);
146 }
147 
148 static inline
iswupper_l(wchar_t wc,locale_t locale)149 int iswupper_l(wchar_t wc, locale_t locale)
150 {
151   return __xiswupper(locale, wc);
152 }
153 
154 static inline
iswxdigit_l(wchar_t wc,locale_t locale)155 int iswxdigit_l(wchar_t wc, locale_t locale)
156 {
157   return __xiswxdigit(locale, wc);
158 }
159 
160 static inline
iswctype_l(wint_t wc,wctype_t desc,locale_t locale)161 int iswctype_l(wint_t wc, wctype_t desc, locale_t locale)
162 {
163   return __xiswctype(locale, wc, desc);
164 }
165 
166 static inline
toupper_l(int c,locale_t locale)167 int toupper_l(int c, locale_t locale)
168 {
169   return __xtoupper(locale, c);
170 }
171 static inline
tolower_l(int c,locale_t locale)172 int tolower_l(int c, locale_t locale)
173 {
174   return __xtolower(locale, c);
175 }
176 static inline
towupper_l(wint_t wc,locale_t locale)177 wint_t towupper_l(wint_t wc, locale_t locale)
178 {
179   return __xtowupper(locale, wc);
180 }
181 static inline
towlower_l(wint_t wc,locale_t locale)182 wint_t towlower_l(wint_t wc, locale_t locale)
183 {
184   return __xtowlower(locale, wc);
185 }
186 
187 static inline
strcoll_l(const char * __s1,const char * __s2,locale_t locale)188 int strcoll_l(const char *__s1, const char *__s2, locale_t locale)
189 {
190   return __xstrcoll(locale, __s1, __s2);
191 }
192 static inline
wcscoll_l(const wchar_t * __s1,const wchar_t * __s2,locale_t locale)193 int wcscoll_l(const wchar_t *__s1, const wchar_t *__s2, locale_t locale)
194 {
195   return __xwcscoll(locale, __s1, __s2);
196 }
197 static inline
strxfrm_l(char * __s1,const char * __s2,size_t __n,locale_t locale)198 size_t strxfrm_l(char *__s1, const char *__s2, size_t __n, locale_t locale)
199 {
200   return __xstrxfrm(locale, __s1, __s2, __n);
201 }
202 
203 static inline
wcsxfrm_l(wchar_t * __ws1,const wchar_t * __ws2,size_t __n,locale_t locale)204 size_t wcsxfrm_l(wchar_t *__ws1, const wchar_t *__ws2, size_t __n,
205     locale_t locale)
206 {
207   return __xwcsxfrm(locale, __ws1, __ws2, __n);
208 }
209 #endif // !defined(_AIX71)
210 
211 // strftime_l() is defined by POSIX. However, AIX 7.1 does not have it
212 // implemented yet.
213 static inline
strftime_l(char * __s,size_t __size,const char * __fmt,const struct tm * __tm,locale_t locale)214 size_t strftime_l(char *__s, size_t __size, const char *__fmt,
215                   const struct tm *__tm, locale_t locale) {
216   return __xstrftime(locale, __s, __size, __fmt, __tm);
217 }
218 
219 // The following are not POSIX routines.  These are quick-and-dirty hacks
220 // to make things pretend to work
221 static inline
strtoll_l(const char * __nptr,char ** __endptr,int __base,locale_t locale)222 long long strtoll_l(const char *__nptr, char **__endptr,
223     int __base, locale_t locale) {
224   return strtoll(__nptr, __endptr, __base);
225 }
226 static inline
strtol_l(const char * __nptr,char ** __endptr,int __base,locale_t locale)227 long strtol_l(const char *__nptr, char **__endptr,
228     int __base, locale_t locale) {
229   return strtol(__nptr, __endptr, __base);
230 }
231 static inline
strtold_l(const char * __nptr,char ** __endptr,locale_t locale)232 long double strtold_l(const char *__nptr, char **__endptr,
233     locale_t locale) {
234   return strtold(__nptr, __endptr);
235 }
236 static inline
strtoull_l(const char * __nptr,char ** __endptr,int __base,locale_t locale)237 unsigned long long strtoull_l(const char *__nptr, char **__endptr,
238     int __base, locale_t locale) {
239   return strtoull(__nptr, __endptr, __base);
240 }
241 static inline
strtoul_l(const char * __nptr,char ** __endptr,int __base,locale_t locale)242 unsigned long strtoul_l(const char *__nptr, char **__endptr,
243     int __base, locale_t locale) {
244   return strtoul(__nptr, __endptr, __base);
245 }
246 
247 static inline
vasprintf(char ** strp,const char * fmt,va_list ap)248 int vasprintf(char **strp, const char *fmt, va_list ap)
249 {
250   const size_t buff_size = 256;
251   int str_size;
252   if ((*strp = (char *)malloc(buff_size)) == NULL)
253   {
254     return -1;
255   }
256   if ((str_size = vsnprintf(*strp, buff_size, fmt,  ap)) >= buff_size)
257   {
258     if ((*strp = (char *)realloc(*strp, str_size + 1)) == NULL)
259     {
260       return -1;
261     }
262     str_size = vsnprintf(*strp, str_size + 1, fmt,  ap);
263   }
264   return str_size;
265 }
266 
267 #ifdef __cplusplus
268 }
269 #endif
270 #endif // defined(_AIX)
271 #endif // _LIBCPP_SUPPORT_IBM_XLOCALE_H
272