5 * This material is provided "as is", with absolutely no warranty expressed
6 * or implied. Any use is at your own risk.
8 * Permission to use or copy this software for any purpose is hereby granted
9 * without fee, provided the above notices are retained on all copies.
10 * Permission to modify the code and to distribute modified code is granted,
11 * provided the above notices are retained, and a notice that the code was
12 * modified is included with the above copyright notice.
16 #ifndef _STLP_INTERNAL_CWCHAR
17 #define _STLP_INTERNAL_CWCHAR
19 #if defined (_STLP_WCE_EVC3)
20 # ifndef _STLP_INTERNAL_MBSTATE_T
21 # include <stl/_mbstate_t.h>
24 # if defined (__GNUC__)
25 # if defined (_STLP_HAS_INCLUDE_NEXT)
26 # include_next <cstddef>
28 # include _STLP_NATIVE_CPP_C_HEADER(cstddef)
32 # if !defined (_STLP_NO_CWCHAR) && defined (_STLP_USE_NEW_C_HEADERS)
33 # if defined (_STLP_HAS_INCLUDE_NEXT)
34 # include_next <cwchar>
36 # include _STLP_NATIVE_CPP_C_HEADER(cwchar)
38 # if defined (__OpenBSD__)
39 typedef _BSD_WINT_T_
wint_t;
40 # endif /* __OpenBSD__ */
42 # if defined (__DMC__)
43 # define __STDC_LIMIT_MACROS
44 # include <stdint.h> // WCHAR_MIN, WCHAR_MAX
46 # elif defined (_STLP_NO_WCHAR_T) || \
47 (defined (__BORLANDC__) && (__BORLANDC__ < 0x570)) || \
48 defined (__OpenBSD__) || defined (__FreeBSD__) || \
49 (defined (__GNUC__) && (defined (__APPLE__) || defined ( __Lynx__ )))
50 # if defined (_STLP_HAS_INCLUDE_NEXT)
51 # include_next <stddef.h>
53 # include _STLP_NATIVE_C_HEADER(stddef.h)
55 # if defined (__Lynx__)
57 typedef long int wint_t;
61 # if defined(__OpenBSD__)
62 typedef _BSD_WINT_T_
wint_t;
63 # endif /* __OpenBSD__ */
65 # if defined (_STLP_HAS_INCLUDE_NEXT)
66 # include_next <wchar.h>
68 # include _STLP_NATIVE_C_HEADER(wchar.h)
71 # if defined (__sun) && (defined (_XOPEN_SOURCE) || (_XOPEN_VERSION - 0 == 4))
72 extern wint_t btowc();
73 extern int fwprintf();
77 extern size_t mbrlen();
78 extern size_t mbrtowc();
79 extern size_t mbsrtowcs();
80 extern int swprintf();
82 extern int vfwprintf();
83 extern int vwprintf();
84 extern int vswprintf();
85 extern size_t wcrtomb();
86 extern size_t wcsrtombs();
87 extern wchar_t *wcsstr();
89 extern wchar_t *wmemchr();
91 extern wchar_t *wmemcpy();
92 extern wchar_t *wmemmove();
93 extern wchar_t *wmemset();
99 # if defined (__MSL__) && (__MSL__ <= 0x51FF) /* dwa 2/28/99 - not yet implemented by MSL */
100 # define _STLP_WCHAR_MSL_EXCLUDE 1
102 extern "C" size_t wcsftime(wchar_t * str
, size_t max_size
, const wchar_t * format_str
, const struct tm
* timeptr
);
104 # define _STLP_NO_NATIVE_MBSTATE_T 1
105 # elif defined (__BORLANDC__)
106 # if !defined (_STLP_USE_NO_IOSTREAMS)
107 # define _STLP_NO_NATIVE_MBSTATE_T
109 # define _STLP_WCHAR_BORLAND_EXCLUDE 1
112 # ifndef _STLP_INTERNAL_MBSTATE_T
113 # include <stl/_mbstate_t.h>
116 # if !defined (_STLP_NO_WCHAR_T)
119 /* SUNpro has some bugs with casts. wchar_t is size of int there anyway. */
120 # if defined (__SUNPRO_CC) || defined (__DJGPP)
121 # define WCHAR_MAX (~0)
123 # define WCHAR_MAX ((wchar_t)~0)
126 # if defined (__DMC__) || (defined (_STLP_MSVC_LIB) && (_STLP_MSVC_LIB < 1400)) || defined(_WIN32_WCE)
127 /* Compilers that do not define WCHAR_MIN and WCHAR_MAX to be testable at
128 * preprocessing time. */
132 # define WCHAR_MAX 0xffff
134 # if defined (__GNUC__) && defined (__alpha__)
135 /* Definition of WCHAR_MIN and MAX are wrong for alpha platform
136 * as gcc consider wchar_t as an unsigned type but WCHAR_MIN is defined as
137 * a negative value. Static assertion is here to check that a future alpha
138 * SDK or a future gcc won't change the situation making this workaround
141 /* Check that gcc still consider wchar_t as unsigned */
142 _STLP_STATIC_ASSERT(((wchar_t)-1 > 0))
143 /* Check that WCHAR_MIN value hasn't been fixed */
144 _STLP_STATIC_ASSERT((WCHAR_MIN
< 0))
148 # define WCHAR_MAX 0xffffffff
150 # if defined(__HP_aCC) && (__HP_aCC >= 60000)
151 /* Starting with B.11.31, HP-UX/ia64 provides C99-compliant definitions
152 * of WCHAR_MIN/MAX macros without having to define
153 * _INCLUDE_STDC__SOURCE_199901 macro (which aCC compiler does not
154 * predefine). Let STLport provide B.11.31 definitions on any version of
160 # define WCHAR_MAX UINT_MAX
164 # if defined (_STLP_IMPORT_VENDOR_CSTD)
166 # if defined (__SUNPRO_CC) && !defined (_STLP_HAS_NO_NEW_C_HEADERS)
167 using _STLP_VENDOR_CSTD::wint_t;
170 _STLP_BEGIN_NAMESPACE
171 # if defined (_STLP_NO_WCHAR_T)
174 // gcc 3.0 has a glitch : wint_t only sucked into the global namespace if _GLIBCPP_USE_WCHAR_T is defined
175 // __MWERKS__ has definition in wchar_t.h (MSL C++), but ones differ from definition
176 // in stdio.h; I prefer settings from last file.
177 # if (defined (__GNUC__) && ! defined (_GLIBCPP_USE_WCHAR_T))
180 using _STLP_VENDOR_CSTD::wint_t;
184 using _STLP_VENDOR_CSTD::size_t;
186 # if !defined (_STLP_NO_NATIVE_MBSTATE_T) && !defined (_STLP_USE_OWN_MBSTATE_T)
187 using _STLP_VENDOR_MB_NAMESPACE::mbstate_t;
189 # if !defined (_STLP_NO_CSTD_FUNCTION_IMPORTS) && !defined(_STLP_WCHAR_BORLAND_EXCLUDE) && \
190 (!defined(__MSL__) || __MSL__ > 0x6001)
191 # if defined (__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 3) || ((__MINGW32_MAJOR_VERSION == 3) && (__MINGW32_MINOR_VERSION >= 8))) || \
192 !(defined (__KCC) || defined (__GNUC__)) && !defined(_STLP_WCE_NET)
193 using _STLP_VENDOR_MB_NAMESPACE::btowc
;
194 # if (!defined(__MSL__) || __MSL__ > 0x7001)
195 using _STLP_VENDOR_MB_NAMESPACE::mbsinit
;
198 # if defined (__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 3) || ((__MINGW32_MAJOR_VERSION == 3) && (__MINGW32_MINOR_VERSION >= 8))) || \
199 !defined (__GNUC__) && !defined(_STLP_WCE_NET)
200 using _STLP_VENDOR_MB_NAMESPACE::mbrlen
;
201 using _STLP_VENDOR_MB_NAMESPACE::mbrtowc
;
202 using _STLP_VENDOR_MB_NAMESPACE::mbsrtowcs
;
203 using _STLP_VENDOR_MB_NAMESPACE::wcrtomb
;
204 using _STLP_VENDOR_MB_NAMESPACE::wcsrtombs
;
206 # endif /* BORLAND && !__MSL__ || __MSL__ > 0x6001 */
208 # endif /* _STLP_NO_NATIVE_MBSTATE_T */
210 # if !defined (_STLP_NO_NATIVE_WIDE_FUNCTIONS) && ! defined (_STLP_NO_CSTD_FUNCTION_IMPORTS)
212 # if !defined (_STLP_WCHAR_BORLAND_EXCLUDE) && ! defined (_STLP_NO_CSTD_FUNCTION_IMPORTS)
213 using _STLP_VENDOR_CSTD::fgetwc
;
214 using _STLP_VENDOR_CSTD::fgetws
;
215 using _STLP_VENDOR_CSTD::fputwc
;
216 using _STLP_VENDOR_CSTD::fputws
;
219 # if !(defined (_STLP_WCHAR_SUNPRO_EXCLUDE) || defined (_STLP_WCHAR_BORLAND_EXCLUDE) || \
220 defined(_STLP_WCHAR_HPACC_EXCLUDE) )
221 # if !defined (__DECCXX)
222 using _STLP_VENDOR_CSTD::fwide
;
224 using _STLP_VENDOR_CSTD::fwprintf
;
225 using _STLP_VENDOR_CSTD::fwscanf
;
226 using _STLP_VENDOR_CSTD::getwchar
;
229 # if !defined(_STLP_WCHAR_BORLAND_EXCLUDE)
230 # ifndef _STLP_WCE_NET
231 using _STLP_VENDOR_CSTD::getwc
;
233 using _STLP_VENDOR_CSTD::ungetwc
;
234 # ifndef _STLP_WCE_NET
235 using _STLP_VENDOR_CSTD::putwc
;
237 using _STLP_VENDOR_CSTD::putwchar
;
240 # if !(defined (_STLP_WCHAR_SUNPRO_EXCLUDE) || defined (_STLP_WCHAR_BORLAND_EXCLUDE) || \
241 defined (_STLP_WCHAR_HPACC_EXCLUDE) )
242 # if defined (_STLP_MSVC_LIB) && (_STLP_MSVC_LIB <= 1300) || \
243 defined (__MINGW32__)
245 # define swprintf _snwprintf
247 # define vswprintf _vsnwprintf
251 using _STLP_VENDOR_CSTD::swprintf
;
252 using _STLP_VENDOR_CSTD::vswprintf
;
254 using _STLP_VENDOR_CSTD::swscanf
;
255 using _STLP_VENDOR_CSTD::vfwprintf
;
256 using _STLP_VENDOR_CSTD::vwprintf
;
258 # if (!defined(__MSL__) || __MSL__ > 0x7001 ) && !defined(_STLP_WCE_NET) && \
259 !defined(_STLP_USE_UCLIBC) /* at least in uClibc 0.9.26 */
261 using _STLP_VENDOR_CSTD::wcsftime
;
263 using _STLP_VENDOR_CSTD::wcstok
;
267 # if !defined (_STLP_WCE_NET)
268 using _STLP_VENDOR_CSTD::wcscoll
;
269 using _STLP_VENDOR_CSTD::wcsxfrm
;
271 using _STLP_VENDOR_CSTD::wcscat
;
272 using _STLP_VENDOR_CSTD::wcsrchr
;
273 using _STLP_VENDOR_CSTD::wcscmp
;
275 using _STLP_VENDOR_CSTD::wcscpy
;
276 using _STLP_VENDOR_CSTD::wcscspn
;
278 using _STLP_VENDOR_CSTD::wcslen
;
279 using _STLP_VENDOR_CSTD::wcsncat
;
280 using _STLP_VENDOR_CSTD::wcsncmp
;
281 using _STLP_VENDOR_CSTD::wcsncpy
;
282 using _STLP_VENDOR_CSTD::wcspbrk
;
283 using _STLP_VENDOR_CSTD::wcschr
;
285 using _STLP_VENDOR_CSTD::wcsspn
;
287 # if !defined (_STLP_WCHAR_BORLAND_EXCLUDE)
288 using _STLP_VENDOR_CSTD::wcstod
;
289 using _STLP_VENDOR_CSTD::wcstol
;
292 # if !(defined (_STLP_WCHAR_SUNPRO_EXCLUDE) || defined (_STLP_WCHAR_HPACC_EXCLUDE) )
293 using _STLP_VENDOR_CSTD::wcsstr
;
294 using _STLP_VENDOR_CSTD::wmemchr
;
296 # if !defined (_STLP_WCHAR_BORLAND_EXCLUDE)
297 # if !defined (_STLP_WCE_NET)
298 using _STLP_VENDOR_CSTD::wctob
;
300 # if !defined (__DMC__)
301 using _STLP_VENDOR_CSTD::wmemcmp
;
302 using _STLP_VENDOR_CSTD::wmemmove
;
304 using _STLP_VENDOR_CSTD::wprintf
;
305 using _STLP_VENDOR_CSTD::wscanf
;
308 # if defined (__BORLANDC__) && !defined (__linux__)
309 inline wchar_t* _STLP_wmemcpy(wchar_t* __wdst
, const wchar_t* __wsrc
, size_t __n
)
310 { return __STATIC_CAST(wchar_t*, _STLP_VENDOR_CSTD::wmemcpy(__wdst
, __wsrc
, __n
)); }
311 inline wchar_t* _STLP_wmemset(wchar_t* __wdst
, wchar_t __wc
, size_t __n
)
312 { return __STATIC_CAST(wchar_t*, _STLP_VENDOR_CSTD::memset(__wdst
, __wc
, __n
)); }
315 inline wchar_t* wmemcpy(wchar_t* __wdst
, const wchar_t* __wsrc
, size_t __n
)
316 { return _STLP_wmemcpy(__wdst
, __wsrc
, __n
); }
317 inline wchar_t* wmemset(wchar_t* __wdst
, wchar_t __wc
, size_t __n
)
318 { return _STLP_wmemset(__wdst
, __wc
, __n
); }
319 # elif defined (__DMC__)
320 inline wchar_t* wmemcpy(wchar_t* __RESTRICT __wdst
, const wchar_t* __RESTRICT __wsrc
, size_t __n
)
321 { return __STATIC_CAST(wchar_t*, memcpy(__wdst
, __wsrc
, __n
* sizeof(wchar_t))); }
322 inline wchar_t* wmemmove(wchar_t* __RESTRICT __wdst
, const wchar_t * __RESTRICT __wc
, size_t __n
)
323 { return __STATIC_CAST(wchar_t*, memmove(__wdst
, __wc
, __n
* sizeof(wchar_t))); }
324 inline wchar_t* wmemset(wchar_t* __wdst
, wchar_t __wc
, size_t __n
)
325 { for (size_t i
= 0; i
< __n
; i
++) __wdst
[i
] = __wc
; return __wdst
; }
327 using _STLP_VENDOR_CSTD::wmemcpy
;
328 using _STLP_VENDOR_CSTD::wmemset
;
332 # endif /* _STLP_NO_NATIVE_WIDE_FUNCTIONS */
335 # endif /* _STLP_IMPORT_VENDOR_CSTD */
337 # undef _STLP_WCHAR_SUNPRO_EXCLUDE
338 # undef _STLP_WCHAR_MSL_EXCLUDE
340 # endif /* !defined(_STLP_WCE_EVC3) */
342 #endif /* _STLP_INTERNAL_CWCHAR */