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