williamr@2: /* williamr@4: * Portions Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. williamr@4: * williamr@2: * Copyright (c) 1999 williamr@2: * Boris Fomitchev williamr@2: * williamr@2: * This material is provided "as is", with absolutely no warranty expressed williamr@2: * or implied. Any use is at your own risk. williamr@2: * williamr@4: * Permission to use or copy this software for any purpose is hereby granted williamr@2: * without fee, provided the above notices are retained on all copies. williamr@2: * Permission to modify the code and to distribute modified code is granted, williamr@2: * provided the above notices are retained, and a notice that the code was williamr@2: * modified is included with the above copyright notice. williamr@2: * williamr@2: */ williamr@2: williamr@4: #ifndef _STLP_INTERNAL_CWCHAR williamr@4: #define _STLP_INTERNAL_CWCHAR williamr@2: williamr@4: #if defined (_STLP_WCE_EVC3) williamr@4: # ifndef _STLP_INTERNAL_MBSTATE_T williamr@4: # include williamr@4: # endif williamr@2: #else williamr@4: # if defined (__GNUC__) && !defined (__SYMBIAN32__) williamr@4: # include _STLP_NATIVE_CPP_C_HEADER(cstddef) williamr@4: # endif williamr@2: williamr@4: # if !defined (_STLP_NO_CWCHAR) && defined (_STLP_USE_NEW_C_HEADERS) williamr@4: # include _STLP_NATIVE_CPP_C_HEADER(cwchar) williamr@4: # if defined (__OpenBSD__) williamr@4: typedef _BSD_WINT_T_ wint_t; williamr@4: # endif /* __OpenBSD__ */ williamr@2: williamr@4: # elif defined (_STLP_NO_WCHAR_T) || defined (__MRC__) || (defined (__SC__) && !defined (__DMC__)) || \ williamr@4: (defined (__BORLANDC__) && (__BORLANDC__ < 0x580)) || \ williamr@4: defined (__OpenBSD__) || defined (__FreeBSD__) || \ williamr@4: (defined (__GNUC__) && (defined (__APPLE__) || defined ( __Lynx__ ))) williamr@4: # include _STLP_NATIVE_C_HEADER(stddef.h) williamr@4: # if defined (__Lynx__) williamr@4: # ifndef _WINT_T williamr@2: typedef long int wint_t; williamr@4: # define _WINT_T williamr@4: # endif /* _WINT_T */ williamr@4: # endif williamr@4: # if defined(__OpenBSD__) williamr@4: typedef _BSD_WINT_T_ wint_t; williamr@4: # endif /* __OpenBSD__ */ williamr@4: # elif defined (__MWERKS__) && defined (N_PLAT_NLM) williamr@4: # include williamr@4: # else williamr@4: # include _STLP_NATIVE_C_HEADER(wchar.h) williamr@4: williamr@4: # if defined (__sun) && (defined (_XOPEN_SOURCE) || (_XOPEN_VERSION - 0 == 4)) williamr@4: extern wint_t btowc(); williamr@4: extern int fwprintf(); williamr@4: extern int fwscanf(); williamr@4: extern int fwide(); williamr@4: extern int mbsinit(); williamr@4: extern size_t mbrlen(); williamr@4: extern size_t mbrtowc(); williamr@4: extern size_t mbsrtowcs(); williamr@4: extern int swprintf(); williamr@4: extern int swscanf(); williamr@4: extern int vfwprintf(); williamr@4: extern int vwprintf(); williamr@4: extern int vswprintf(); williamr@4: extern size_t wcrtomb(); williamr@4: extern size_t wcsrtombs(); williamr@4: extern wchar_t *wcsstr(); williamr@4: extern int wctob(); williamr@4: extern wchar_t *wmemchr(); williamr@4: extern int wmemcmp(); williamr@4: extern wchar_t *wmemcpy(); williamr@4: extern wchar_t *wmemmove(); williamr@4: extern wchar_t *wmemset(); williamr@4: extern int wprintf(); williamr@4: extern int wscanf(); williamr@4: # endif williamr@2: # endif williamr@2: williamr@4: # if defined (__MSL__) && (__MSL__ <= 0x51FF) /* dwa 2/28/99 - not yet implemented by MSL */ williamr@4: # define _STLP_WCHAR_MSL_EXCLUDE 1 williamr@4: namespace std { williamr@4: extern "C" size_t wcsftime(wchar_t * str, size_t max_size, const wchar_t * format_str, const struct tm * timeptr); williamr@4: } williamr@4: # define _STLP_NO_MBSTATE_T 1 williamr@4: # elif defined (__BORLANDC__) williamr@4: # if !defined (_STLP_USE_NO_IOSTREAMS) williamr@4: # define _STLP_NO_NATIVE_MBSTATE_T williamr@4: # endif williamr@4: # define _STLP_WCHAR_BORLAND_EXCLUDE 1 williamr@4: # endif williamr@2: williamr@4: # ifndef _STLP_INTERNAL_MBSTATE_T williamr@4: # include williamr@4: # endif williamr@2: williamr@4: # if !defined (_STLP_NO_WCHAR_T) williamr@4: # ifndef WCHAR_MIN williamr@4: # define WCHAR_MIN 0 williamr@4: /* SUNpro has some bugs with casts. wchar_t is size of int there anyway. */ williamr@4: # if defined (__SUNPRO_CC) || defined (__DJGPP) williamr@4: # define WCHAR_MAX (~0) williamr@4: # else williamr@4: # define WCHAR_MAX ((wchar_t)~0) williamr@4: # endif williamr@4: # endif williamr@4: # if defined (__GNUC__) && defined (__alpha__) williamr@4: /* Definition of WCHAR_MIN and MAX are wrong for alpha platform williamr@4: * as gcc consider wchar_t as an unsigned type. Static assertion are williamr@4: * here to check that a future alpha SDK or a future gcc won't change the williamr@4: * situation making this workaround useless. williamr@4: */ williamr@4: _STLP_STATIC_ASSERT(((wchar_t)-1 > 0) && (WCHAR_MIN < 0)) williamr@4: # undef WCHAR_MIN williamr@4: # define WCHAR_MIN 0 williamr@4: # undef WCHAR_MAX williamr@4: # define WCHAR_MAX ((wchar_t)~0) williamr@4: # endif williamr@4: # if defined(__HP_aCC) && (__HP_aCC >= 60000) williamr@4: /* Starting with B.11.31, HP-UX/ia64 provides C99-compliant definitions williamr@4: * of WCHAR_MIN/MAX macros without having to define williamr@4: * _INCLUDE_STDC__SOURCE_199901 macro (which aCC compiler does not williamr@4: * predefine). Let STLport provide B.11.31 definitions on any version of williamr@4: * HP-UX/ia64. williamr@4: */ williamr@4: # undef WCHAR_MIN williamr@4: # define WCHAR_MIN 0 williamr@4: # undef WCHAR_MAX williamr@4: # define WCHAR_MAX UINT_MAX williamr@4: # endif williamr@4: # endif williamr@2: williamr@4: # if defined (_STLP_IMPORT_VENDOR_CSTD) williamr@2: williamr@4: # if defined (__SUNPRO_CC) && !defined (_STLP_HAS_NO_NEW_C_HEADERS) williamr@4: using _STLP_VENDOR_CSTD::wint_t; williamr@4: # endif williamr@2: williamr@4: _STLP_BEGIN_NAMESPACE williamr@4: # if defined (_STLP_NO_WCHAR_T) williamr@4: typedef int wint_t; williamr@4: # else williamr@4: // gcc 3.0 has a glitch : wint_t only sucked into the global namespace if _GLIBCPP_USE_WCHAR_T is defined williamr@4: // __MWERKS__ has definition in wchar_t.h (MSL C++), but ones differ from definition williamr@4: // in stdio.h; I prefer settings from last file. williamr@4: # if (defined (__GNUC__) && ! defined (_GLIBCPP_USE_WCHAR_T)) // || (defined(__MWERKS__) && defined(N_PLAT_NLM)) williamr@4: using ::wint_t; williamr@4: # else williamr@4: using _STLP_VENDOR_CSTD::wint_t; williamr@4: # endif williamr@4: # endif williamr@2: williamr@4: using _STLP_VENDOR_CSTD::size_t; williamr@2: williamr@4: # if !defined (_STLP_NO_NATIVE_MBSTATE_T) && !defined (_STLP_USE_OWN_MBSTATE_T) williamr@4: using _STLP_VENDOR_MB_NAMESPACE::mbstate_t; williamr@2: williamr@4: # if !defined (_STLP_NO_CSTD_FUNCTION_IMPORTS) && !defined(_STLP_WCHAR_BORLAND_EXCLUDE) && \ williamr@4: (!defined(__MSL__) || __MSL__ > 0x6001) williamr@4: # if defined (__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 3) || ((__MINGW32_MAJOR_VERSION == 3) && (__MINGW32_MINOR_VERSION >= 8))) || \ williamr@4: !(defined (__KCC) || defined (__GNUC__)) && !defined(_STLP_WCE_NET) && !(defined(__MWERKS__) && defined(N_PLAT_NLM)) williamr@4: using _STLP_VENDOR_MB_NAMESPACE::btowc; williamr@4: # if (!defined(__MSL__) || __MSL__ > 0x7001) williamr@4: using _STLP_VENDOR_MB_NAMESPACE::mbsinit; williamr@4: # endif williamr@4: # endif williamr@4: # if defined (__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 3) || ((__MINGW32_MAJOR_VERSION == 3) && (__MINGW32_MINOR_VERSION >= 8))) || \ williamr@4: !defined (__GNUC__) && !defined(_STLP_WCE_NET) && !(defined(__MWERKS__) && defined(N_PLAT_NLM)) williamr@4: using _STLP_VENDOR_MB_NAMESPACE::mbrlen; williamr@4: using _STLP_VENDOR_MB_NAMESPACE::mbrtowc; williamr@4: using _STLP_VENDOR_MB_NAMESPACE::mbsrtowcs; williamr@4: using _STLP_VENDOR_MB_NAMESPACE::wcrtomb; williamr@4: using _STLP_VENDOR_MB_NAMESPACE::wcsrtombs; williamr@4: # endif williamr@4: # endif /* BORLAND && !__MSL__ || __MSL__ > 0x6001 */ williamr@2: williamr@4: # endif /* _STLP_NO_NATIVE_MBSTATE_T */ williamr@4: williamr@4: # if !defined (_STLP_NO_NATIVE_WIDE_FUNCTIONS) && ! defined (_STLP_NO_CSTD_FUNCTION_IMPORTS) williamr@4: williamr@4: # if !defined (_STLP_WCHAR_BORLAND_EXCLUDE) && ! defined (_STLP_NO_CSTD_FUNCTION_IMPORTS) && !(defined(__MWERKS__) && defined(N_PLAT_NLM)) williamr@4: using _STLP_VENDOR_CSTD::fgetwc; williamr@4: using _STLP_VENDOR_CSTD::fgetws; williamr@4: using _STLP_VENDOR_CSTD::fputwc; williamr@4: using _STLP_VENDOR_CSTD::fputws; williamr@4: # endif williamr@4: williamr@4: # if !(defined (_STLP_WCHAR_SUNPRO_EXCLUDE) || defined (_STLP_WCHAR_BORLAND_EXCLUDE) || \ williamr@4: defined(_STLP_WCHAR_HPACC_EXCLUDE) || (defined(__MWERKS__) && defined(N_PLAT_NLM))) williamr@4: # if !defined (__DECCXX) williamr@4: using _STLP_VENDOR_CSTD::fwide; williamr@4: # endif williamr@4: using _STLP_VENDOR_CSTD::fwprintf; williamr@4: using _STLP_VENDOR_CSTD::fwscanf; williamr@4: using _STLP_VENDOR_CSTD::getwchar; williamr@4: # endif williamr@4: williamr@4: # if !defined(_STLP_WCHAR_BORLAND_EXCLUDE) && !(defined(__MWERKS__) && defined(N_PLAT_NLM)) williamr@4: # ifndef _STLP_WCE_NET williamr@4: using _STLP_VENDOR_CSTD::getwc; williamr@4: # endif williamr@4: using _STLP_VENDOR_CSTD::ungetwc; williamr@4: # ifndef _STLP_WCE_NET williamr@4: using _STLP_VENDOR_CSTD::putwc; williamr@4: # endif williamr@4: using _STLP_VENDOR_CSTD::putwchar; williamr@4: # endif williamr@4: williamr@4: # if !(defined (_STLP_WCHAR_SUNPRO_EXCLUDE) || defined (_STLP_WCHAR_BORLAND_EXCLUDE) || \ williamr@4: defined (_STLP_WCHAR_HPACC_EXCLUDE) || (defined (__MWERKS__) && defined (N_PLAT_NLM))) williamr@4: # if defined (_STLP_MSVC_LIB) && (_STLP_MSVC_LIB <= 1300) || \ williamr@4: (defined (__MINGW32__) && !(defined (__SYMBIAN32__) && defined (__GCCXML__))) williamr@4: # undef swprintf williamr@4: # define swprintf _snwprintf williamr@4: # undef vswprintf williamr@4: # define vswprintf _vsnwprintf williamr@4: using ::swprintf; williamr@4: using ::vswprintf; williamr@4: # else williamr@4: using _STLP_VENDOR_CSTD::swprintf; williamr@4: using _STLP_VENDOR_CSTD::vswprintf; williamr@4: # endif williamr@4: using _STLP_VENDOR_CSTD::swscanf; williamr@4: using _STLP_VENDOR_CSTD::vfwprintf; williamr@4: using _STLP_VENDOR_CSTD::vwprintf; williamr@4: williamr@4: # if (!defined(__MSL__) || __MSL__ > 0x7001 ) && !defined(_STLP_WCE_NET) && \ williamr@4: !defined(_STLP_USE_UCLIBC) /* at least in uClibc 0.9.26 */ williamr@4: williamr@4: using _STLP_VENDOR_CSTD::wcsftime; williamr@4: # endif williamr@4: using _STLP_VENDOR_CSTD::wcstok; williamr@4: williamr@4: # endif williamr@4: williamr@4: # if !(defined(__MWERKS__) && defined(N_PLAT_NLM)) williamr@4: # if !defined (_STLP_WCE_NET) williamr@4: using _STLP_VENDOR_CSTD::wcscoll; williamr@4: using _STLP_VENDOR_CSTD::wcsxfrm; williamr@4: # endif williamr@4: using _STLP_VENDOR_CSTD::wcscat; williamr@4: using _STLP_VENDOR_CSTD::wcsrchr; williamr@4: using _STLP_VENDOR_CSTD::wcscmp; williamr@4: williamr@4: using _STLP_VENDOR_CSTD::wcscpy; williamr@4: using _STLP_VENDOR_CSTD::wcscspn; williamr@4: williamr@4: using _STLP_VENDOR_CSTD::wcslen; williamr@4: using _STLP_VENDOR_CSTD::wcsncat; williamr@4: using _STLP_VENDOR_CSTD::wcsncmp; williamr@4: using _STLP_VENDOR_CSTD::wcsncpy; williamr@4: using _STLP_VENDOR_CSTD::wcspbrk; williamr@4: using _STLP_VENDOR_CSTD::wcschr; williamr@4: williamr@4: using _STLP_VENDOR_CSTD::wcsspn; williamr@4: # endif williamr@4: williamr@4: # if !defined (_STLP_WCHAR_BORLAND_EXCLUDE) && !(defined(__MWERKS__) && defined(N_PLAT_NLM)) williamr@4: using _STLP_VENDOR_CSTD::wcstod; williamr@4: using _STLP_VENDOR_CSTD::wcstol; williamr@4: # endif williamr@4: williamr@4: # if !(defined (_STLP_WCHAR_SUNPRO_EXCLUDE) || defined (_STLP_WCHAR_HPACC_EXCLUDE) || \ williamr@4: (defined (__MWERKS__) && defined (N_PLAT_NLM))) williamr@4: using _STLP_VENDOR_CSTD::wcsstr; williamr@4: using _STLP_VENDOR_CSTD::wmemchr; williamr@4: williamr@4: # if !defined (_STLP_WCHAR_BORLAND_EXCLUDE) williamr@4: # if !defined (_STLP_WCE_NET) williamr@4: using _STLP_VENDOR_CSTD::wctob; williamr@4: # endif williamr@4: # if !defined (__DMC__) williamr@4: using _STLP_VENDOR_CSTD::wmemcmp; williamr@4: using _STLP_VENDOR_CSTD::wmemmove; williamr@4: # endif williamr@4: using _STLP_VENDOR_CSTD::wprintf; williamr@4: using _STLP_VENDOR_CSTD::wscanf; williamr@4: # endif williamr@4: williamr@4: # if defined (__BORLANDC__) williamr@4: inline wchar_t* _STLP_wmemcpy(wchar_t* __wdst, const wchar_t* __wsrc, size_t __n) williamr@4: { return __STATIC_CAST(wchar_t*, _STLP_VENDOR_CSTD::wmemcpy(__wdst, __wsrc, __n)); } williamr@4: inline wchar_t* _STLP_wmemset(wchar_t* __wdst, wchar_t __wc, size_t __n) williamr@4: { return __STATIC_CAST(wchar_t*, _STLP_VENDOR_CSTD::memset(__wdst, __wc, __n)); } williamr@4: # undef wmemcpy williamr@4: # undef wmemset williamr@4: inline wchar_t* wmemcpy(wchar_t* __wdst, const wchar_t* __wsrc, size_t __n) williamr@4: { return _STLP_wmemcpy(__wdst, __wsrc, __n); } williamr@4: inline wchar_t* wmemset(wchar_t* __wdst, wchar_t __wc, size_t __n) williamr@4: { return _STLP_wmemset(__wdst, __wc, __n); } williamr@4: # elif defined (__DMC__) williamr@4: inline wchar_t* wmemcpy(wchar_t* __RESTRICT __wdst, const wchar_t* __RESTRICT __wsrc, size_t __n) williamr@4: { return __STATIC_CAST(wchar_t*, memcpy(__wdst, __wsrc, __n * sizeof(wchar_t))); } williamr@4: inline wchar_t* wmemmove(wchar_t* __RESTRICT __wdst, const wchar_t * __RESTRICT __wc, size_t __n) williamr@4: { return __STATIC_CAST(wchar_t*, memmove(__wdst, __wc, __n * sizeof(wchar_t))); } williamr@4: inline wchar_t* wmemset(wchar_t* __wdst, wchar_t __wc, size_t __n) williamr@4: { for (size_t i = 0; i < __n; i++) __wdst[i] = __wc; return __wdst; } williamr@4: # else williamr@4: using _STLP_VENDOR_CSTD::wmemcpy; williamr@4: using _STLP_VENDOR_CSTD::wmemset; williamr@4: # endif williamr@4: # endif williamr@4: williamr@4: # elif defined (__MWERKS__) && defined (N_PLAT_NLM) /* _STLP_NO_NATIVE_WIDE_FUNCTIONS */ williamr@4: using _STLP_VENDOR_CSTD::wcslen; williamr@4: using _STLP_VENDOR_CSTD::wcscmp; williamr@4: using _STLP_VENDOR_CSTD::wcscpy; williamr@4: using _STLP_VENDOR_CSTD::wcsstr; williamr@4: using _STLP_VENDOR_CSTD::wcschr; williamr@4: using _STLP_VENDOR_CSTD::wcsrchr; williamr@4: using _STLP_VENDOR_CSTD::wcspbrk; williamr@4: # endif /* _STLP_NO_NATIVE_WIDE_FUNCTIONS */ williamr@2: _STLP_END_NAMESPACE williamr@2: williamr@4: # endif /* _STLP_IMPORT_VENDOR_CSTD */ williamr@2: williamr@4: # undef _STLP_WCHAR_SUNPRO_EXCLUDE williamr@4: # undef _STLP_WCHAR_MSL_EXCLUDE williamr@2: williamr@4: # endif /* !defined(_STLP_WCE_EVC3) */ williamr@2: williamr@4: #endif /* _STLP_INTERNAL_CWCHAR */