/ include / string.h
string.h
  1  /*
  2   * Copyright (c) 2000, 2007, 2010 Apple Inc. All rights reserved.
  3   *
  4   * @APPLE_LICENSE_HEADER_START@
  5   *
  6   * This file contains Original Code and/or Modifications of Original Code
  7   * as defined in and that are subject to the Apple Public Source License
  8   * Version 2.0 (the 'License'). You may not use this file except in
  9   * compliance with the License. Please obtain a copy of the License at
 10   * http://www.opensource.apple.com/apsl/ and read it before using this
 11   * file.
 12   *
 13   * The Original Code and all software distributed under the License are
 14   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 15   * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 16   * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 17   * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 18   * Please see the License for the specific language governing rights and
 19   * limitations under the License.
 20   *
 21   * @APPLE_LICENSE_HEADER_END@
 22   */
 23  /*-
 24   * Copyright (c) 1990, 1993
 25   *	The Regents of the University of California.  All rights reserved.
 26   *
 27   * Redistribution and use in source and binary forms, with or without
 28   * modification, are permitted provided that the following conditions
 29   * are met:
 30   * 1. Redistributions of source code must retain the above copyright
 31   *    notice, this list of conditions and the following disclaimer.
 32   * 2. Redistributions in binary form must reproduce the above copyright
 33   *    notice, this list of conditions and the following disclaimer in the
 34   *    documentation and/or other materials provided with the distribution.
 35   * 3. All advertising materials mentioning features or use of this software
 36   *    must display the following acknowledgement:
 37   *	This product includes software developed by the University of
 38   *	California, Berkeley and its contributors.
 39   * 4. Neither the name of the University nor the names of its contributors
 40   *    may be used to endorse or promote products derived from this software
 41   *    without specific prior written permission.
 42   *
 43   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 44   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 45   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 46   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 47   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 48   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 49   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 50   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 51   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 52   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 53   * SUCH DAMAGE.
 54   *
 55   *	@(#)string.h	8.1 (Berkeley) 6/2/93
 56   */
 57  
 58  #ifndef _STRING_H_
 59  #define	_STRING_H_
 60  
 61  #include <_types.h>
 62  #include <sys/cdefs.h>
 63  #include <Availability.h>
 64  #include <sys/_types/_size_t.h>
 65  #include <sys/_types/_null.h>
 66  
 67  /* ANSI-C */
 68  
 69  __BEGIN_DECLS
 70  void	*memchr(const void *__s, int __c, size_t __n);
 71  int	 memcmp(const void *__s1, const void *__s2, size_t __n);
 72  void	*memcpy(void *__dst, const void *__src, size_t __n);
 73  void	*memmove(void *__dst, const void *__src, size_t __len);
 74  void	*memset(void *__b, int __c, size_t __len);
 75  #ifndef UNIFDEF_DRIVERKIT
 76  char	*strcat(char *__s1, const char *__s2);
 77  #endif /* UNIFDEF_DRIVERKIT */
 78  char	*strchr(const char *__s, int __c);
 79  int	 strcmp(const char *__s1, const char *__s2);
 80  int	 strcoll(const char *__s1, const char *__s2);
 81  #ifndef UNIFDEF_DRIVERKIT
 82  char	*strcpy(char *__dst, const char *__src);
 83  #endif /* UNIFDEF_DRIVERKIT */
 84  size_t	 strcspn(const char *__s, const char *__charset);
 85  char	*strerror(int __errnum) __DARWIN_ALIAS(strerror);
 86  size_t	 strlen(const char *__s);
 87  char	*strncat(char *__s1, const char *__s2, size_t __n);
 88  int	 strncmp(const char *__s1, const char *__s2, size_t __n);
 89  char	*strncpy(char *__dst, const char *__src, size_t __n);
 90  char	*strpbrk(const char *__s, const char *__charset);
 91  char	*strrchr(const char *__s, int __c);
 92  size_t	 strspn(const char *__s, const char *__charset);
 93  char	*strstr(const char *__big, const char *__little);
 94  char	*strtok(char *__str, const char *__sep);
 95  size_t	 strxfrm(char *__s1, const char *__s2, size_t __n);
 96  __END_DECLS
 97  
 98  
 99  
100  /* Additional functionality provided by:
101   * POSIX.1c-1995,
102   * POSIX.1i-1995,
103   * and the omnibus ISO/IEC 9945-1: 1996
104   */
105  
106  #if __DARWIN_C_LEVEL >= 199506L
107  __BEGIN_DECLS
108  char	*strtok_r(char *__str, const char *__sep, char **__lasts);
109  __END_DECLS
110  #endif /* __DARWIN_C_LEVEL >= 199506L */
111  
112  
113  
114  /* Additional functionality provided by:
115   * POSIX.1-2001
116   */
117  
118  #if __DARWIN_C_LEVEL >= 200112L
119  __BEGIN_DECLS
120  int	 strerror_r(int __errnum, char *__strerrbuf, size_t __buflen);
121  char	*strdup(const char *__s1);
122  void	*memccpy(void *__dst, const void *__src, int __c, size_t __n);
123  __END_DECLS
124  #endif /* __DARWIN_C_LEVEL >= 200112L */
125  
126  
127  
128  /* Additional functionality provided by:
129   * POSIX.1-2008
130   */
131  
132  #if __DARWIN_C_LEVEL >= 200809L
133  __BEGIN_DECLS
134  #ifndef UNIFDEF_DRIVERKIT
135  char	*stpcpy(char *__dst, const char *__src);
136  #endif /* UNIFDEF_DRIVERKIT */
137  char    *stpncpy(char *__dst, const char *__src, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
138  char	*strndup(const char *__s1, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
139  size_t   strnlen(const char *__s1, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
140  char	*strsignal(int __sig);
141  __END_DECLS
142  #endif /* __DARWIN_C_LEVEL >= 200809L */
143  
144  /* C11 Annex K */
145  
146  #if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1
147  #include <sys/_types/_rsize_t.h>
148  #include <sys/_types/_errno_t.h>
149  
150  __BEGIN_DECLS
151  errno_t	memset_s(void *__s, rsize_t __smax, int __c, rsize_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
152  __END_DECLS
153  #endif
154  
155  /* Darwin extensions */
156  
157  #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
158  #include <sys/_types/_ssize_t.h>
159  
160  __BEGIN_DECLS
161  void	*memmem(const void *__big, size_t __big_len, const void *__little, size_t __little_len) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
162  void     memset_pattern4(void *__b, const void *__pattern4, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
163  void     memset_pattern8(void *__b, const void *__pattern8, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
164  void     memset_pattern16(void *__b, const void *__pattern16, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
165  
166  char	*strcasestr(const char *__big, const char *__little);
167  char	*strnstr(const char *__big, const char *__little, size_t __len);
168  size_t	 strlcat(char *__dst, const char *__source, size_t __size);
169  size_t	 strlcpy(char *__dst, const char *__source, size_t __size);
170  void	 strmode(int __mode, char *__bp);
171  char	*strsep(char **__stringp, const char *__delim);
172  
173  /* SUS places swab() in unistd.h.  It is listed here for source compatibility */
174  void	 swab(const void * __restrict, void * __restrict, ssize_t);
175  
176  __OSX_AVAILABLE(10.12.1) __IOS_AVAILABLE(10.1)
177  __TVOS_AVAILABLE(10.0.1) __WATCHOS_AVAILABLE(3.1)
178  int	timingsafe_bcmp(const void *__b1, const void *__b2, size_t __len);
179  
180  __OSX_AVAILABLE(10.16) __IOS_AVAILABLE(14.0)
181  __TVOS_AVAILABLE(14.0) __WATCHOS_AVAILABLE(7.0)
182  int 	 strsignal_r(int __sig, char *__strsignalbuf, size_t __buflen);
183  __END_DECLS
184  
185  /* Some functions historically defined in string.h were placed in strings.h
186   * by SUS.  We are using "strings.h" instead of <strings.h> to avoid an issue
187   * where /Developer/Headers/FlatCarbon/Strings.h could be included instead on
188   * case-insensitive file systems.
189   */
190  #include "strings.h"
191  #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
192  
193  
194  #ifdef _USE_EXTENDED_LOCALES_
195  #include <xlocale/_string.h>
196  #endif /* _USE_EXTENDED_LOCALES_ */
197  
198  #if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
199  /* Security checking functions.  */
200  #include <secure/_string.h>
201  #endif
202  
203  #endif /* _STRING_H_ */