This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch to fix const-correctness of c_std string functions



The following is a patch to fix the const-correctness of some of the c_std
null-terminated C string (and wide string) functions as per the C++ standard.


Index: libstdc++-v3/include/c_std/bits/std_cstring.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/c_std/bits/std_cstring.h,v
retrieving revision 1.5
diff -c -3 -p -r1.5 std_cstring.h
*** std_cstring.h	2001/02/05 22:27:40	1.5
--- std_cstring.h	2001/03/29 02:25:25
*************** namespace std 
*** 79,91 ****
    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" void* memchr(const void*, int, size_t); 
!   extern "C" char* strchr(const char*, int); 
    extern "C" size_t strcspn(const char*, const char*); 
!   extern "C" char* strpbrk(const char*, const char*); 
!   extern "C" char* strrchr(const char*, int); 
    extern "C" size_t strspn(const char*, const char*); 
!   extern "C" char* strstr(const char*, const char*); 
    extern "C" char* strtok(char*, const char*); 
    extern "C" void* memset(void*, int, size_t); 
    extern "C" char* strerror(int); 
--- 79,116 ----
    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 void*
!   memchr(void* __p, int __c, size_t __n)
!   {
!     return const_cast<void*>(memchr(const_cast<const void*>(__p), __c, __n));
!   }
!   extern "C" const char* strchr(const char*, int); 
!   inline char*
!   strchr(char* __s1, int __n)
!   {
!     return const_cast<char*>(strchr(const_cast<const char*>(__s1), __n));
!   }
    extern "C" size_t strcspn(const char*, const char*); 
!   extern "C" const char* strpbrk(const char*, const char*); 
!   inline char*
!   strpbrk(char* __s1, const char* __s2)
!   {
!     return const_cast<char*>(strpbrk(const_cast<const char*>(__s1), __s2));
!   }
!   extern "C" const char* strrchr(const char*, int); 
!   inline char*
!   strrchr(char* __s1, int __n)
!   {
!     return const_cast<char*>(strrchr(const_cast<const char*>(__s1), __n));
!   }
    extern "C" size_t strspn(const char*, const char*); 
!   extern "C" const char* strstr(const char*, const char*); 
!   inline char*
!   strstr(char* __s1, const char* __s2)
!   {
!     return const_cast<char*>(strstr(const_cast<const char*>(__s1), __s2));
!   }
    extern "C" char* strtok(char*, const char*); 
    extern "C" void* memset(void*, int, size_t); 
    extern "C" char* strerror(int); 
Index: libstdc++-v3/include/c_std/bits/std_cwchar.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/c_std/bits/std_cwchar.h,v
retrieving revision 1.5
diff -c -3 -p -r1.5 std_cwchar.h
*** std_cwchar.h	2001/02/05 22:27:40	1.5
--- std_cwchar.h	2001/03/29 02:25:25
*************** namespace std
*** 157,171 ****
    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" wchar_t* wcschr(const wchar_t*, wchar_t); 
    extern "C" size_t wcscspn(const wchar_t*, const wchar_t*); 
    extern "C" size_t wcslen(const wchar_t*); 
!   extern "C" wchar_t* wcspbrk(const wchar_t*, const wchar_t*); 
!   extern "C" wchar_t* wcsrchr(const wchar_t*, wchar_t); 
    extern "C" size_t wcsspn(const wchar_t*, const wchar_t*); 
!   extern "C" wchar_t* wcsstr(const wchar_t*, const wchar_t*); 
    extern "C" wchar_t* wcstok(wchar_t*, const wchar_t*, wchar_t**); 
!   extern "C" wchar_t* wmemchr(const wchar_t*, wchar_t, size_t);
    extern "C" int wmemcmp(const wchar_t*, const wchar_t*, size_t); 
    //extern "C" int wmemcmp(wchar_t*, const wchar_t*, size_t); 
    extern "C" wchar_t* wmemcpy(wchar_t*, const wchar_t*, size_t); 
--- 157,196 ----
    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 wchar_t*
!   wcschr(wchar_t* __p, wchar_t __c)
!   {
!     return const_cast<wchar_t*>(wcschr(const_cast<const wchar_t*>(__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 wchar_t*
!   wcspbrk(wchar_t* __s1, wchar_t* __s2)
!   {
!     return const_cast<wchar_t*>(wcspbrk(const_cast<const wchar_t*>(__s1), __s2));
!   }
!   extern "C" const wchar_t* wcsrchr(const wchar_t*, wchar_t); 
!   inline wchar_t*
!   wcsrchr(wchar_t* __p, wchar_t __c)
!   {
!     return const_cast<wchar_t*>(wcsrchr(const_cast<const wchar_t*>(__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 wchar_t*
!   wcsstr(wchar_t* __s1, wchar_t* __s2)
!   {
!     return const_cast<wchar_t*>(wcsstr(const_cast<const wchar_t*>(__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 wchar_t*
!   wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
!   {
!     return const_cast<wchar_t*>(wmemchr(const_cast<const wchar_t*>(__p), __c, __n));
!   }
    extern "C" int wmemcmp(const wchar_t*, const wchar_t*, size_t); 
    //extern "C" int wmemcmp(wchar_t*, const wchar_t*, size_t); 
    extern "C" wchar_t* wmemcpy(wchar_t*, const wchar_t*, size_t); 

-- 

Stephen M. Webb
Principal Consultant, Bregmasoft
stephen at bregmasoft dot com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]