146035553Spatrick // -*- C++ -*-
2*4bdff4beSrobert //===----------------------------------------------------------------------===//
346035553Spatrick //
446035553Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
546035553Spatrick // See https://llvm.org/LICENSE.txt for license information.
646035553Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
746035553Spatrick //
846035553Spatrick //===----------------------------------------------------------------------===//
946035553Spatrick
1046035553Spatrick #ifndef _LIBCPP_STRING_H
1146035553Spatrick #define _LIBCPP_STRING_H
1246035553Spatrick
1346035553Spatrick /*
1446035553Spatrick string.h synopsis
1546035553Spatrick
1646035553Spatrick Macros:
1746035553Spatrick
1846035553Spatrick NULL
1946035553Spatrick
2046035553Spatrick Types:
2146035553Spatrick
2246035553Spatrick size_t
2346035553Spatrick
2446035553Spatrick void* memcpy(void* restrict s1, const void* restrict s2, size_t n);
2546035553Spatrick void* memmove(void* s1, const void* s2, size_t n);
2646035553Spatrick char* strcpy (char* restrict s1, const char* restrict s2);
2746035553Spatrick char* strncpy(char* restrict s1, const char* restrict s2, size_t n);
2846035553Spatrick char* strcat (char* restrict s1, const char* restrict s2);
2946035553Spatrick char* strncat(char* restrict s1, const char* restrict s2, size_t n);
3046035553Spatrick int memcmp(const void* s1, const void* s2, size_t n);
3146035553Spatrick int strcmp (const char* s1, const char* s2);
3246035553Spatrick int strncmp(const char* s1, const char* s2, size_t n);
3346035553Spatrick int strcoll(const char* s1, const char* s2);
3446035553Spatrick size_t strxfrm(char* restrict s1, const char* restrict s2, size_t n);
3546035553Spatrick const void* memchr(const void* s, int c, size_t n);
3646035553Spatrick void* memchr( void* s, int c, size_t n);
3746035553Spatrick const char* strchr(const char* s, int c);
3846035553Spatrick char* strchr( char* s, int c);
3946035553Spatrick size_t strcspn(const char* s1, const char* s2);
4046035553Spatrick const char* strpbrk(const char* s1, const char* s2);
4146035553Spatrick char* strpbrk( char* s1, const char* s2);
4246035553Spatrick const char* strrchr(const char* s, int c);
4346035553Spatrick char* strrchr( char* s, int c);
4446035553Spatrick size_t strspn(const char* s1, const char* s2);
4546035553Spatrick const char* strstr(const char* s1, const char* s2);
4646035553Spatrick char* strstr( char* s1, const char* s2);
4746035553Spatrick char* strtok(char* restrict s1, const char* restrict s2);
4846035553Spatrick void* memset(void* s, int c, size_t n);
4946035553Spatrick char* strerror(int errnum);
5046035553Spatrick size_t strlen(const char* s);
5146035553Spatrick
5246035553Spatrick */
5346035553Spatrick
5446035553Spatrick #include <__config>
5546035553Spatrick
5646035553Spatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
5746035553Spatrick # pragma GCC system_header
5846035553Spatrick #endif
5946035553Spatrick
60*4bdff4beSrobert #if __has_include_next(<string.h>)
6146035553Spatrick # include_next <string.h>
62*4bdff4beSrobert #endif
6346035553Spatrick
6446035553Spatrick // MSVCRT, GNU libc and its derivates may already have the correct prototype in
6546035553Spatrick // <string.h>. This macro can be defined by users if their C library provides
6646035553Spatrick // the right signature.
6746035553Spatrick #if defined(__CORRECT_ISO_CPP_STRING_H_PROTO) || defined(_LIBCPP_MSVCRT) || \
6846035553Spatrick defined(__sun__) || defined(_STRING_H_CPLUSPLUS_98_CONFORMANCE_)
6946035553Spatrick #define _LIBCPP_STRING_H_HAS_CONST_OVERLOADS
7046035553Spatrick #endif
7146035553Spatrick
7246035553Spatrick #if defined(__cplusplus) && !defined(_LIBCPP_STRING_H_HAS_CONST_OVERLOADS) && defined(_LIBCPP_PREFERRED_OVERLOAD)
7346035553Spatrick extern "C++" {
strchr(const char * __s,int __c)74*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strchr(const char* __s, int __c) {
75*4bdff4beSrobert return __builtin_strchr(__s, __c);
7646035553Spatrick }
strchr(char * __s,int __c)77*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strchr(char* __s, int __c) {
78*4bdff4beSrobert return __builtin_strchr(__s, __c);
79*4bdff4beSrobert }
80*4bdff4beSrobert
strpbrk(const char * __s1,const char * __s2)81*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strpbrk(const char* __s1, const char* __s2) {
82*4bdff4beSrobert return __builtin_strpbrk(__s1, __s2);
83*4bdff4beSrobert }
strpbrk(char * __s1,const char * __s2)84*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strpbrk(char* __s1, const char* __s2) {
85*4bdff4beSrobert return __builtin_strpbrk(__s1, __s2);
86*4bdff4beSrobert }
87*4bdff4beSrobert
strrchr(const char * __s,int __c)88*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strrchr(const char* __s, int __c) {
89*4bdff4beSrobert return __builtin_strrchr(__s, __c);
90*4bdff4beSrobert }
strrchr(char * __s,int __c)91*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strrchr(char* __s, int __c) {
92*4bdff4beSrobert return __builtin_strrchr(__s, __c);
93*4bdff4beSrobert }
94*4bdff4beSrobert
memchr(const void * __s,int __c,size_t __n)95*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const void* memchr(const void* __s, int __c, size_t __n) {
96*4bdff4beSrobert return __builtin_memchr(__s, __c, __n);
97*4bdff4beSrobert }
memchr(void * __s,int __c,size_t __n)98*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD void* memchr(void* __s, int __c, size_t __n) {
99*4bdff4beSrobert return __builtin_memchr(__s, __c, __n);
100*4bdff4beSrobert }
101*4bdff4beSrobert
strstr(const char * __s1,const char * __s2)102*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strstr(const char* __s1, const char* __s2) {
103*4bdff4beSrobert return __builtin_strstr(__s1, __s2);
104*4bdff4beSrobert }
strstr(char * __s1,const char * __s2)105*4bdff4beSrobert inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strstr(char* __s1, const char* __s2) {
106*4bdff4beSrobert return __builtin_strstr(__s1, __s2);
107*4bdff4beSrobert }
108*4bdff4beSrobert } // extern "C++"
10946035553Spatrick #endif
11046035553Spatrick
11146035553Spatrick #endif // _LIBCPP_STRING_H
112