From eea790f7b3b5e75cb6d1076e1d54309d9110b827 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Tue, 8 May 2001 23:53:55 +0000 Subject: [PATCH] std_cstring.h (memchr): Correct definitions. 2001-05-08 Benjamin Kosnik * include/c_std/bits/std_cstring.h (memchr): Correct definitions. (strchr): Same. (strpbrk): Same. (strrchr): Same. (strstr): Same. * include/c_std/bits/std_cwchar.h (wcschr): Same. (wcsbrk): Same. (wcsrchr): Same. (wcsstr): Same. (wmemchr): Same. * testsuite/21_strings/c_strings.cc: Add tests. From-SVN: r41919 --- libstdc++-v3/ChangeLog | 14 +++++ libstdc++-v3/include/c_std/bits/std_cstring.h | 53 +++++++++++------- libstdc++-v3/include/c_std/bits/std_cwchar.h | 54 ++++++++++++------- .../testsuite/21_strings/c_strings.cc | 30 ++++++++++- 4 files changed, 110 insertions(+), 41 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 13d9b06b9bd..7026644405f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2001-05-08 Benjamin Kosnik + + * include/c_std/bits/std_cstring.h (memchr): Correct definitions. + (strchr): Same. + (strpbrk): Same. + (strrchr): Same. + (strstr): Same. + * include/c_std/bits/std_cwchar.h (wcschr): Same. + (wcsbrk): Same. + (wcsrchr): Same. + (wcsstr): Same. + (wmemchr): Same. + * testsuite/21_strings/c_strings.cc: Add tests. + 2001-05-07 Benjamin Kosnik libstdc++/2523 diff --git a/libstdc++-v3/include/c_std/bits/std_cstring.h b/libstdc++-v3/include/c_std/bits/std_cstring.h index 52b490264ed..0134eb22d8f 100644 --- a/libstdc++-v3/include/c_std/bits/std_cstring.h +++ b/libstdc++-v3/include/c_std/bits/std_cstring.h @@ -79,38 +79,51 @@ namespace std extern "C" int strcoll(const char*, const char*); extern "C" int strncmp(const char*, const char*, size_t); extern "C" size_t strxfrm(char*, const char*, size_t); - extern "C" const void* memchr(const void*, int, size_t); + + inline const void* + memchr(const void* __p, int __c, size_t __n) + { return const_cast(::memchr(__p, __c, __n)); } + inline void* memchr(void* __p, int __c, size_t __n) - { - return const_cast(memchr(const_cast(__p), __c, __n)); - } - extern "C" const char* strchr(const char*, int); + { return ::memchr(const_cast(__p), __c, __n); } + + inline const char* + strchr(const char* __s1, int __n) + { return const_cast(::strchr(__s1, __n)); } + inline char* strchr(char* __s1, int __n) - { - return const_cast(strchr(const_cast(__s1), __n)); - } + { return ::strchr(const_cast(__s1), __n); } + extern "C" size_t strcspn(const char*, const char*); - extern "C" const char* strpbrk(const char*, const char*); + + inline const char* + strpbrk(const char* __s1, const char* __s2) + { return const_cast(::strpbrk(__s1, __s2)); } + inline char* strpbrk(char* __s1, const char* __s2) - { - return const_cast(strpbrk(const_cast(__s1), __s2)); - } - extern "C" const char* strrchr(const char*, int); + { return ::strpbrk(const_cast(__s1), __s2); } + + inline const char* + strrchr(const char* __s1, int __n) + { return const_cast(::strrchr(__s1, __n)); } + inline char* strrchr(char* __s1, int __n) - { - return const_cast(strrchr(const_cast(__s1), __n)); - } + { return ::strrchr(const_cast(__s1), __n); } + extern "C" size_t strspn(const char*, const char*); - extern "C" const char* strstr(const char*, const char*); + + inline const char* + strstr(const char* __s1, const char* __s2) + { return const_cast(::strstr(__s1, __s2)); } + inline char* strstr(char* __s1, const char* __s2) - { - return const_cast(strstr(const_cast(__s1), __s2)); - } + { return ::strstr(const_cast(__s1), __s2); } + extern "C" char* strtok(char*, const char*); extern "C" void* memset(void*, int, size_t); extern "C" char* strerror(int); diff --git a/libstdc++-v3/include/c_std/bits/std_cwchar.h b/libstdc++-v3/include/c_std/bits/std_cwchar.h index 0919ab0d5bf..27659354771 100644 --- a/libstdc++-v3/include/c_std/bits/std_cwchar.h +++ b/libstdc++-v3/include/c_std/bits/std_cwchar.h @@ -156,40 +156,54 @@ namespace std extern "C" int wcscoll(const wchar_t*, const wchar_t*); extern "C" int wcsncmp(const wchar_t*, const wchar_t*, size_t); extern "C" size_t wcsxfrm(wchar_t*, const wchar_t*, size_t); - extern "C" const wchar_t* wcschr(const wchar_t*, wchar_t); + + inline const wchar_t* + wcschr(const wchar_t* __p, wchar_t __c) + { return const_cast(::wcschr(__p, __c)); } + inline wchar_t* wcschr(wchar_t* __p, wchar_t __c) - { - return const_cast(wcschr(const_cast(__p), __c)); - } + { return ::wcschr(const_cast(__p), __c); } + extern "C" size_t wcscspn(const wchar_t*, const wchar_t*); extern "C" size_t wcslen(const wchar_t*); - extern "C" const wchar_t* wcspbrk(const wchar_t*, const wchar_t*); + + inline const wchar_t* + wcspbrk(const wchar_t* __s1, wchar_t* __s2) + { return const_cast(::wcspbrk(__s1, __s2)); } + inline wchar_t* wcspbrk(wchar_t* __s1, wchar_t* __s2) - { - return const_cast(wcspbrk(const_cast(__s1), __s2)); - } - extern "C" const wchar_t* wcsrchr(const wchar_t*, wchar_t); + { return ::wcspbrk(const_cast(__s1), __s2); } + + inline const wchar_t* + wcsrchr(const wchar_t* __p, wchar_t __c) + { return const_cast(::wcsrchr(__p, __c)); } + inline wchar_t* wcsrchr(wchar_t* __p, wchar_t __c) - { - return const_cast(wcsrchr(const_cast(__p), __c)); - } + { return ::wcsrchr(const_cast(__p), __c); } + extern "C" size_t wcsspn(const wchar_t*, const wchar_t*); - extern "C" const wchar_t* wcsstr(const wchar_t*, const wchar_t*); + + inline const wchar_t* + wcsstr(const wchar_t* __s1, wchar_t* __s2) + { return const_cast(::wcsstr(__s1, __s2)); } + inline wchar_t* wcsstr(wchar_t* __s1, wchar_t* __s2) - { - return const_cast(wcsstr(const_cast(__s1), __s2)); - } + { return ::wcsstr(const_cast(__s1), __s2); } + extern "C" wchar_t* wcstok(wchar_t*, const wchar_t*, wchar_t**); - extern "C" const wchar_t* wmemchr(const wchar_t*, wchar_t, size_t); + + inline const wchar_t* + wmemchr(const wchar_t* __p, wchar_t __c, size_t __n) + { return const_cast(::wmemchr(__p, __c, __n)); } + inline wchar_t* wmemchr(wchar_t* __p, wchar_t __c, size_t __n) - { - return const_cast(wmemchr(const_cast(__p), __c, __n)); - } + { return ::wmemchr(const_cast(__p), __c, __n); } + extern "C" int wmemcmp(const wchar_t*, const wchar_t*, size_t); extern "C" wchar_t* wmemcpy(wchar_t*, const wchar_t*, size_t); extern "C" wchar_t* wmemmove(wchar_t*, const wchar_t*, size_t); diff --git a/libstdc++-v3/testsuite/21_strings/c_strings.cc b/libstdc++-v3/testsuite/21_strings/c_strings.cc index 49b73f28fc0..e8536b7d137 100644 --- a/libstdc++-v3/testsuite/21_strings/c_strings.cc +++ b/libstdc++-v3/testsuite/21_strings/c_strings.cc @@ -24,7 +24,7 @@ #include #include -int main() +void test01() { bool test = true; char c = 'a'; @@ -62,6 +62,34 @@ int main() // void* memchr( void* s, int c, size_t n); cv = std::memchr(cv, 'a', 3); v = std::memchr(v, 'a', 3); +} + +void test02() +{ + using namespace std; + + const char* ccarray1 = "san francisco roof garden inspectors"; + const char* ccarray2 = "san francisco sunny-day park inspectors"; + char carray[30]; + strcpy(carray, ccarray1); + void* v; + const void* cv; + + memchr(cv, '/', 3); + strchr(ccarray1, '/'); + strpbrk(ccarray1, ccarray2); + strrchr(ccarray1, 'c'); + strstr(carray, carray); +} + +int main() +{ + test01(); + test02(); return 0; } + + + + -- 2.30.2