| // -*- C++ -*- |
| /*************************************************************************** |
| * |
| * cwchar - C++ Standard library interface to the ANSI C header wchar.h |
| * |
| * $Id$ |
| * |
| *************************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed |
| * with this work for additional information regarding copyright |
| * ownership. The ASF licenses this file to you under the Apache |
| * License, Version 2.0 (the "License"); you may not use this file |
| * except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| * implied. See the License for the specific language governing |
| * permissions and limitations under the License. |
| * |
| * Copyright 1998-2006 Rogue Wave Software. |
| * |
| **************************************************************************/ |
| |
| #include <rw/_defs.h> |
| |
| #ifndef _RWSTD_NO_PURE_C_HEADERS |
| # include <ansi/_cwchar.h> |
| #else |
| |
| #ifndef _RWSTD_NO_DEPRECATED_C_HEADERS |
| |
| #ifndef _RWSTD_NAMESPACE_STD_OPEN |
| #define _RWSTD_NAMESPACE_STD_OPEN 17 |
| |
| _RWSTD_NAMESPACE (std) { |
| |
| #endif // _RWSTD_NAMESPACE_STD_OPEN |
| |
| |
| #include _RWSTD_ANSI_C_WCHAR_H |
| |
| |
| #ifdef _RWSTD_STRICT_ANSI |
| // 17.4.1.2, p6 - masking macros are not allowed |
| # undef getwc |
| # undef putwc |
| #endif // _RWSTD_STRICT_ANSI |
| |
| |
| #if _RWSTD_NAMESPACE_STD_OPEN == 17 |
| #undef _RWSTD_NAMESPACE_STD_OPEN |
| |
| } // namespace std |
| |
| #endif // _RWSTD_NAMESPACE_STD_OPEN == 17 |
| |
| #else // if defined (_RWSTD_NO_DEPRECATED_C_HEADERS) |
| |
| #ifndef _RWSTD_CWCHAR_INCLUDED |
| #define _RWSTD_CWCHAR_INCLUDED |
| |
| #include _RWSTD_ANSI_C_WCHAR_H |
| #include <rw/_mbstate.h> |
| |
| |
| // #define WEOF when not #defined (see also <cwctype>) |
| #if !defined WEOF |
| # ifndef _RWSTD_NO_WINT_T |
| # define WEOF _RWSTD_STATIC_CAST (_RWSTD_WINT_T, -1) |
| # else |
| # define WEOF (-1) |
| # endif |
| #endif // WEOF |
| |
| |
| #ifndef NULL |
| # define NULL 0 |
| #endif // NULL |
| |
| |
| #if !defined (_RWSTD_NO_NAMESPACE) && !defined (_RWSTD_NO_HONOR_STD) |
| |
| |
| #ifndef WCHAR_MIN |
| # define WCHAR_MIN _RWSTD_WCHAR_MIN |
| #endif // WCHAR_MIN |
| |
| #ifndef WCHAR_MAX |
| # define WCHAR_MAX _RWSTD_WCHAR_MAX |
| #endif // WCHAR_MAX |
| |
| |
| #if !defined (_RWSTD_NO_USING_LIBC_IN_STD) |
| |
| namespace std { |
| |
| #ifndef _RWSTD_NO_SIZE_T |
| using ::size_t; |
| #elif defined (_RWSTD_SIZE_T) |
| typedef _RWSTD_SIZE_T size_t; |
| #endif // _RWSTD_NO_SIZE_T |
| |
| #ifdef _RWSTD_NO_STD_MBSTATE_T |
| |
| using ::mbstate_t; |
| |
| #endif // _RWSTD_NO_STD_MBSTATE_T |
| |
| #ifndef _RWSTD_NO_WINT_T |
| using ::wint_t; |
| #elif defined (_RWSTD_WINT_T) |
| typedef _RWSTD_WINT_T wint_t; |
| #endif // _RWSTD_NO_WINT_T |
| |
| #ifndef _RWSTD_NO_STRUCT_TM_IN_WCHAR_H |
| using ::tm; |
| #elif !defined (_RWSTD_NO_STRUCT_TM) |
| |
| } // namespace std |
| |
| #include _RWSTD_ANSI_C_TIME_H |
| |
| namespace std { |
| |
| using ::tm; |
| |
| #endif // NO_STRUCT_TM |
| |
| #ifndef _RWSTD_NO_BTOWC |
| using ::btowc; |
| #elif !defined (_RWSTD_NO_BTOWC_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t btowc (int); |
| |
| namespace std { |
| |
| using ::btowc; |
| |
| # undef _RWSTD_NO_BTOWC |
| #endif // _RWSTD_NO_BTOWC |
| |
| #ifndef _RWSTD_NO_FGETWC |
| using ::fgetwc; |
| #elif !defined (_RWSTD_NO_FGETWC_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t fgetwc (FILE*); |
| |
| namespace std { |
| |
| using ::fgetwc; |
| |
| # undef _RWSTD_NO_FGETWC |
| #endif // _RWSTD_NO_FGETWC[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_FGETWS |
| using ::fgetws; |
| #elif !defined (_RWSTD_NO_FGETWS_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t fgetws (wchar_t*, int, FILE*); |
| |
| namespace std { |
| |
| using ::fgetws; |
| |
| # undef _RWSTD_NO_FGETWS |
| #endif // _RWSTD_NO_FGETWS[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_FPUTWC |
| using ::fputwc; |
| #elif !defined (_RWSTD_NO_FPUTWC_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t fputwc (wint_t, FILE*); |
| |
| namespace std { |
| |
| using ::fputwc; |
| |
| # undef _RWSTD_NO_FPUTWC |
| #endif // _RWSTD_NO_FPUTWC[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_FPUTWS |
| using ::fputws; |
| #elif !defined (_RWSTD_NO_FPUTWS_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int fputws (const wchar_t*, FILE*); |
| |
| namespace std { |
| |
| using ::fputws; |
| |
| # undef _RWSTD_NO_FPUTWS |
| #endif // _RWSTD_NO_FPUTWS[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_FWIDE |
| using ::fwide; |
| #elif !defined (_RWSTD_NO_FWIDE_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int fwide (FILE*, int); |
| |
| namespace std { |
| |
| using ::fwide; |
| |
| # undef _RWSTD_NO_FWIDE |
| #endif // _RWSTD_NO_FWIDE[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_FWPRINTF |
| using ::fwprintf; |
| #elif !defined (_RWSTD_NO_FWPRINTF_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int fwprintf (FILE*, const wchar_t*, ...); |
| |
| namespace std { |
| |
| using ::fwprintf; |
| |
| # undef _RWSTD_NO_FWPRINTF |
| #endif // _RWSTD_NO_FWPRINTF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_FWSCANF |
| using ::fwscanf; |
| #elif !defined (_RWSTD_NO_FWSCANF_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int fwscanf (FILE*, const wchar_t*, ...); |
| |
| namespace std { |
| |
| using ::fwscanf; |
| |
| # undef _RWSTD_NO_FWSCANF |
| #endif // _RWSTD_NO_FWSCANF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_GETWC |
| using ::getwc; |
| #elif !defined (_RWSTD_NO_GETWC_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t getwc (FILE*); |
| |
| namespace std { |
| |
| using ::getwc; |
| |
| # undef _RWSTD_NO_GETWC |
| #endif // _RWSTD_NO_GETWC[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_PUTWC |
| using ::putwc; |
| #elif !defined (_RWSTD_NO_PUTWC_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t putwc (wint_t, FILE*); |
| |
| namespace std { |
| |
| using ::putwc; |
| |
| # undef _RWSTD_NO_PUTWC |
| #endif // _RWSTD_NO_PUTWC[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_GETWCHAR |
| using ::getwchar; |
| #elif !defined (_RWSTD_NO_GETWCHAR_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t getwchar (); |
| |
| namespace std { |
| |
| using ::getwchar; |
| |
| # undef _RWSTD_NO_GETWCHAR |
| #endif // _RWSTD_NO_GETWCHAR[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_PUTWCHAR |
| using ::putwchar; |
| #elif !defined (_RWSTD_NO_PUTWCHAR_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t putwchar (wint_t); |
| |
| namespace std { |
| |
| using ::putwchar; |
| |
| # undef _RWSTD_NO_PUTWCHAR |
| #endif // _RWSTD_NO_PUTWCHAR[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_SWPRINTF |
| using ::swprintf; |
| #elif !defined (_RWSTD_NO_SWPRINTF_IN_LIBC) |
| |
| } // namespace std |
| |
| #if _MSC_VER < 1310 // MSVC < 7.1 or (better yet) not MSVC |
| |
| extern "C" { |
| |
| _RWSTD_DLLIMPORT int |
| swprintf (wchar_t*, size_t, const wchar_t*, ...); |
| |
| } // extern "C" |
| |
| #elif _MSC_VER == 1310 // MSVC 7.1 |
| |
| // MSVC 8.0 defines the C++ overload of swprintf() inline |
| /* extern "C++" */ _RWSTD_DLLIMPORT int |
| swprintf (wchar_t*, size_t, const wchar_t*, ...); |
| |
| #else // MSVC 8.0 and above |
| |
| // MSVC 7.1 declares two overloads of swprintf() |
| /* extern "C++" */ int |
| swprintf (wchar_t*, size_t, const wchar_t*, ...); |
| |
| #endif // MSVC |
| |
| namespace std { |
| |
| using ::swprintf; |
| |
| # undef _RWSTD_NO_SWPRINTF |
| #endif // _RWSTD_NO_SWPRINTF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_SWSCANF |
| using ::swscanf; |
| #elif !defined (_RWSTD_NO_SWSCANF_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int swscanf (const wchar_t*, const wchar_t*, ...); |
| |
| namespace std { |
| |
| using ::swscanf; |
| |
| # undef _RWSTD_NO_SWSCANF |
| #endif // _RWSTD_NO_SWSCANF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_UNGETWC |
| using ::ungetwc; |
| #elif !defined (_RWSTD_NO_UNGETWC_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wint_t ungetwc (wint_t, FILE*); |
| |
| namespace std { |
| |
| using ::ungetwc; |
| |
| # undef _RWSTD_NO_UNGETWC |
| #endif // _RWSTD_NO_UNGETWC[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_VFWPRINTF |
| using ::vfwprintf; |
| #elif !defined (_RWSTD_NO_VFWPRINTF_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int vfwprintf (FILE*, const wchar_t *format, _RWSTD_VA_LIST); |
| |
| namespace std { |
| |
| using ::vfwprintf; |
| |
| # undef _RWSTD_NO_VFWPRINTF |
| #endif // _RWSTD_NO_VFWPRINTF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_VSWPRINTF |
| using ::vswprintf; |
| #elif !defined (_RWSTD_NO_VSWPRINTF_IN_LIBC) |
| |
| } // namespace std |
| |
| #if _MSC_VER < 1310 // MSVC < 7.1 or (better yet) not MSVC |
| |
| extern "C" { |
| |
| _RWSTD_DLLIMPORT int |
| vswprintf (wchar_t*, size_t, const wchar_t*, _RWSTD_VA_LIST); |
| |
| } // extern "C" |
| |
| #elif _MSC_VER == 1310 // MSVC 7.1 |
| |
| // MSVC 7.1 declares two overloads of swprintf() |
| /* extern "C++" */ _RWSTD_DLLIMPORT int |
| swprintf (wchar_t*, size_t, const wchar_t*, ...); |
| |
| #else // MSVC 8.0 and above |
| |
| // MSVC 8.0 defines the C++ overload of vswprintf() inline |
| /* extern "C++" */ int |
| vswprintf (wchar_t*, size_t, const wchar_t*, _RWSTD_VA_LIST); |
| |
| #endif // MSVC |
| |
| namespace std { |
| |
| using ::vswprintf; |
| |
| # undef _RWSTD_NO_VSWPRINTF |
| #endif // _RWSTD_NO_VSWPRINTF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_VWPRINTF |
| using ::vwprintf; |
| #elif !defined (_RWSTD_NO_VWPRINTF_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int vwprintf (const wchar_t*, _RWSTD_VA_LIST); |
| |
| namespace std { |
| |
| using ::vwprintf; |
| |
| # undef _RWSTD_NO_VWPRINTF |
| #endif // _RWSTD_NO_VWPRINTF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_WPRINTF |
| using ::wprintf; |
| #elif !defined (_RWSTD_NO_WPRINTF_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int wprintf (const wchar_t*, ...); |
| |
| namespace std { |
| |
| using ::wprintf; |
| |
| # undef _RWSTD_NO_WPRINTF |
| #endif // _RWSTD_NO_WPRINTF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_WSCANF |
| using ::wscanf; |
| #elif !defined (_RWSTD_NO_WSCANF_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int wscanf (const wchar_t*, ...); |
| |
| namespace std { |
| |
| using ::wscanf; |
| |
| # undef _RWSTD_NO_WSCANF |
| #endif // _RWSTD_NO_WSCANF[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_MBRLEN |
| using ::mbrlen; |
| #elif !defined (_RWSTD_NO_MBRLEN_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t mbrlen (const char*, size_t, _RWSTD_MBSTATE_T*); |
| |
| namespace std { |
| |
| using ::mbrlen; |
| |
| # undef _RWSTD_NO_MBRLEN |
| #endif // _RWSTD_NO_MBRLEN |
| |
| #ifndef _RWSTD_NO_MBRTOWC |
| using ::mbrtowc; |
| #elif !defined (_RWSTD_NO_MBRTOWC_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t mbrtowc (wchar_t*, const char*, size_t, _RWSTD_MBSTATE_T*); |
| |
| namespace std { |
| |
| using ::mbrtowc; |
| |
| # undef _RWSTD_MBRTOWC |
| #endif // _RWSTD_MBRTOWC[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_MBSINIT |
| using ::mbsinit; |
| #elif !defined (_RWSTD_NO_MBSINIT_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int mbsinit (const _RWSTD_MBSTATE_T*); |
| |
| namespace std { |
| |
| using ::mbsinit; |
| |
| # undef _RWSTD_NO_MBSINIT |
| #endif // !_RWSTD_NO_MBSINIT_IN_LIBC |
| |
| #ifndef _RWSTD_NO_MBSRTOWCS |
| using ::mbsrtowcs; |
| #elif !defined (_RWSTD_NO_MBSRTOWCS_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t mbsrtowcs (wchar_t*, const char**, size_t, _RWSTD_MBSTATE_T*); |
| |
| namespace std { |
| |
| using ::mbsrtowcs; |
| |
| # undef _RWSTD_NO_MBSRTOWCS |
| #endif // _RWSTD_NO_MBSRTOWCS |
| |
| #ifndef _RWSTD_NO_WCRTOMB |
| using ::wcrtomb; |
| #elif !defined (_RWSTD_NO_WCRTOMB_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t wcrtomb (char*, wchar_t, _RWSTD_MBSTATE_T*); |
| |
| namespace std { |
| |
| using ::wcrtomb; |
| |
| # undef _RWSTD_NO_WCRTOMB |
| #endif // _RWSTD_NO_WCRTOMB |
| |
| #ifndef _RWSTD_NO_WCSCAT |
| using ::wcscat; |
| #elif !defined (_RWSTD_NO_WCSCAT_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wcscat (wchar_t*, const wchar_t*); |
| |
| namespace std { |
| |
| using ::wcscat; |
| |
| #else // if defined (_RWSTD_NO_WCSCAT) |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wcscat (wchar_t *__dst, const wchar_t *__src) |
| { |
| wchar_t *__s = __dst; |
| for (; *__s; ++__s); |
| while ((*__s++ = *__src++)); |
| return __dst; |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcscat; |
| |
| #endif // _RWSTD_NO_WCSCAT |
| |
| #undef _RWSTD_NO_WCSCAT |
| |
| |
| #ifndef _RWSTD_NO_WCSCHR |
| using ::wcschr; |
| #elif !defined (_RWSTD_NO_WCSCHR_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wcschr (wchar_t*, wchar_t); |
| |
| inline const wchar_t* wcschr (const wchar_t *__s, wchar_t __c) |
| { |
| return wcschr (_RWSTD_CONST_CAST (wchar_t*, __s), __c); |
| } |
| |
| namespace std { |
| |
| using ::wcschr; |
| |
| #else // if defined (_RWSTD_NO_WCSCHR) |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wcschr (wchar_t *__s, wchar_t __c) |
| { |
| do { |
| if (*__s == __c) |
| return __s; |
| } while (*__s); |
| return 0; |
| } |
| |
| } // extern "C" |
| |
| inline const wchar_t* wcschr (const wchar_t *__s, wchar_t __c) |
| { |
| return wcschr (_RWSTD_CONST_CAST (wchar_t*, __s), __c); |
| } |
| |
| namespace std { |
| |
| using ::wcschr; |
| |
| #endif // _RWSTD_NO_WCSCHR |
| |
| #undef _RWSTD_NO_WCSCHR |
| |
| |
| #ifndef _RWSTD_NO_WCSCMP |
| using ::wcscmp; |
| #elif !defined (_RWSTD_NO_WCSCMP_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int wcscmp (const wchar_t*, const wchar_t*); |
| |
| namespace std { |
| |
| using ::wcscmp; |
| |
| # undef _RWSTD_NO_WCSCMP |
| #endif // _RWSTD_NO_WCSCMP |
| |
| #ifndef _RWSTD_NO_WCSCOLL |
| using ::wcscoll; |
| #elif !defined (_RWSTD_NO_WCSCOLL_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int wcscoll (const wchar_t*, const wchar_t*); |
| |
| namespace std { |
| |
| using ::wcscoll; |
| |
| # undef _RWSTD_NO_WCSCOLL |
| #endif // _RWSTD_NO_WCSCOLL |
| |
| #ifndef _RWSTD_NO_WCSCPY |
| using ::wcscpy; |
| #else // if defined (_RWSTD_NO_WCSCPY) |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wcscpy (wchar_t *__dst, const wchar_t *__src) |
| { |
| for (wchar_t *__s = __dst; (*__s++ = *__src++); ); |
| return __dst; |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcscpy; |
| |
| # undef _RWSTD_NO_WCSCPY |
| #endif // _RWSTD_NO_WCSCPY |
| |
| |
| #ifndef _RWSTD_NO_WCSCSPN |
| using ::wcscspn; |
| #elif !defined (_RWSTD_NO_WCSCSPN_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t wcscspn (const wchar_t*, const wchar_t*); |
| |
| namespace std { |
| |
| using ::wcscspn; |
| |
| # undef _RWSTD_NO_WCSCSPN |
| #else |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline size_t wcscspn (const wchar_t *__s1, const wchar_t *__s2) |
| { |
| const wchar_t *__s = __s1; |
| for (; *__s; ++__s) { |
| for (const wchar_t *__ss = __s2; *__ss; ++__ss) |
| if (*__ss == *__s) |
| return __s - __s1; |
| } |
| return __s - __s1; |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcscspn; |
| |
| # undef _RWSTD_NO_WCSCSPN |
| #endif // _RWSTD_NO_WCSCSPN |
| |
| #ifndef _RWSTD_NO_WCSFTIME |
| using ::wcsftime; |
| #elif !defined (_RWSTD_NO_WCSFTIME_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*); |
| |
| namespace std { |
| |
| using ::wcsftime; |
| |
| #endif // _RWSTD_NO_WCSFTIME |
| |
| |
| #ifndef _RWSTD_NO_WCSLEN |
| using ::wcslen; |
| #elif !defined (_RWSTD_NO_WCSLEN_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t wcslen (const wchar_t*); |
| |
| namespace std { |
| |
| using ::wcslen; |
| |
| # undef _RWSTD_NO_WCSLEN |
| #else // defined (_RWSTD_NO_WCSLEN) |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline size_t wcslen (const wchar_t* __s) |
| { |
| const wchar_t *__begin = __s; |
| while (*__s) |
| ++__s; |
| return __s - __begin; |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcslen; |
| |
| # undef _RWSTD_NO_WCSLEN |
| #endif // _RWSTD_NO_WCSLEN |
| |
| |
| #ifndef _RWSTD_NO_WCSNCAT |
| using ::wcsncat; |
| #elif !defined (_RWSTD_NO_WCSNCAT_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wcsncat (wchar_t*, const wchar_t*, size_t); |
| |
| namespace std { |
| |
| using ::wcsncat; |
| |
| # undef _RWSTD_NO_WCSNCAT |
| #else |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wcsncat (wchar_t *__dst, const wchar_t *__src, size_t __n) |
| { |
| wchar_t *__s = __dst; |
| for (; *__s; ++__s); |
| while (__n--) |
| if (!(*__s++ = *__src++)) |
| return __dst; |
| *__s = 0; |
| return __dst; |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcsncat; |
| |
| # undef _RWSTD_NO_WCSNCAT |
| #endif // _RWSTD_NO_WCSNCAT |
| |
| #ifndef _RWSTD_NO_WCSNCMP |
| using ::wcsncmp; |
| #elif !defined (_RWSTD_NO_WCSNCMP_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int wcsncmp (const wchar_t*, const wchar_t*, size_t); |
| |
| namespace std { |
| |
| using ::wcsncmp; |
| |
| # undef _RWSTD_NO_WCSNCMP |
| #else |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) |
| { |
| if (!__n) |
| return 0; |
| for (; --__n && *__s1 && *__s1 == *__s2; ++__s1, ++__s2); |
| return int (*__s1 - *__s2); |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcsncmp; |
| |
| # undef _RWSTD_NO_WCSNCMP |
| #endif // _RWSTD_NO_WCSNCMP |
| |
| |
| #ifndef _RWSTD_NO_WCSNCPY |
| using ::wcsncpy; |
| #elif !defined (_RWSTD_NO_WCSNCPY_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wcsncpy (wchar_t*, const wchar_t*, size_t); |
| |
| namespace std { |
| |
| using ::wcsncpy; |
| |
| # undef _RWSTD_NO_WCSNCPY |
| #else // if defined (_RWSTD_NO_WCSNCPY) |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wcsncpy (wchar_t *__dst, const wchar_t *__src, size_t __n) |
| { |
| wchar_t *__s = __dst; |
| for (; __n && (*__s++ = *__src++); --__n); |
| while (__n--) |
| *__s = 0; |
| return __dst; |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcsncpy; |
| |
| # undef _RWSTD_NO_WCSNCPY |
| #endif // _RWSTD_NO_WCSNCPY |
| |
| |
| #ifndef _RWSTD_NO_WCSPBRK |
| using ::wcspbrk; |
| #elif !defined (_RWSTD_NO_WCSPBRK_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wcspbrk (wchar_t*, const wchar_t*); |
| |
| inline const wchar_t* wcspbrk (const wchar_t *__s1, const wchar_t *__s2) |
| { |
| return wcspbrk (_RWSTD_CONST_CAST (wchar_t*, __s1), __s2); |
| } |
| |
| namespace std { |
| |
| using ::wcspbrk; |
| |
| # undef _RWSTD_NO_WCSPBRK |
| #endif // _RWSTD_NO_WCSPBRK |
| |
| |
| #ifndef _RWSTD_NO_WCSRCHR |
| using ::wcsrchr; |
| #elif !defined (_RWSTD_NO_WCSRCHR_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" const wchar_t* wcsrchr (const wchar_t*, wchar_t); |
| |
| wchar_t* wcsrchr (wchar_t *__s, wchar_t __c) |
| { |
| return wcsrchr (_RWSTD_CONST_CAST (wchar_t*, __s), __c); |
| } |
| |
| namespace std { |
| |
| using ::wcsrchr; |
| |
| # undef _RWSTD_NO_WCSRCHR |
| #else // if defined (_RWSTD_NO_WCSRCHR) |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wcsrchr (wchar_t *__s, wchar_t __c) |
| { |
| wchar_t *__ss = __s; |
| while (*__ss++); |
| while (--__ss != __s && *__ss != __c); |
| return *__ss == __c ? __ss : 0; |
| } |
| |
| } // extern "C" |
| |
| inline const wchar_t* wcsrchr (const wchar_t *__s, wchar_t __c) |
| { |
| return wcsrchr (_RWSTD_CONST_CAST (wchar_t*, __s), __c); |
| } |
| |
| namespace std { |
| |
| using ::wcsrchr; |
| |
| # undef _RWSTD_NO_WCSRCHR |
| #endif // _RWSTD_NO_WCSRCHR |
| |
| |
| #ifndef _RWSTD_NO_WCSRTOMBS |
| using ::wcsrtombs; |
| #elif !defined (_RWSTD_NO_WCSRTOMBS_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t wcsrtombs (char*, const wchar_t**, size_t, _RWSTD_MBSTATE_T*); |
| |
| namespace std { |
| |
| using ::wcsrtombs; |
| |
| # undef _RWSTD_NO_WCSRTOMBS |
| #endif // _RWSTD_NO_WCSRTOMBS |
| |
| #ifndef _RWSTD_NO_WCSSPN |
| using ::wcsspn; |
| #else |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline size_t wcsspn (const wchar_t *__s1, const wchar_t *__s2) |
| { |
| const wchar_t *__s = __s1; |
| for (; *__s; ++__s) { |
| for (const wchar_t *__ss = __s2; *__ss != *__s; ++__ss) |
| if (!*__ss) |
| return __s - __s1; |
| } |
| return __s - __s1; |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wcsspn; |
| |
| # undef _RWSTD_NO_WCSSPN |
| #endif // _RWSTD_NO_WCSSPN |
| |
| #ifndef _RWSTD_NO_WCSSTR |
| using ::wcsstr; |
| #elif !defined (_RWSTD_NO_WCSSTR_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wcsstr (wchar_t*, const wchar_t*); |
| |
| inline const wchar_t* wcsstr (const wchar_t *__s1, const wchar_t *__s2) |
| { |
| return wcsstr (_RWSTD_CONST_CAST (wchar_t*, __s1), __s2); |
| } |
| |
| namespace std { |
| |
| using ::wcsstr; |
| |
| # undef _RWSTD_NO_WCSSTR |
| #else |
| |
| # ifdef _RWSTD_OS_HPUX |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wcsstr (wchar_t *__s1, const wchar_t *__s2) |
| { |
| return wcswcs (__s1, __s2); |
| } |
| |
| } // extern "C" |
| |
| inline wchar_t* wcsstr (wchar_t *__s1, const wchar_t *__s2) |
| { |
| return wcswcs (__s1, __s2); |
| } |
| |
| namespace std { |
| |
| using ::wcsstr; |
| |
| # undef _RWSTD_NO_WCSSTR |
| # endif // _RWSTD_OS_HPUX |
| |
| #endif // _RWSTD_NO_WCSSTR |
| |
| #ifndef _RWSTD_NO_WCSTOD |
| using ::wcstod; |
| #elif !defined (_RWSTD_NO_WCSTOD_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" double wcstod (const wchar_t*, wchar_t**); |
| |
| namespace std { |
| |
| using ::wcstod; |
| |
| # undef _RWSTD_NO_WCSTOD |
| #endif // _RWSTD_NO_WCSTOD[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_WCSTOK |
| using ::wcstok; |
| #elif !defined (_RWSTD_NO_WCSTOK_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wcstok (wchar_t*, const wchar_t*, wchar_t**); |
| |
| namespace std { |
| |
| using ::wcstok; |
| |
| # undef _RWSTD_NO_WCSTOK |
| #elif defined (_MSC_VER) && 1400 <= _MSC_VER |
| |
| } // namespace std |
| |
| /* extern "C++" */ inline wchar_t* |
| wcstok (wchar_t* __s1, const wchar_t* __s2, wchar_t** __ptr) |
| { |
| return wcstok_s (__s1, __s2, __ptr); |
| } |
| |
| namespace std { |
| |
| using ::wcstok; |
| |
| # undef _RWSTD_NO_WCSTOK |
| # undef _RWSTD_NO_WCSTOK_IN_LIBC |
| #endif // _RWSTD_NO_WCSTOK[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_WCSTOL |
| using ::wcstol; |
| #elif !defined (_RWSTD_NO_WCSTOL_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" long wcstol (const wchar_t*, wchar_t**, int); |
| |
| namespace std { |
| |
| using ::wcstol; |
| |
| # undef _RWSTD_NO_WCSTOL |
| #endif // _RWSTD_NO_WCSTOL[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_WCSTOUL |
| using ::wcstoul; |
| #elif !defined (_RWSTD_NO_WCSTOUL_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" unsigned long wcstoul (const wchar_t*, wchar_t**, int); |
| |
| namespace std { |
| |
| using ::wcstoul; |
| |
| # undef _RWSTD_NO_WCSTOUL |
| #endif // _RWSTD_NO_WCSTOUL[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_WCSXFRM |
| using ::wcsxfrm; |
| #elif !defined (_RWSTD_NO_WCSXFRM_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" size_t wcsxfrm (wchar_t*, const wchar_t*, size_t); |
| |
| namespace std { |
| |
| using ::wcsxfrm; |
| |
| # undef _RWSTD_NO_WCSXFRM |
| #endif // _RWSTD_NO_WCSXFRM[_IN_LIBC] |
| |
| #ifndef _RWSTD_NO_WCTOB |
| using ::wctob; |
| #elif !defined (_RWSTD_NO_WCTOB_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int wctob (wint_t); |
| |
| namespace std { |
| |
| using ::wctob; |
| |
| # undef _RWSTD_NO_WCTOB |
| #endif // _RWSTD_NO_WCTOB |
| |
| |
| #ifndef _RWSTD_NO_WMEMCHR |
| using ::wmemchr; |
| #else |
| |
| } // namespace std |
| |
| extern "C" { |
| |
| inline wchar_t* wmemchr (wchar_t* __s, wchar_t __c, size_t __n) |
| { |
| for (; __n ; --__n, ++__s) |
| if (*__s == __c) |
| return __s; |
| return 0; |
| } |
| |
| } // extern "C" |
| |
| inline const wchar_t* wmemchr (const wchar_t* __s, wchar_t __c, size_t __n) |
| { |
| return wmemchr (_RWSTD_CONST_CAST (wchar_t*, __s), __c, __n); |
| } |
| |
| namespace std { |
| |
| using ::wmemchr; |
| |
| # undef _RWSTD_NO_WMEMCHR |
| #endif // _RWSTD_NO_WMEMCHR |
| |
| |
| #ifndef _RWSTD_NO_WMEMCMP |
| using ::wmemcmp; |
| #elif !defined (_RWSTD_NO_WMEMCMP_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" int wmemcmp (const wchar_t*, const wchar_t*, size_t); |
| |
| namespace std { |
| |
| using ::wmemcmp; |
| |
| #else // if _RWSTD_NO_WMEMCMP && _RWSTD_NO_WMEMCMP_IN_LIBC |
| |
| } // namespace std |
| |
| namespace __rw { |
| |
| _RWSTD_EXPORT int |
| __rw_wmemcmp (const wchar_t*, const wchar_t*, size_t); |
| |
| } // namespace __rw |
| |
| extern "C" { |
| |
| inline int |
| wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) |
| { |
| return _RW::__rw_wmemcmp (__s1, __s2, __n); |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wmemcmp; |
| |
| #endif // _RWSTD_NO_WMEMCMP |
| |
| #undef _RWSTD_NO_WMEMCMP |
| |
| |
| #ifndef _RWSTD_NO_WMEMCPY |
| using ::wmemcpy; |
| #elif !defined (_RWSTD_NO_WMEMCPY_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wmemcpy (wchar_t*, const wchar_t*, size_t); |
| |
| namespace std { |
| |
| using ::wmemcpy; |
| |
| #else // if _RWSTD_NO_WMEMCPY && _RWSTD_NO_WMEMCPY_IN_LIBC |
| |
| } // namespace std |
| |
| namespace __rw { |
| |
| _RWSTD_EXPORT wchar_t* |
| __rw_wmemcpy (wchar_t*, const wchar_t*, size_t); |
| |
| } // namespace __rw |
| |
| |
| extern "C" { |
| |
| inline wchar_t* |
| wmemcpy (wchar_t *__dst, const wchar_t *__src, size_t __n) |
| { |
| return _RW::__rw_wmemcpy (__dst, __src, __n); |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wmemcpy; |
| |
| #endif // _RWSTD_NO_WMEMCPY |
| |
| #undef _RWSTD_NO_WMEMCPY |
| |
| |
| #ifndef _RWSTD_NO_WMEMMOVE |
| using ::wmemmove; |
| #elif !defined (_RWSTD_NO_WMEMMOVE_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wmemmove (wchar_t*, const wchar_t*, size_t); |
| |
| namespace std { |
| |
| using ::wmemmove; |
| |
| #else // if _RWSTD_NO_WMEMMOVE && _RWSTD_NO_WMEMMOVE_IN_LIBC |
| |
| } // namespace std |
| |
| namespace __rw { |
| |
| _RWSTD_EXPORT wchar_t* |
| __rw_wmemmove (wchar_t*, const wchar_t*, size_t); |
| |
| } // namespace __rw |
| |
| extern "C" { |
| |
| inline wchar_t* |
| wmemmove (wchar_t *__dst, const wchar_t *__src, size_t __n) |
| { |
| return _RW::__rw_wmemmove (__dst, __src, __n); |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wmemmove; |
| |
| #endif // _RWSTD_NO_WMEMMOVE |
| |
| #undef _RWSTD_NO_WMEMMOVE |
| |
| |
| #ifndef _RWSTD_NO_WMEMSET |
| using ::wmemset; |
| #elif !defined (_RWSTD_NO_WMEMSET_IN_LIBC) |
| |
| } // namespace std |
| |
| extern "C" wchar_t* wmemset (wchar_t*, wchar_t, size_t); |
| |
| namespace std { |
| |
| using ::wmemset; |
| |
| #else // if _RWSTD_NO_WMEMSET && _RWSTD_NO_WMEMSET_IN_LIBC |
| |
| } // namespace std |
| |
| namespace __rw { |
| |
| _RWSTD_EXPORT wchar_t* |
| __rw_wmemset (wchar_t*, wchar_t, size_t); |
| |
| } // namespace __rw |
| |
| extern "C" { |
| |
| inline wchar_t* |
| wmemset (wchar_t* __s, wchar_t __c, size_t __n) |
| { |
| return _RW::__rw_wmemset (__s, __c, __n); |
| } |
| |
| } // extern "C" |
| |
| namespace std { |
| |
| using ::wmemset; |
| |
| #endif // _RWSTD_NO_WMEMSET |
| |
| #undef _RWSTD_NO_WMEMSET |
| |
| } // std |
| |
| #endif // !_RWSTD_NO_USING_LIBC_IN_STD |
| |
| #endif // !_RWSTD_NO_NAMESPACE && !_RWSTD_NO_HONOR_STD |
| |
| #endif // _RWSTD_CWCHAR_INCLUDED |
| |
| #endif // _RWSTD_NO_DEPRECATED_C_HEADERS |
| |
| #endif // _RWSTD_NO_PURE_C_HEADERS |