xref: /llvm-project/libcxx/include/__cxx03/string.h (revision ce7771902dc50d900de639d499a60486b83f70e0)
1e78f53d1SNikolas Klauser // -*- C++ -*-
2e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===//
3e78f53d1SNikolas Klauser //
4e78f53d1SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5e78f53d1SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
6e78f53d1SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7e78f53d1SNikolas Klauser //
8e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===//
9e78f53d1SNikolas Klauser 
10*ce777190SNikolas Klauser #ifndef _LIBCPP___CXX03_STRING_H
11*ce777190SNikolas Klauser #define _LIBCPP___CXX03_STRING_H
12e78f53d1SNikolas Klauser 
13e78f53d1SNikolas Klauser /*
14e78f53d1SNikolas Klauser     string.h synopsis
15e78f53d1SNikolas Klauser 
16e78f53d1SNikolas Klauser Macros:
17e78f53d1SNikolas Klauser 
18e78f53d1SNikolas Klauser     NULL
19e78f53d1SNikolas Klauser 
20e78f53d1SNikolas Klauser Types:
21e78f53d1SNikolas Klauser 
22e78f53d1SNikolas Klauser     size_t
23e78f53d1SNikolas Klauser 
24e78f53d1SNikolas Klauser void* memcpy(void* restrict s1, const void* restrict s2, size_t n);
25e78f53d1SNikolas Klauser void* memmove(void* s1, const void* s2, size_t n);
26e78f53d1SNikolas Klauser char* strcpy (char* restrict s1, const char* restrict s2);
27e78f53d1SNikolas Klauser char* strncpy(char* restrict s1, const char* restrict s2, size_t n);
28e78f53d1SNikolas Klauser char* strcat (char* restrict s1, const char* restrict s2);
29e78f53d1SNikolas Klauser char* strncat(char* restrict s1, const char* restrict s2, size_t n);
30e78f53d1SNikolas Klauser int memcmp(const void* s1, const void* s2, size_t n);
31e78f53d1SNikolas Klauser int strcmp (const char* s1, const char* s2);
32e78f53d1SNikolas Klauser int strncmp(const char* s1, const char* s2, size_t n);
33e78f53d1SNikolas Klauser int strcoll(const char* s1, const char* s2);
34e78f53d1SNikolas Klauser size_t strxfrm(char* restrict s1, const char* restrict s2, size_t n);
35e78f53d1SNikolas Klauser const void* memchr(const void* s, int c, size_t n);
36e78f53d1SNikolas Klauser       void* memchr(      void* s, int c, size_t n);
37e78f53d1SNikolas Klauser const char* strchr(const char* s, int c);
38e78f53d1SNikolas Klauser       char* strchr(      char* s, int c);
39e78f53d1SNikolas Klauser size_t strcspn(const char* s1, const char* s2);
40e78f53d1SNikolas Klauser const char* strpbrk(const char* s1, const char* s2);
41e78f53d1SNikolas Klauser       char* strpbrk(      char* s1, const char* s2);
42e78f53d1SNikolas Klauser const char* strrchr(const char* s, int c);
43e78f53d1SNikolas Klauser       char* strrchr(      char* s, int c);
44e78f53d1SNikolas Klauser size_t strspn(const char* s1, const char* s2);
45e78f53d1SNikolas Klauser const char* strstr(const char* s1, const char* s2);
46e78f53d1SNikolas Klauser       char* strstr(      char* s1, const char* s2);
47e78f53d1SNikolas Klauser char* strtok(char* restrict s1, const char* restrict s2);
48e78f53d1SNikolas Klauser void* memset(void* s, int c, size_t n);
49e78f53d1SNikolas Klauser char* strerror(int errnum);
50e78f53d1SNikolas Klauser size_t strlen(const char* s);
51e78f53d1SNikolas Klauser 
52e78f53d1SNikolas Klauser */
53e78f53d1SNikolas Klauser 
5473fbae83SNikolas Klauser #include <__cxx03/__config>
55e78f53d1SNikolas Klauser 
56e78f53d1SNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
57e78f53d1SNikolas Klauser #  pragma GCC system_header
58e78f53d1SNikolas Klauser #endif
59e78f53d1SNikolas Klauser 
60e78f53d1SNikolas Klauser #if __has_include_next(<string.h>)
61e78f53d1SNikolas Klauser #  include_next <string.h>
62e78f53d1SNikolas Klauser #endif
63e78f53d1SNikolas Klauser 
64e78f53d1SNikolas Klauser // MSVCRT, GNU libc and its derivates may already have the correct prototype in
65e78f53d1SNikolas Klauser // <string.h>. This macro can be defined by users if their C library provides
66e78f53d1SNikolas Klauser // the right signature.
67e78f53d1SNikolas Klauser #if defined(__CORRECT_ISO_CPP_STRING_H_PROTO) || defined(_LIBCPP_MSVCRT) || defined(_STRING_H_CPLUSPLUS_98_CONFORMANCE_)
68e78f53d1SNikolas Klauser #  define _LIBCPP_STRING_H_HAS_CONST_OVERLOADS
69e78f53d1SNikolas Klauser #endif
70e78f53d1SNikolas Klauser 
71e78f53d1SNikolas Klauser #if defined(__cplusplus) && !defined(_LIBCPP_STRING_H_HAS_CONST_OVERLOADS) && defined(_LIBCPP_PREFERRED_OVERLOAD)
72e78f53d1SNikolas Klauser extern "C++" {
73e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strchr(const char* __s, int __c) {
74e78f53d1SNikolas Klauser   return __builtin_strchr(__s, __c);
75e78f53d1SNikolas Klauser }
76e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strchr(char* __s, int __c) {
77e78f53d1SNikolas Klauser   return __builtin_strchr(__s, __c);
78e78f53d1SNikolas Klauser }
79e78f53d1SNikolas Klauser 
80e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strpbrk(const char* __s1, const char* __s2) {
81e78f53d1SNikolas Klauser   return __builtin_strpbrk(__s1, __s2);
82e78f53d1SNikolas Klauser }
83e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strpbrk(char* __s1, const char* __s2) {
84e78f53d1SNikolas Klauser   return __builtin_strpbrk(__s1, __s2);
85e78f53d1SNikolas Klauser }
86e78f53d1SNikolas Klauser 
87e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strrchr(const char* __s, int __c) {
88e78f53d1SNikolas Klauser   return __builtin_strrchr(__s, __c);
89e78f53d1SNikolas Klauser }
90e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strrchr(char* __s, int __c) {
91e78f53d1SNikolas Klauser   return __builtin_strrchr(__s, __c);
92e78f53d1SNikolas Klauser }
93e78f53d1SNikolas Klauser 
94e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const void* memchr(const void* __s, int __c, size_t __n) {
95e78f53d1SNikolas Klauser   return __builtin_memchr(__s, __c, __n);
96e78f53d1SNikolas Klauser }
97e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD void* memchr(void* __s, int __c, size_t __n) {
98e78f53d1SNikolas Klauser   return __builtin_memchr(__s, __c, __n);
99e78f53d1SNikolas Klauser }
100e78f53d1SNikolas Klauser 
101e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD const char* strstr(const char* __s1, const char* __s2) {
102e78f53d1SNikolas Klauser   return __builtin_strstr(__s1, __s2);
103e78f53d1SNikolas Klauser }
104e78f53d1SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD char* strstr(char* __s1, const char* __s2) {
105e78f53d1SNikolas Klauser   return __builtin_strstr(__s1, __s2);
106e78f53d1SNikolas Klauser }
107e78f53d1SNikolas Klauser } // extern "C++"
108e78f53d1SNikolas Klauser #endif
109e78f53d1SNikolas Klauser 
110*ce777190SNikolas Klauser #endif // _LIBCPP___CXX03_STRING_H
111