Loading...
include/_string.h Libc-1669.0.4 Libc-1725.40.4
--- Libc/Libc-1669.0.4/include/_string.h
+++ Libc/Libc-1725.40.4/include/_string.h
@@ -58,6 +58,7 @@
 #ifndef _STRING_H_
 #define	_STRING_H_
 
+#include <_bounds.h>
 #include <_types.h>
 #include <sys/cdefs.h>
 #include <Availability.h>
@@ -66,41 +67,61 @@
 
 /* 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);
+_LIBC_SINGLE_BY_DEFAULT()
+
+__BEGIN_DECLS
+void *_LIBC_SIZE(__n)
+		memchr(const void *_LIBC_SIZE(__n) __s, int __c, size_t __n);
+int	 memcmp(const void *_LIBC_SIZE(__n) __s1, const void *_LIBC_SIZE(__n) __s2,
+		size_t __n);
+void *_LIBC_SIZE(__n)
+		memcpy(void *_LIBC_SIZE(__n) __dst, const void *_LIBC_SIZE(__n) __src,
+		size_t __n);
+void *_LIBC_SIZE(__len)
+		memmove(void *_LIBC_SIZE(__len) __dst,
+		const void *_LIBC_SIZE(__len) __src, size_t __len);
+void *_LIBC_SIZE(__len)
+		memset(void *_LIBC_SIZE(__len) __b, int __c, size_t __len);
+#ifndef UNIFDEF_DRIVERKIT
+char *_LIBC_CSTR
+		strcat(char *_LIBC_UNSAFE_INDEXABLE __s1, const char *__s2)
+		_LIBC_PTRCHECK_REPLACED(strlcat);
 #endif /* UNIFDEF_DRIVERKIT */
-char	*strchr(const char *__s, int __c);
+char *_LIBC_CSTR 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);
+char *_LIBC_CSTR
+		strcpy(char *_LIBC_UNSAFE_INDEXABLE __dst, const char *__src)
+		_LIBC_PTRCHECK_REPLACED(strlcpy);
 #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);
+char *_LIBC_CSTR	strerror(int __errnum) __DARWIN_ALIAS(strerror);
 //Begin-Libc
 #else /* LIBC_ALIAS_STRERROR */
-char	*strerror(int __errnum) LIBC_ALIAS(strerror);
+char *_LIBC_CSTR	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);
+char *_LIBC_CSTR
+		strncat(char *_LIBC_UNSAFE_INDEXABLE __s1,
+		const char *_LIBC_COUNT(__n) __s2, size_t __n)
+		_LIBC_PTRCHECK_REPLACED(strlcat);
+int	 strncmp(const char *_LIBC_UNSAFE_INDEXABLE __s1,
+		const char *_LIBC_UNSAFE_INDEXABLE __s2, size_t __n);
+char *_LIBC_COUNT(__n)
+		strncpy(char *_LIBC_COUNT(__n) __dst,
+        const char *_LIBC_UNSAFE_INDEXABLE __src, size_t __n)
+        _LIBC_PTRCHECK_REPLACED(strlcpy);
+char *_LIBC_CSTR    strpbrk(const char *__s, const char *__charset);
+char *_LIBC_CSTR    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);
+char *_LIBC_CSTR    strstr(const char *__big, const char *__little);
+char *_LIBC_CSTR    strtok(char *_LIBC_CSTR __str, const char *__sep);
+size_t	 strxfrm(char *_LIBC_COUNT(__n) __s1, const char *__s2, size_t __n);
 __END_DECLS
 
 
@@ -113,7 +134,9 @@
 
 #if __DARWIN_C_LEVEL >= 199506L
 __BEGIN_DECLS
-char	*strtok_r(char *__str, const char *__sep, char **__lasts);
+char *_LIBC_CSTR
+        strtok_r(char *_LIBC_CSTR __str, const char *__sep,
+        char *_LIBC_CSTR *__lasts);
 __END_DECLS
 #endif /* __DARWIN_C_LEVEL >= 199506L */
 
@@ -125,9 +148,12 @@
 
 #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);
+int	 strerror_r(int __errnum, char *_LIBC_COUNT(__buflen) __strerrbuf,
+        size_t __buflen);
+char *_LIBC_CSTR    strdup(const char *__s1);
+void *_LIBC_UNSAFE_INDEXABLE /* in bounds of __dst */
+        memccpy(void *_LIBC_SIZE(__n) __dst, const void *_LIBC_SIZE(__n) __src,
+        int __c, size_t __n);
 __END_DECLS
 #endif /* __DARWIN_C_LEVEL >= 200112L */
 
@@ -140,12 +166,17 @@
 #if __DARWIN_C_LEVEL >= 200809L
 __BEGIN_DECLS
 #ifndef UNIFDEF_DRIVERKIT
-char	*stpcpy(char *__dst, const char *__src);
+char *_LIBC_CSTR
+        stpcpy(char *_LIBC_UNSAFE_INDEXABLE __dst, const char *__src) _LIBC_PTRCHECK_REPLACED(strlcpy);
 #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);
+char *_LIBC_COUNT(__n)
+        stpncpy(char *_LIBC_UNSAFE_INDEXABLE __dst,
+        const char *_LIBC_UNSAFE_INDEXABLE __src, size_t __n)
+        __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3)
+        _LIBC_PTRCHECK_REPLACED(strlcpy);
+char *_LIBC_CSTR    strndup(const char *_LIBC_COUNT(__n) __s1, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
+size_t   strnlen(const char *_LIBC_COUNT(__n) __s1, size_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
+char *_LIBC_CSTR    strsignal(int __sig);
 __END_DECLS
 #endif /* __DARWIN_C_LEVEL >= 200809L */
 
@@ -156,7 +187,7 @@
 #include <sys/_types/_errno_t.h>
 
 __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);
+errno_t	memset_s(void *_LIBC_SIZE(__smax) __s, rsize_t __smax, int __c, rsize_t __n) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
 __END_DECLS
 #endif
 
@@ -166,28 +197,39 @@
 #include <sys/_types/_ssize_t.h>
 
 __BEGIN_DECLS
-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);
+void *_LIBC_UNSAFE_INDEXABLE
+        memmem(const void *_LIBC_SIZE(__big_len) __big, size_t __big_len,
+        const void *_LIBC_SIZE(__little_len) __little, size_t __little_len) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
+void	 memset_pattern4(void *_LIBC_SIZE(__len) __b, const void *_LIBC_SIZE(4) __pattern4, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
+void	 memset_pattern8(void *_LIBC_SIZE(__len) __b, const void *_LIBC_SIZE(8) __pattern8, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
+void	 memset_pattern16(void *_LIBC_SIZE(__len) __b, const void *_LIBC_SIZE(16) __pattern16, size_t __len) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
+
+char *_LIBC_CSTR
+        strcasestr(const char *__big, const char *__little);
+#ifndef UNIFDEF_DRIVERKIT
+__OSX_AVAILABLE(15.4) __IOS_AVAILABLE(18.4)
+__TVOS_AVAILABLE(18.4) __WATCHOS_AVAILABLE(11.4)
+char *_LIBC_CSTR
+        strchrnul(const char *__s, int __c);
+#endif
+char *_LIBC_CSTR
+        strnstr(const char *_LIBC_COUNT(__len) __big, const char *__little, size_t __len);
+size_t	 strlcat(char *_LIBC_COUNT(__size) __dst, const char *__source, size_t __size);
+size_t	 strlcpy(char *_LIBC_COUNT(__size) __dst, const char *__source, size_t __size);
+void	 strmode(int __mode, char *_LIBC_COUNT(12) __bp);
+char *_LIBC_CSTR
+        strsep(char *_LIBC_CSTR *__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);
+void	 swab(const void *_LIBC_SIZE(__len) __restrict, void *_LIBC_SIZE(__len) __restrict, ssize_t __len);
 
 __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);
+int	timingsafe_bcmp(const void *_LIBC_SIZE(__len) __b1, const void *_LIBC_SIZE(__len) __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);
+int 	 strsignal_r(int __sig, char *_LIBC_COUNT(__buflen) __strsignalbuf, size_t __buflen);
 __END_DECLS
 
 /* Some functions historically defined in string.h were placed in strings.h