1*c54f35caSApple OSS Distributions /* 2*c54f35caSApple OSS Distributions * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved. 3*c54f35caSApple OSS Distributions * 4*c54f35caSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5*c54f35caSApple OSS Distributions * 6*c54f35caSApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code 7*c54f35caSApple OSS Distributions * as defined in and that are subject to the Apple Public Source License 8*c54f35caSApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in 9*c54f35caSApple OSS Distributions * compliance with the License. The rights granted to you under the License 10*c54f35caSApple OSS Distributions * may not be used to create, or enable the creation or redistribution of, 11*c54f35caSApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to 12*c54f35caSApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any 13*c54f35caSApple OSS Distributions * terms of an Apple operating system software license agreement. 14*c54f35caSApple OSS Distributions * 15*c54f35caSApple OSS Distributions * Please obtain a copy of the License at 16*c54f35caSApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file. 17*c54f35caSApple OSS Distributions * 18*c54f35caSApple OSS Distributions * The Original Code and all software distributed under the License are 19*c54f35caSApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20*c54f35caSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21*c54f35caSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22*c54f35caSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23*c54f35caSApple OSS Distributions * Please see the License for the specific language governing rights and 24*c54f35caSApple OSS Distributions * limitations under the License. 25*c54f35caSApple OSS Distributions * 26*c54f35caSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27*c54f35caSApple OSS Distributions */ 28*c54f35caSApple OSS Distributions /* 29*c54f35caSApple OSS Distributions * NOTICE: This file was modified by McAfee Research in 2004 to introduce 30*c54f35caSApple OSS Distributions * support for mandatory and extensible security protections. This notice 31*c54f35caSApple OSS Distributions * is included in support of clause 2.2 (b) of the Apple Public License, 32*c54f35caSApple OSS Distributions * Version 2.0. 33*c54f35caSApple OSS Distributions */ 34*c54f35caSApple OSS Distributions /* 35*c54f35caSApple OSS Distributions * HISTORY 36*c54f35caSApple OSS Distributions * @OSF_COPYRIGHT@ 37*c54f35caSApple OSS Distributions */ 38*c54f35caSApple OSS Distributions #ifndef _STRING_H_ 39*c54f35caSApple OSS Distributions #define _STRING_H_ 1 40*c54f35caSApple OSS Distributions 41*c54f35caSApple OSS Distributions #ifdef MACH_KERNEL_PRIVATE 42*c54f35caSApple OSS Distributions #include <types.h> 43*c54f35caSApple OSS Distributions #else 44*c54f35caSApple OSS Distributions #include <sys/types.h> 45*c54f35caSApple OSS Distributions #endif 46*c54f35caSApple OSS Distributions #include <sys/cdefs.h> 47*c54f35caSApple OSS Distributions 48*c54f35caSApple OSS Distributions __BEGIN_DECLS 49*c54f35caSApple OSS Distributions 50*c54f35caSApple OSS Distributions #ifndef NULL 51*c54f35caSApple OSS Distributions #if defined (__cplusplus) 52*c54f35caSApple OSS Distributions #if __cplusplus >= 201103L 53*c54f35caSApple OSS Distributions #define NULL nullptr 54*c54f35caSApple OSS Distributions #else 55*c54f35caSApple OSS Distributions #define NULL 0 56*c54f35caSApple OSS Distributions #endif 57*c54f35caSApple OSS Distributions #else 58*c54f35caSApple OSS Distributions #define NULL ((void *)0) 59*c54f35caSApple OSS Distributions #endif 60*c54f35caSApple OSS Distributions #endif 61*c54f35caSApple OSS Distributions 62*c54f35caSApple OSS Distributions /* 63*c54f35caSApple OSS Distributions * Memory functions 64*c54f35caSApple OSS Distributions * 65*c54f35caSApple OSS Distributions * int bcmp(const void *s1, const void *s2, size_t n); 66*c54f35caSApple OSS Distributions * int memcmp(const void *s1, const void *s2, size_t n); 67*c54f35caSApple OSS Distributions * int timingsafe_bcmp(const void *b1, const void *b2, size_t n); 68*c54f35caSApple OSS Distributions * 69*c54f35caSApple OSS Distributions * void bzero(void *dst, size_t n); 70*c54f35caSApple OSS Distributions * void *memset(void *s, int c, size_t n); 71*c54f35caSApple OSS Distributions * int memset_s(void *s __sized_by(smax), size_t smax, int c, size_t n); 72*c54f35caSApple OSS Distributions * 73*c54f35caSApple OSS Distributions * void bcopy(const void *src, void *dst, size_t n); 74*c54f35caSApple OSS Distributions * void *memcpy(void *dst, const void *src, size_t n); 75*c54f35caSApple OSS Distributions * void *memove(void *dst, const void *src, size_t n); 76*c54f35caSApple OSS Distributions * 77*c54f35caSApple OSS Distributions * 78*c54f35caSApple OSS Distributions * String functions 79*c54f35caSApple OSS Distributions * 80*c54f35caSApple OSS Distributions * size_t strlen(const char *s); 81*c54f35caSApple OSS Distributions * size_t strnlen(const char *s, size_t n); 82*c54f35caSApple OSS Distributions * 83*c54f35caSApple OSS Distributions * int strcmp(const char *s1, const char *s2); 84*c54f35caSApple OSS Distributions * int strncmp(const char *s1, const char *s2, size_t n); 85*c54f35caSApple OSS Distributions * int strprefix(const char *s1, const char *s2) __stateful_pure; 86*c54f35caSApple OSS Distributions * int strcasecmp(const char *s1, const char *s2); 87*c54f35caSApple OSS Distributions * int strncasecmp(const char *s1, const char *s2, size_t n); 88*c54f35caSApple OSS Distributions * 89*c54f35caSApple OSS Distributions * char *strchr(const char *s, int c); 90*c54f35caSApple OSS Distributions * char *strrchr(const char *s, int c); 91*c54f35caSApple OSS Distributions * char *strnstr(const char *s, const char *find, size_t slen); 92*c54f35caSApple OSS Distributions * 93*c54f35caSApple OSS Distributions * size_t strlcpy(char *dst, const char *src, size_t n); 94*c54f35caSApple OSS Distributions * size_t strlcat(char *dst, const char *src, size_t n); 95*c54f35caSApple OSS Distributions */ 96*c54f35caSApple OSS Distributions 97*c54f35caSApple OSS Distributions 98*c54f35caSApple OSS Distributions /* 99*c54f35caSApple OSS Distributions * _FORTIFY_SOURCE > 0 will enable checked memory/string functions. 100*c54f35caSApple OSS Distributions * 101*c54f35caSApple OSS Distributions * _FORTIFY_SOURCE_STRICT will enable stricter checking (optional) 102*c54f35caSApple OSS Distributions * for memcpy/memmove/bcopy and will check that copies do not go 103*c54f35caSApple OSS Distributions * past the end of a struct member. 104*c54f35caSApple OSS Distributions */ 105*c54f35caSApple OSS Distributions #if KASAN 106*c54f35caSApple OSS Distributions # define XNU_USE_CHK_BUILTIN(n) 0 107*c54f35caSApple OSS Distributions # define XNU_USE_STRING_BUILTIN(n) 0 108*c54f35caSApple OSS Distributions #elif defined (_FORTIFY_SOURCE) && _FORTIFY_SOURCE == 0 109*c54f35caSApple OSS Distributions # define XNU_USE_CHK_BUILTIN(n) 0 110*c54f35caSApple OSS Distributions # define XNU_USE_STRING_BUILTIN(n) __has_builtin(__builtin_##n) 111*c54f35caSApple OSS Distributions #elif __has_ptrcheck 112*c54f35caSApple OSS Distributions # define XNU_USE_CHK_BUILTIN(n) 0 113*c54f35caSApple OSS Distributions # define XNU_USE_STRING_BUILTIN(n) __has_builtin(__builtin_##n) 114*c54f35caSApple OSS Distributions #elif defined(__cplusplus) && __has_include(<__xnu_libcxx_sentinel.h>) 115*c54f35caSApple OSS Distributions # define XNU_USE_CHK_BUILTIN(n) 0 116*c54f35caSApple OSS Distributions # define XNU_USE_STRING_BUILTIN(n) 0 117*c54f35caSApple OSS Distributions #elif XNU_KERNEL_PRIVATE || defined(_FORTIFY_SOURCE_STRICT) 118*c54f35caSApple OSS Distributions # define XNU_USE_CHK_BUILTIN(n) __has_builtin(__builtin___##n##_chk) 119*c54f35caSApple OSS Distributions # define XNU_USE_STRING_BUILTIN(n) __has_builtin(__builtin_##n) 120*c54f35caSApple OSS Distributions # define __xnu_bos_default(ptr) __xnu_bos_strict(ptr) 121*c54f35caSApple OSS Distributions #else 122*c54f35caSApple OSS Distributions # define XNU_USE_CHK_BUILTIN(n) __has_builtin(__builtin___##n##_chk) 123*c54f35caSApple OSS Distributions # define XNU_USE_STRING_BUILTIN(n) __has_builtin(__builtin_##n) 124*c54f35caSApple OSS Distributions # define __xnu_bos_default(ptr) __xnu_bos_loose(ptr) 125*c54f35caSApple OSS Distributions #endif 126*c54f35caSApple OSS Distributions 127*c54f35caSApple OSS Distributions #if __has_builtin(__builtin_dynamic_object_size) 128*c54f35caSApple OSS Distributions # define __xnu_bos_loose(ptr) __builtin_dynamic_object_size(ptr, 0) 129*c54f35caSApple OSS Distributions # define __xnu_bos_strict(ptr) __builtin_dynamic_object_size(ptr, 1) 130*c54f35caSApple OSS Distributions #else 131*c54f35caSApple OSS Distributions # define __xnu_bos_loose(ptr) __builtin_object_size(ptr, 0) 132*c54f35caSApple OSS Distributions # define __xnu_bos_strict(ptr) __builtin_object_size(ptr, 1) 133*c54f35caSApple OSS Distributions #endif 134*c54f35caSApple OSS Distributions 135*c54f35caSApple OSS Distributions 136*c54f35caSApple OSS Distributions #pragma mark memory functions 137*c54f35caSApple OSS Distributions 138*c54f35caSApple OSS Distributions extern int bcmp(const void *s1 __sized_by(n), const void *s2 __sized_by(n), size_t n) __stateful_pure; 139*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(bcmp) 140*c54f35caSApple OSS Distributions #define bcmp(s1, s2, n) __builtin_bcmp(s1, s2, n) 141*c54f35caSApple OSS Distributions #endif 142*c54f35caSApple OSS Distributions 143*c54f35caSApple OSS Distributions 144*c54f35caSApple OSS Distributions extern int memcmp(const void *s1 __sized_by(n), const void *s2 __sized_by(n), size_t n) __stateful_pure; 145*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(memcmp) 146*c54f35caSApple OSS Distributions #define memcmp(s1, s2, n) __builtin_memcmp(s1, s2, n) 147*c54f35caSApple OSS Distributions #endif 148*c54f35caSApple OSS Distributions 149*c54f35caSApple OSS Distributions 150*c54f35caSApple OSS Distributions #ifdef XNU_KERNEL_PRIVATE 151*c54f35caSApple OSS Distributions /* 152*c54f35caSApple OSS Distributions * memcmp_zero_ptr_aligned() checks string s of n bytes contains all zeros. 153*c54f35caSApple OSS Distributions * Address and size of the string s must be pointer-aligned. 154*c54f35caSApple OSS Distributions * Return 0 if true, 1 otherwise. Also return 0 if n is 0. 155*c54f35caSApple OSS Distributions */ 156*c54f35caSApple OSS Distributions extern unsigned long memcmp_zero_ptr_aligned(const void *s __sized_by(n), size_t n) __stateful_pure; 157*c54f35caSApple OSS Distributions #endif 158*c54f35caSApple OSS Distributions 159*c54f35caSApple OSS Distributions 160*c54f35caSApple OSS Distributions extern int timingsafe_bcmp(const void *b1 __sized_by(n), const void *b2 __sized_by(n), size_t n); 161*c54f35caSApple OSS Distributions 162*c54f35caSApple OSS Distributions 163*c54f35caSApple OSS Distributions extern void bzero(void *s __sized_by(n), size_t n); 164*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(bzero) 165*c54f35caSApple OSS Distributions #define bzero(s, n) __builtin_bzero(s, n) 166*c54f35caSApple OSS Distributions #endif 167*c54f35caSApple OSS Distributions 168*c54f35caSApple OSS Distributions 169*c54f35caSApple OSS Distributions extern void *memset(void *s __sized_by(n), int c, size_t n); 170*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(memset) && XNU_KERNEL_PRIVATE /* rdar://103270898&103281379 */ 171*c54f35caSApple OSS Distributions #define memset(s, c, n) __builtin___memset_chk(s, c, n, __xnu_bos_default(s)) 172*c54f35caSApple OSS Distributions #elif XNU_USE_STRING_BUILTIN(memset) && XNU_KERNEL_PRIVATE 173*c54f35caSApple OSS Distributions #define memset(s, c, n) __builtin_memset(s, c, n) 174*c54f35caSApple OSS Distributions #endif 175*c54f35caSApple OSS Distributions 176*c54f35caSApple OSS Distributions 177*c54f35caSApple OSS Distributions extern int memset_s(void *s __sized_by(smax), size_t smax, int c, size_t n); 178*c54f35caSApple OSS Distributions 179*c54f35caSApple OSS Distributions 180*c54f35caSApple OSS Distributions extern void *memcpy(void *dst __sized_by(n), const void *src __sized_by(n), size_t n); 181*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(memcpy) 182*c54f35caSApple OSS Distributions #define memcpy(dst, src, n) __builtin___memcpy_chk(dst, src, n, __xnu_bos_default(dst)) 183*c54f35caSApple OSS Distributions #define __nochk_memcpy(dst, src, n) __builtin___memcpy_chk(dst, src, n, __xnu_bos_loose(dst)) 184*c54f35caSApple OSS Distributions #elif XNU_USE_STRING_BUILTIN(memcpy) 185*c54f35caSApple OSS Distributions #define memcpy(dst, src, n) __builtin_memcpy(dst, src, n) 186*c54f35caSApple OSS Distributions #define __nochk_memcpy(dst, src, n) memcpy(dst, src, n) 187*c54f35caSApple OSS Distributions #else 188*c54f35caSApple OSS Distributions #define __nochk_memcpy(dst, src, n) memcpy(dst, src, n) 189*c54f35caSApple OSS Distributions #endif 190*c54f35caSApple OSS Distributions 191*c54f35caSApple OSS Distributions 192*c54f35caSApple OSS Distributions extern void *memmove(void *dst __sized_by(n), const void *src __sized_by(n), size_t n); 193*c54f35caSApple OSS Distributions extern void bcopy(const void *src __sized_by(n), void *dst __sized_by(n), size_t n); 194*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(memmove) 195*c54f35caSApple OSS Distributions #define memmove(dst, src, n) __builtin___memmove_chk(dst, src, n, __xnu_bos_default(dst)) 196*c54f35caSApple OSS Distributions #define bcopy(src, dst, n) __builtin___memmove_chk(dst, src, n, __xnu_bos_default(dst)) 197*c54f35caSApple OSS Distributions #define __nochk_memmove(dst, src, n) __builtin___memmove_chk(dst, src, n, __xnu_bos_loose(dst)) 198*c54f35caSApple OSS Distributions #define __nochk_bcopy(src, dst, n) __builtin___memmove_chk(dst, src, n, __xnu_bos_loose(dst)) 199*c54f35caSApple OSS Distributions #elif XNU_USE_STRING_BUILTIN(memmove) 200*c54f35caSApple OSS Distributions #define memmove(dst, src, n) __builtin_memmove(dst, src, n) 201*c54f35caSApple OSS Distributions #define bcopy(src, dst, n) __builtin_memmove(dst, src, n) 202*c54f35caSApple OSS Distributions #define __nochk_memmove(dst, src, n) memmove(dst, src, n) 203*c54f35caSApple OSS Distributions #define __nochk_bcopy(src, dst, n) bcopy(src, dst, n) 204*c54f35caSApple OSS Distributions #else 205*c54f35caSApple OSS Distributions #define __nochk_memmove(dst, src, n) memmove(dst, src, n) 206*c54f35caSApple OSS Distributions #define __nochk_bcopy(src, dst, n) bcopy(src, dst, n) 207*c54f35caSApple OSS Distributions #endif /* !XNU_USE_CHK_BUILTIN(memmove) */ 208*c54f35caSApple OSS Distributions 209*c54f35caSApple OSS Distributions 210*c54f35caSApple OSS Distributions #pragma mark string functions 211*c54f35caSApple OSS Distributions 212*c54f35caSApple OSS Distributions extern size_t strlen(const char *__null_terminated s) __stateful_pure; 213*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strlen) 214*c54f35caSApple OSS Distributions #define strlen(s) __builtin_strlen(s) 215*c54f35caSApple OSS Distributions #endif 216*c54f35caSApple OSS Distributions 217*c54f35caSApple OSS Distributions 218*c54f35caSApple OSS Distributions extern size_t strnlen(const char *__null_terminated s, size_t n) __stateful_pure; 219*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strnlen) 220*c54f35caSApple OSS Distributions #define strnlen(s, n) __builtin_strnlen(s, n) 221*c54f35caSApple OSS Distributions #endif 222*c54f35caSApple OSS Distributions 223*c54f35caSApple OSS Distributions 224*c54f35caSApple OSS Distributions extern int strcmp(const char *__null_terminated s1, const char *__null_terminated s2) __stateful_pure; 225*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strcmp) 226*c54f35caSApple OSS Distributions #define strcmp(s1, s2) __builtin_strcmp(s1, s2) 227*c54f35caSApple OSS Distributions #endif 228*c54f35caSApple OSS Distributions 229*c54f35caSApple OSS Distributions 230*c54f35caSApple OSS Distributions extern int strncmp(const char *__null_terminated s1, const char *__null_terminated s2, size_t n) __stateful_pure; 231*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strncmp) 232*c54f35caSApple OSS Distributions #define strncmp(s1, s2, n) __builtin_strncmp(s1, s2, n) 233*c54f35caSApple OSS Distributions #endif 234*c54f35caSApple OSS Distributions 235*c54f35caSApple OSS Distributions 236*c54f35caSApple OSS Distributions extern int strprefix(const char *__null_terminated s1, const char *__null_terminated s2) __stateful_pure; 237*c54f35caSApple OSS Distributions 238*c54f35caSApple OSS Distributions 239*c54f35caSApple OSS Distributions extern int strcasecmp(const char *__null_terminated s1, const char *__null_terminated s2) __stateful_pure; 240*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strcasecmp) 241*c54f35caSApple OSS Distributions #define strcasecmp(s1, s2) __builtin_strcasecmp(s1, s2) 242*c54f35caSApple OSS Distributions #endif 243*c54f35caSApple OSS Distributions 244*c54f35caSApple OSS Distributions 245*c54f35caSApple OSS Distributions extern int strncasecmp(const char *__null_terminated s1, const char *__null_terminated s2, size_t n) __stateful_pure; 246*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strncasecmp) 247*c54f35caSApple OSS Distributions #define strncasecmp(s1, s2, n) __builtin_strncasecmp(s1, s2, n) 248*c54f35caSApple OSS Distributions #endif 249*c54f35caSApple OSS Distributions 250*c54f35caSApple OSS Distributions 251*c54f35caSApple OSS Distributions extern char *__null_terminated strchr(const char *__null_terminated s, int c) __stateful_pure; 252*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strchr) && !__has_ptrcheck /* rdar://103265304 */ 253*c54f35caSApple OSS Distributions #define strchr(s, c) __builtin_strchr(s, c) 254*c54f35caSApple OSS Distributions #endif 255*c54f35caSApple OSS Distributions 256*c54f35caSApple OSS Distributions 257*c54f35caSApple OSS Distributions #if XNU_KERNEL_PRIVATE /* rdar://103276672 */ 258*c54f35caSApple OSS Distributions extern char *__null_terminated strrchr(const char *__null_terminated s, int c) __stateful_pure; 259*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strrchr) && !__has_ptrcheck /* rdar://103265304 */ 260*c54f35caSApple OSS Distributions #define strrchr(s, c) __builtin_strrchr(s, c) 261*c54f35caSApple OSS Distributions #endif 262*c54f35caSApple OSS Distributions #endif 263*c54f35caSApple OSS Distributions 264*c54f35caSApple OSS Distributions 265*c54f35caSApple OSS Distributions extern char *__null_terminated strnstr(const char *__null_terminated s, const char *__null_terminated find, size_t slen) __stateful_pure; 266*c54f35caSApple OSS Distributions #if XNU_USE_STRING_BUILTIN(strnstr) && !__has_ptrcheck /* rdar://103265304 */ 267*c54f35caSApple OSS Distributions #define strnstr(s, find, slen) __builtin_strnstr(s, find, slen) 268*c54f35caSApple OSS Distributions #endif 269*c54f35caSApple OSS Distributions 270*c54f35caSApple OSS Distributions 271*c54f35caSApple OSS Distributions extern size_t strlcpy(char *__sized_by(n) dst, const char *__null_terminated src, size_t n); 272*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(strlcpy) 273*c54f35caSApple OSS Distributions #define strlcpy(dst, src, n) __builtin___strlcpy_chk(dst, src, n, __xnu_bos_strict(dst)) 274*c54f35caSApple OSS Distributions #elif XNU_USE_STRING_BUILTIN(strlcpy) 275*c54f35caSApple OSS Distributions #define strlcpy(dst, src, n) __builtin_strlcpy(dst, src, n) 276*c54f35caSApple OSS Distributions #endif 277*c54f35caSApple OSS Distributions 278*c54f35caSApple OSS Distributions 279*c54f35caSApple OSS Distributions extern size_t strlcat(char *__sized_by(n) dst, const char *__null_terminated src, size_t n); 280*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(strlcat) 281*c54f35caSApple OSS Distributions #define strlcat(dst, src, n) __builtin___strlcat_chk(dst, src, n, __xnu_bos_strict(dst)) 282*c54f35caSApple OSS Distributions #elif XNU_USE_STRING_BUILTIN(strlcat) 283*c54f35caSApple OSS Distributions #define strlcat(dst, src, n) __builtin_strlcat(dst, src, n) 284*c54f35caSApple OSS Distributions #endif 285*c54f35caSApple OSS Distributions 286*c54f35caSApple OSS Distributions 287*c54f35caSApple OSS Distributions #pragma mark deprecated functions 288*c54f35caSApple OSS Distributions #if !__has_ptrcheck 289*c54f35caSApple OSS Distributions 290*c54f35caSApple OSS Distributions /* 291*c54f35caSApple OSS Distributions * char *strncat(char *dst, const char *src, size_t n); 292*c54f35caSApple OSS Distributions * char *strncpy(char *dst, const char *src, size_t n); 293*c54f35caSApple OSS Distributions * 294*c54f35caSApple OSS Distributions * char *strcat(char *dst, const char *src); 295*c54f35caSApple OSS Distributions * char *strcpy(char *, const char *); 296*c54f35caSApple OSS Distributions * 297*c54f35caSApple OSS Distributions * char *STRDUP(const char *, int); 298*c54f35caSApple OSS Distributions */ 299*c54f35caSApple OSS Distributions 300*c54f35caSApple OSS Distributions __deprecated_msg("use strlcat") 301*c54f35caSApple OSS Distributions __kpi_deprecated_arm64_macos_unavailable 302*c54f35caSApple OSS Distributions extern char *strncat(char *dst, const char *src, size_t n); 303*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(strncat) 304*c54f35caSApple OSS Distributions #define strncat(dst, src, n) __builtin___strncat_chk(dst, src, n, __xnu_bos_strict(dst)) 305*c54f35caSApple OSS Distributions #endif 306*c54f35caSApple OSS Distributions 307*c54f35caSApple OSS Distributions 308*c54f35caSApple OSS Distributions __deprecated_msg("use strlcpy") 309*c54f35caSApple OSS Distributions __kpi_deprecated_arm64_macos_unavailable 310*c54f35caSApple OSS Distributions extern char *strncpy(char *dst, const char *src, size_t n); 311*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(strncpy) 312*c54f35caSApple OSS Distributions #define strncpy(dst, src, n) __builtin___strncpy_chk(dst, src, n, __xnu_bos_strict(dst)) 313*c54f35caSApple OSS Distributions #endif 314*c54f35caSApple OSS Distributions 315*c54f35caSApple OSS Distributions __deprecated_msg("use strlcpy") 316*c54f35caSApple OSS Distributions __kpi_deprecated_arm64_macos_unavailable 317*c54f35caSApple OSS Distributions extern char *strcpy(char *, const char *); 318*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(strcpy) 319*c54f35caSApple OSS Distributions /* rdar://103287225 */ 320*c54f35caSApple OSS Distributions #define strcpy(dst, src, len) __builtin___strcpy_chk(dst, src, __xnu_bos_strict(dst)) 321*c54f35caSApple OSS Distributions #endif 322*c54f35caSApple OSS Distributions 323*c54f35caSApple OSS Distributions __deprecated_msg("use strlcat") 324*c54f35caSApple OSS Distributions __kpi_deprecated_arm64_macos_unavailable 325*c54f35caSApple OSS Distributions extern char *strcat(char *dst, const char *src); 326*c54f35caSApple OSS Distributions #if XNU_USE_CHK_BUILTIN(strcat) 327*c54f35caSApple OSS Distributions #define strcat(dst, src) __builtin___strcat_chk(dst, src, __xnu_bos_strict(dst)) 328*c54f35caSApple OSS Distributions #endif 329*c54f35caSApple OSS Distributions 330*c54f35caSApple OSS Distributions #if XNU_PLATFORM_MacOSX 331*c54f35caSApple OSS Distributions #ifndef KERNEL_PRIVATE 332*c54f35caSApple OSS Distributions extern char *STRDUP(const char *, int); 333*c54f35caSApple OSS Distributions #endif 334*c54f35caSApple OSS Distributions #endif /* XNU_PLATFORM_MacOSX */ 335*c54f35caSApple OSS Distributions 336*c54f35caSApple OSS Distributions #endif /* !__has_ptrcheck */ 337*c54f35caSApple OSS Distributions 338*c54f35caSApple OSS Distributions #if __has_include(<san/memintrinsics.h>) 339*c54f35caSApple OSS Distributions #include <san/memintrinsics.h> 340*c54f35caSApple OSS Distributions #endif 341*c54f35caSApple OSS Distributions 342*c54f35caSApple OSS Distributions __END_DECLS 343*c54f35caSApple OSS Distributions 344*c54f35caSApple OSS Distributions #endif /* _STRING_H_ */ 345