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