X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/734aad71947a79037af64f74c683f5eb36fe6065..refs/heads/master:/include/string.h diff --git a/include/string.h b/include/string.h index aabb118..479c759 100644 --- a/include/string.h +++ b/include/string.h @@ -1,17 +1,15 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000, 2007, 2010 Apple Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ - * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. - * + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. - * + * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -19,7 +17,7 @@ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. - * + * * @APPLE_LICENSE_HEADER_END@ */ /*- @@ -59,62 +57,155 @@ #ifndef _STRING_H_ #define _STRING_H_ -#include -#ifndef _BSD_SIZE_T_DEFINED_ -#define _BSD_SIZE_T_DEFINED_ -typedef _BSD_SIZE_T_ size_t; -#endif +#include <_types.h> +#include +#include +#include +#include + +/* ANSI-C */ + +__BEGIN_DECLS +void *memchr(const void *__s, int __c, size_t __n); +int memcmp(const void *__s1, const void *__s2, size_t __n); +void *memcpy(void *__dst, const void *__src, size_t __n); +void *memmove(void *__dst, const void *__src, size_t __len); +void *memset(void *__b, int __c, size_t __len); +#ifndef UNIFDEF_DRIVERKIT +char *strcat(char *__s1, const char *__s2); +#endif /* UNIFDEF_DRIVERKIT */ +char *strchr(const char *__s, int __c); +int strcmp(const char *__s1, const char *__s2); +int strcoll(const char *__s1, const char *__s2); +#ifndef UNIFDEF_DRIVERKIT +char *strcpy(char *__dst, const char *__src); +#endif /* UNIFDEF_DRIVERKIT */ +size_t strcspn(const char *__s, const char *__charset); +//Begin-Libc +#ifndef LIBC_ALIAS_STRERROR +//End-Libc +char *strerror(int __errnum) __DARWIN_ALIAS(strerror); +//Begin-Libc +#else /* LIBC_ALIAS_STRERROR */ +char *strerror(int __errnum) LIBC_ALIAS(strerror); +#endif /* !LIBC_ALIAS_STRERROR */ +//End-Libc +size_t strlen(const char *__s); +char *strncat(char *__s1, const char *__s2, size_t __n); +int strncmp(const char *__s1, const char *__s2, size_t __n); +char *strncpy(char *__dst, const char *__src, size_t __n); +char *strpbrk(const char *__s, const char *__charset); +char *strrchr(const char *__s, int __c); +size_t strspn(const char *__s, const char *__charset); +char *strstr(const char *__big, const char *__little); +char *strtok(char *__str, const char *__sep); +size_t strxfrm(char *__s1, const char *__s2, size_t __n); +__END_DECLS + + + +/* Additional functionality provided by: + * POSIX.1c-1995, + * POSIX.1i-1995, + * and the omnibus ISO/IEC 9945-1: 1996 + */ + +#if __DARWIN_C_LEVEL >= 199506L +__BEGIN_DECLS +char *strtok_r(char *__str, const char *__sep, char **__lasts); +__END_DECLS +#endif /* __DARWIN_C_LEVEL >= 199506L */ + + + +/* Additional functionality provided by: + * POSIX.1-2001 + */ + +#if __DARWIN_C_LEVEL >= 200112L +__BEGIN_DECLS +int strerror_r(int __errnum, char *__strerrbuf, size_t __buflen); +char *strdup(const char *__s1); +void *memccpy(void *__dst, const void *__src, int __c, size_t __n); +__END_DECLS +#endif /* __DARWIN_C_LEVEL >= 200112L */ -#ifndef NULL -#define NULL 0 + + +/* Additional functionality provided by: + * POSIX.1-2008 + */ + +#if __DARWIN_C_LEVEL >= 200809L +__BEGIN_DECLS +#ifndef UNIFDEF_DRIVERKIT +char *stpcpy(char *__dst, const char *__src); +#endif /* UNIFDEF_DRIVERKIT */ +char *stpncpy(char *__dst, const char *__src, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); +char *strndup(const char *__s1, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); +size_t strnlen(const char *__s1, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); +char *strsignal(int __sig); +__END_DECLS +#endif /* __DARWIN_C_LEVEL >= 200809L */ + +/* C11 Annex K */ + +#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 +#include +#include + +__BEGIN_DECLS +errno_t memset_s(void *__s, rsize_t __smax, int __c, rsize_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0); +__END_DECLS #endif -#include +/* Darwin extensions */ + +#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL +#include __BEGIN_DECLS -void *memchr __P((const void *, int, size_t)); -int memcmp __P((const void *, const void *, size_t)); -void *memcpy __P((void *, const void *, size_t)); -void *memmove __P((void *, const void *, size_t)); -void *memset __P((void *, int, size_t)); -char *strcat __P((char *, const char *)); -char *strchr __P((const char *, int)); -int strcmp __P((const char *, const char *)); -int strcoll __P((const char *, const char *)); -char *strcpy __P((char *, const char *)); -size_t strcspn __P((const char *, const char *)); -char *strerror __P((int)); -size_t strlen __P((const char *)); -char *strncat __P((char *, const char *, size_t)); -int strncmp __P((const char *, const char *, size_t)); -char *strncpy __P((char *, const char *, size_t)); -char *strpbrk __P((const char *, const char *)); -char *strrchr __P((const char *, int)); -size_t strspn __P((const char *, const char *)); -char *strstr __P((const char *, const char *)); -char *strtok __P((char *, const char *)); -size_t strxfrm __P((char *, const char *, size_t)); - -/* Nonstandard routines */ -#ifndef _ANSI_SOURCE -int bcmp __P((const void *, const void *, size_t)); -void bcopy __P((const void *, void *, size_t)); -void bzero __P((void *, size_t)); -int ffs __P((int)); -char *index __P((const char *, int)); -void *memccpy __P((void *, const void *, int, size_t)); -char *rindex __P((const char *, int)); -int strcasecmp __P((const char *, const char *)); -char *strdup __P((const char *)); -size_t strlcat __P((char *, const char *, size_t)); -size_t strlcpy __P((char *, const char *, size_t)); -void strmode __P((int, char *)); -int strncasecmp __P((const char *, const char *, size_t)); -char *strsep __P((char **, const char *)); -char *strtok_r __P((char *, const char *, char **)); -void swab __P((const void *, void *, size_t)); -#endif +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); +void memset_pattern4(void *__b, const void *__pattern4, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0); +void memset_pattern8(void *__b, const void *__pattern8, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0); +void memset_pattern16(void *__b, const void *__pattern16, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0); + +char *strcasestr(const char *__big, const char *__little); +char *strnstr(const char *__big, const char *__little, size_t __len); +size_t strlcat(char *__dst, const char *__source, size_t __size); +size_t strlcpy(char *__dst, const char *__source, size_t __size); +void strmode(int __mode, char *__bp); +char *strsep(char **__stringp, const char *__delim); + +/* SUS places swab() in unistd.h. It is listed here for source compatibility */ +void swab(const void * __restrict, void * __restrict, ssize_t); + +__OSX_AVAILABLE(10.12.1) __IOS_AVAILABLE(10.1) +__TVOS_AVAILABLE(10.0.1) __WATCHOS_AVAILABLE(3.1) +int timingsafe_bcmp(const void *__b1, const void *__b2, size_t __len); + +__OSX_AVAILABLE(10.16) __IOS_AVAILABLE(14.0) +__TVOS_AVAILABLE(14.0) __WATCHOS_AVAILABLE(7.0) +int strsignal_r(int __sig, char *__strsignalbuf, size_t __buflen); __END_DECLS +/* Some functions historically defined in string.h were placed in strings.h + * by SUS. We are using "strings.h" instead of to avoid an issue + * where /Developer/Headers/FlatCarbon/Strings.h could be included instead on + * case-insensitive file systems. + */ +#include "strings.h" +#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */ + + +#ifdef _USE_EXTENDED_LOCALES_ +#include +#endif /* _USE_EXTENDED_LOCALES_ */ + +#if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus) +/* Security checking functions. */ +#include +#endif + #endif /* _STRING_H_ */