summaryrefslogtreecommitdiffstats
path: root/include/cstring
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2015-10-10 01:25:31 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2015-10-10 01:25:31 +0000
commit9f4f08db91e0a7bdeb20a52b80db566d328882ec (patch)
treef0b1d71ca1afb69260774c92c483006340d67461 /include/cstring
parente35e663f73251e7687adc52e075aa631062bc447 (diff)
downloadexternal_libcxx-9f4f08db91e0a7bdeb20a52b80db566d328882ec.tar.gz
external_libcxx-9f4f08db91e0a7bdeb20a52b80db566d328882ec.tar.bz2
external_libcxx-9f4f08db91e0a7bdeb20a52b80db566d328882ec.zip
Split <string.h> out of <cstring>.
Also fix the overload set for the five functions whose signatures change in the case where we can fix it. This is already covered by existing tests for the affected systems. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@249929 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/cstring')
-rw-r--r--include/cstring41
1 files changed, 23 insertions, 18 deletions
diff --git a/include/cstring b/include/cstring
index d60b9923c..5e1837202 100644
--- a/include/cstring
+++ b/include/cstring
@@ -78,37 +78,42 @@ using ::strcmp;
using ::strncmp;
using ::strcoll;
using ::strxfrm;
+using ::strcspn;
+using ::strspn;
+#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
+using ::strtok;
+#endif
+using ::memset;
+using ::strerror;
+using ::strlen;
-using ::memchr;
+// MSVCRT, GNU libc and its derivates already have the correct prototype in
+// <string.h> if __cplusplus is defined. This macro can be defined by users if
+// their C library provides the right signature.
+#if defined(__GLIBC__) || defined(_LIBCPP_MSVCRT) || defined(__sun__) || \
+ defined(_STRING_H_CPLUSPLUS_98_CONFORMANCE_)
+#define _LIBCPP_STRING_H_HAS_CONST_OVERLOADS
+#endif
+#ifdef _LIBCPP_STRING_H_HAS_CONST_OVERLOADS
using ::strchr;
-
-using ::strcspn;
-
using ::strpbrk;
-
using ::strrchr;
-
-using ::strspn;
-
+using ::memchr;
using ::strstr;
-
-// MSVCRT, GNU libc and its derivates already have the correct prototype in <string.h> #ifdef __cplusplus
-#if !defined(__GLIBC__) && !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_STRING_H_CPLUSPLUS_98_CONFORMANCE_)
+#else
+inline _LIBCPP_INLINE_VISIBILITY const char* strchr(const char* __s, int __c) {return ::strchr(__s, __c);}
inline _LIBCPP_INLINE_VISIBILITY char* strchr( char* __s, int __c) {return ::strchr(__s, __c);}
+inline _LIBCPP_INLINE_VISIBILITY const char* strpbrk(const char* __s1, const char* __s2) {return ::strpbrk(__s1, __s2);}
inline _LIBCPP_INLINE_VISIBILITY char* strpbrk( char* __s1, const char* __s2) {return ::strpbrk(__s1, __s2);}
+inline _LIBCPP_INLINE_VISIBILITY const char* strrchr(const char* __s, int __c) {return ::strrchr(__s, __c);}
inline _LIBCPP_INLINE_VISIBILITY char* strrchr( char* __s, int __c) {return ::strrchr(__s, __c);}
+inline _LIBCPP_INLINE_VISIBILITY const void* memchr(const void* __s, int __c, size_t __n) {return ::memchr(__s, __c, __n);}
inline _LIBCPP_INLINE_VISIBILITY void* memchr( void* __s, int __c, size_t __n) {return ::memchr(__s, __c, __n);}
+inline _LIBCPP_INLINE_VISIBILITY const char* strstr(const char* __s1, const char* __s2) {return ::strstr(__s1, __s2);}
inline _LIBCPP_INLINE_VISIBILITY char* strstr( char* __s1, const char* __s2) {return ::strstr(__s1, __s2);}
#endif
-#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
-using ::strtok;
-#endif
-using ::memset;
-using ::strerror;
-using ::strlen;
-
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_CSTRING