|  | // -*- C++ -*- | 
|  | /*************************************************************************** | 
|  | * | 
|  | * cstring - C++ Standard library interface to the ANSI C header string.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 1994-2006 Rogue Wave Software. | 
|  | * | 
|  | **************************************************************************/ | 
|  |  | 
|  | #include <rw/_defs.h> | 
|  |  | 
|  | #ifndef _RWSTD_NO_PURE_C_HEADERS | 
|  | #  include <ansi/_cstring.h> | 
|  | #else | 
|  |  | 
|  | #ifndef _RWSTD_NO_DEPRECATED_C_HEADERS | 
|  |  | 
|  | #ifndef _RWSTD_NO_NAMESPACE | 
|  |  | 
|  | #ifndef _RWSTD_NAMESPACE_STD_OPEN | 
|  | #define _RWSTD_NAMESPACE_STD_OPEN 15 | 
|  |  | 
|  | _RWSTD_NAMESPACE (std) { | 
|  |  | 
|  | #endif   // _RWSTD_NAMESPACE_STD_OPEN | 
|  |  | 
|  |  | 
|  | #include _RWSTD_ANSI_C_STRING_H | 
|  |  | 
|  |  | 
|  | #if _RWSTD_NAMESPACE_STD_OPEN == 15 | 
|  | #undef _RWSTD_NAMESPACE_STD_OPEN | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | #endif   // _RWSTD_NAMESPACE_STD_OPEN == 15 | 
|  |  | 
|  |  | 
|  | _RWSTD_NAMESPACE (std) { | 
|  |  | 
|  | #if 0 | 
|  |  | 
|  | const char* strchr (const char *__s, int __c); | 
|  | const char* strpbrk (const char *__s1, const char *__s2); | 
|  | const char* strrchr (const char *__s, int __c); | 
|  | const char* strstr (const char *__s1, const char *__s2); | 
|  | const void* memchr (const void *__p, int __c, size_t __n); | 
|  |  | 
|  | #endif   // 0/1 | 
|  |  | 
|  |  | 
|  | #ifndef _RWSTD_CSTRING_INCLUDED | 
|  | #define _RWSTD_CSTRING_INCLUDED | 
|  |  | 
|  | inline char* strchr (char *__s, int __c) | 
|  | { | 
|  | return strchr ((const char*)__s, __c); | 
|  | } | 
|  |  | 
|  | inline char* strpbrk (char *__s1, const char *__s2) | 
|  | { | 
|  | return strpbrk ((const char*)__s1, __s2); | 
|  | } | 
|  |  | 
|  | inline char* strrchr (char *__s, int __c) | 
|  | { | 
|  | return strrchr ((const char*)__s, __c); | 
|  | } | 
|  |  | 
|  | inline char* strstr (char *__s1, const char *__s2) | 
|  | { | 
|  | return strstr ((const char*)__s1, __s2); | 
|  | } | 
|  |  | 
|  | inline void* memchr (void *__p, int __c, size_t __n) | 
|  | { | 
|  | return memchr ((const void*)__p, __c, __n); | 
|  | } | 
|  |  | 
|  | #endif   // _RWSTD_CSTRING_INCLUDED | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_NAMESPACE) | 
|  |  | 
|  |  | 
|  | #include _RWSTD_ANSI_C_STRING_H | 
|  |  | 
|  |  | 
|  | #endif   // _RWSTD_NO_NAMESPACE | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_DEPRECATED_C_HEADERS) | 
|  |  | 
|  | #ifndef _RWSTD_CSTRING_INCLUDED | 
|  | #define _RWSTD_CSTRING_INCLUDED | 
|  |  | 
|  | #include _RWSTD_ANSI_C_STRING_H | 
|  |  | 
|  | #    undef index | 
|  | #    undef rindex | 
|  |  | 
|  | #    undef strcpy | 
|  | #    undef strcmp | 
|  |  | 
|  | #    undef strlen | 
|  | #    undef strchr | 
|  | #    undef strrchr | 
|  | #    undef strcat | 
|  | #    undef memchr | 
|  | #    undef memcpy | 
|  | #    undef memmove | 
|  | #    undef memcmp | 
|  | #    undef memset | 
|  |  | 
|  | #    undef memccpy | 
|  | #    undef strncat | 
|  | #    undef strncmp | 
|  | #    undef strncpy | 
|  |  | 
|  | #ifndef NULL | 
|  | #  define NULL 0 | 
|  | #endif   // NULL | 
|  |  | 
|  |  | 
|  | #if !defined (_RWSTD_NO_NAMESPACE) && !defined (_RWSTD_NO_HONOR_STD) && \ | 
|  | !defined (_RWSTD_NO_USING_LIBC_IN_STD) | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::size_t; | 
|  |  | 
|  | #ifndef _RWSTD_NO_MEMCHR | 
|  | using ::memchr; | 
|  | #elif !defined (_RWSTD_NO_MEMCHR_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" void* memchr (void*, int, size_t); | 
|  |  | 
|  | inline const void* memchr (const void *__p, int __c, size_t __n) | 
|  | { | 
|  | return memchr (_RWSTD_CONST_CAST (void*, __p), __c, __n); | 
|  | } | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::memchr; | 
|  |  | 
|  | #  undef _RWSTD_NO_MEMCHR | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_MEMCHR) | 
|  | #endif   // _RWSTD_NO_MEMCHR | 
|  |  | 
|  | #ifndef _RWSTD_NO_MEMCMP | 
|  | using ::memcmp; | 
|  | #elif !defined (_RWSTD_NO_MEMCMP_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" int memcmp (const void*, const void*, size_t); | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::memcmp; | 
|  |  | 
|  | #  undef _RWSTD_NO_MEMCMP | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_MEMCMP) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" { | 
|  |  | 
|  | inline int memcmp (const void *__s1, const void *__s2, size_t __n) | 
|  | { | 
|  | const char *__ss1 = _RWSTD_REINTERPRET_CAST (const char*, __s1); | 
|  | const char *__ss2 = _RWSTD_REINTERPRET_CAST (const char*, __s2); | 
|  |  | 
|  | for (; __n; --__n, ++__ss1, ++__ss2) | 
|  | if (*__ss1 != *__ss2) | 
|  | return *__ss1 - *__ss2; | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | }   // extern "C" | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::memcmp; | 
|  |  | 
|  | #  undef _RWSTD_NO_MEMCMP | 
|  |  | 
|  | #endif   // _RWSTD_NO_MEMCMP | 
|  |  | 
|  | #ifndef _RWSTD_NO_MEMCPY | 
|  | using ::memcpy; | 
|  | #elif !defined (_RWSTD_NO_MEMCPY_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" void* memcpy (void*, const void*, size_t); | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::memcpy; | 
|  |  | 
|  | #  undef _RWSTD_NO_MEMCPY | 
|  |  | 
|  | #else | 
|  | #endif   // _RWSTD_NO_MEMCPY | 
|  |  | 
|  | #ifndef _RWSTD_NO_MEMMOVE | 
|  | using ::memmove; | 
|  | #elif !defined (_RWSTD_NO_MEMMOVE_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" void* memmove (void*, const void*, size_t); | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::memmove; | 
|  |  | 
|  | #  undef _RWSTD_NO_MEMMOVE | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_MEMMOVE) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" { | 
|  |  | 
|  | inline void* memmove (void *__dest, const void *__src, size_t __n) | 
|  | { | 
|  | char       *__d = _RWSTD_REINTERPRET_CAST (char*, __dest); | 
|  | const char *__s = _RWSTD_REINTERPRET_CAST (const char*, __src); | 
|  |  | 
|  | if (__d < __s || __d >= __s + __n) | 
|  | memcpy (__d, __s, __n); | 
|  | else { | 
|  | // regions overlap | 
|  | __d += __n; | 
|  | __s += __n; | 
|  | while (__n--) | 
|  | *--__d = *--__s; | 
|  | } | 
|  | return __dest; | 
|  | } | 
|  |  | 
|  | }   // extern "C" | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::memmove; | 
|  |  | 
|  | #  undef _RWSTD_NO_MEMMOVE | 
|  |  | 
|  | #endif   // _RWSTD_NO_MEMMOVE | 
|  |  | 
|  | #ifndef _RWSTD_NO_MEMSET | 
|  | using ::memset; | 
|  | #else   // if defined (_RWSTD_NO_MEMSET) | 
|  | #endif   // _RWSTD_NO_MEMSET | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRCAT | 
|  | using ::strcat; | 
|  | #else   // if defined (_RWSTD_NO_STRCAT) | 
|  | #endif   // _RWSTD_NO_STRCAT | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRCHR | 
|  | using ::strchr; | 
|  | #elif !defined (_RWSTD_NO_STRCHR_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" char* strchr (char*, int); | 
|  |  | 
|  | inline const char* strchr (const char *__s, int __c) | 
|  | { | 
|  | return strchr (_RWSTD_CONST_CAST (char*, __s), __c); | 
|  | } | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::strchr; | 
|  |  | 
|  | #  undef _RWSTD_NO_STRCHR | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_STRCHR) | 
|  | #endif   // _RWSTD_NO_STRCHR | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRCMP | 
|  | using ::strcmp; | 
|  | #elif !defined (_RWSTD_NO_STRCMP_IN_LIBC) | 
|  | #else   // if defined (_RWSTD_NO_STRCMP) | 
|  | #endif   // _RWSTD_NO_STRCMP | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRCOLL | 
|  | using ::strcoll; | 
|  | #else   // if defined (_RWSTD_NO_STRCOLL) | 
|  | #endif   // _RWSTD_NO_STRCOLL | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRCPY | 
|  | using ::strcpy; | 
|  | #else   // if defined (_RWSTD_NO_STRCPY) | 
|  | #endif   // _RWSTD_NO_STRCPY | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRCSPN | 
|  | using ::strcspn; | 
|  | #else   // if defined (_RWSTD_NO_STRCSPN) | 
|  | #endif   // _RWSTD_NO_STRCSPN | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRERROR | 
|  | using ::strerror; | 
|  | #else   // if defined (_RWSTD_NO_STRERROR) | 
|  | #endif   // _RWSTD_NO_STRERROR | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRLEN | 
|  | using ::strlen; | 
|  | #else   // if defined (_RWSTD_NO_STRLEN) | 
|  | #endif   // _RWSTD_NO_STRLEN | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRNCAT | 
|  | using ::strncat; | 
|  | #else   // if defined (_RWSTD_NO_STRNCAT) | 
|  | #endif   // _RWSTD_NO_STRNCAT | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRNCMP | 
|  | using ::strncmp; | 
|  | #else   // if defined (_RWSTD_NO_STRNCMP) | 
|  | #endif   // _RWSTD_NO_STRNCMP | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRNCPY | 
|  | using ::strncpy; | 
|  | #else   // if defined (_RWSTD_NO_STRNCPY) | 
|  | #endif   // _RWSTD_NO_STRNCPY | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRPBRK | 
|  | using ::strpbrk; | 
|  | #elif !defined (_RWSTD_NO_STRPBRK_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" char* strpbrk (char*, const char*); | 
|  |  | 
|  | inline const char* strpbrk (const char *__s, const char *__pat) | 
|  | { | 
|  | return strpbrk (_RWSTD_CONST_CAST (char*, __s), __pat); | 
|  | } | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::strpbrk; | 
|  |  | 
|  | #  undef _RWSTD_NO_STRPBRK | 
|  |  | 
|  | #else | 
|  | #endif   // _RWSTD_NO_STRPBRK | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRRCHR | 
|  | using ::strrchr; | 
|  | #elif !defined (_RWSTD_NO_STRRCHR_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" char* strrchr (char*, int); | 
|  |  | 
|  | inline const char* strrchr (const char *__s, int __c) | 
|  | { | 
|  | return strrchr (_RWSTD_CONST_CAST (char*, __s), __c); | 
|  | } | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::strrchr; | 
|  |  | 
|  | #  undef _RWSTD_NO_STRRCHR | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_STRRCHR) | 
|  |  | 
|  | #endif   // _RWSTD_NO_STRRCHR | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRSPN | 
|  | using ::strspn; | 
|  | #else   // if defined (_RWSTD_NO_STRSPN) | 
|  | #endif   // _RWSTD_NO_STRSPN | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRSTR | 
|  | using ::strstr; | 
|  | #elif !defined (_RWSTD_NO_STRSTR_IN_LIBC) | 
|  |  | 
|  | }   // namespace std | 
|  |  | 
|  | extern "C" char* strstr (char*, const char*); | 
|  |  | 
|  | inline const char* strstr (const char *__s1, const char *__s2) | 
|  | { | 
|  | return strstr (_RWSTD_CONST_CAST (char*, __s1), __s2); | 
|  | } | 
|  |  | 
|  | namespace std { | 
|  |  | 
|  | using ::strstr; | 
|  |  | 
|  | #  undef _RWSTD_NO_STRSTR | 
|  |  | 
|  | #else   // if defined (_RWSTD_NO_STRSTR) | 
|  | #endif   // _RWSTD_NO_STRSTR | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRTOK | 
|  | using ::strtok; | 
|  | #else   // if defined (_RWSTD_NO_STRTOK) | 
|  | #endif   // _RWSTD_NO_STRTOK | 
|  |  | 
|  | #ifndef _RWSTD_NO_STRXFRM | 
|  | using ::strxfrm; | 
|  | #else   // if defined (_RWSTD_NO_STRXFRM) | 
|  | #endif   // _RWSTD_NO_STRXFRM | 
|  |  | 
|  | }   // std | 
|  |  | 
|  | #endif   // !NO_NAMESPACE && !NO_HONOR_STD && !NO_USING_LIBC_IN_STD | 
|  |  | 
|  | #endif   // _RWSTD_CSTRING_INCLUDED | 
|  |  | 
|  | #endif   // _RWSTD_NO_DEPRECATED_C_HEADERS | 
|  |  | 
|  | #endif   // _RWSTD_NO_PURE_C_HEADERS |