zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

_string.h (5479B) - Raw


      1 /*
      2  * Copyright (c) 2007,2017,2023 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 #ifndef _STRING_H_
     25 # error "Never use <secure/_string.h> directly; include <string.h> instead."
     26 #endif
     27 
     28 #ifndef _SECURE__STRING_H_
     29 #define _SECURE__STRING_H_
     30 
     31 #include <sys/cdefs.h>
     32 #include <Availability.h>
     33 #include <secure/_common.h>
     34 
     35 #if _USE_FORTIFY_LEVEL > 0
     36 
     37 /* <rdar://problem/12622659> */
     38 #if defined(__clang__) && \
     39 		((defined(__apple_build_version__) && __apple_build_version__ >= 4260006) || \
     40 		(!defined(__apple_build_version__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 3))))
     41 #define __HAS_FIXED_CHK_PROTOTYPES 1
     42 #else
     43 #define __HAS_FIXED_CHK_PROTOTYPES 0
     44 #endif
     45 
     46 /* memccpy, memcpy, mempcpy, memmove, memset, strcpy, strlcpy, stpcpy,
     47    strncpy, stpncpy, strcat, strlcat, and strncat */
     48 
     49 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 || \
     50 		defined(__DRIVERKIT_VERSION_MIN_REQUIRED)
     51 #if __has_builtin(__builtin___memccpy_chk) && __HAS_FIXED_CHK_PROTOTYPES
     52 #undef memccpy
     53 /* void *memccpy(void *dst, const void *src, int c, size_t n) */
     54 #define memccpy(dest, ...) \
     55 		__builtin___memccpy_chk (dest, __VA_ARGS__, __darwin_obsz0 (dest))
     56 #endif
     57 #endif
     58 
     59 #if __has_builtin(__builtin___memcpy_chk) || defined(__GNUC__)
     60 #undef memcpy
     61 /* void *memcpy(void *dst, const void *src, size_t n) */
     62 #define memcpy(dest, ...) \
     63 		__builtin___memcpy_chk (dest, __VA_ARGS__, __darwin_obsz0 (dest))
     64 #endif
     65 
     66 #if __has_builtin(__builtin___memmove_chk) || defined(__GNUC__)
     67 #undef memmove
     68 /* void *memmove(void *dst, const void *src, size_t len) */
     69 #define memmove(dest, ...) \
     70 		__builtin___memmove_chk (dest, __VA_ARGS__, __darwin_obsz0 (dest))
     71 #endif
     72 
     73 #if __has_builtin(__builtin___memset_chk) || defined(__GNUC__)
     74 #undef memset
     75 /* void *memset(void *b, int c, size_t len) */
     76 #define memset(dest, ...) \
     77 		__builtin___memset_chk (dest, __VA_ARGS__, __darwin_obsz0 (dest))
     78 #endif
     79 
     80 #if __has_builtin(__builtin___strcpy_chk) || defined(__GNUC__)
     81 #undef strcpy
     82 /* char *strcpy(char *dst, const char *src) */
     83 #define strcpy(dest, ...) \
     84 		__builtin___strcpy_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
     85 #endif
     86 
     87 #if __DARWIN_C_LEVEL >= 200809L
     88 #if __has_builtin(__builtin___stpcpy_chk) || defined(__GNUC__)
     89 #undef stpcpy
     90 /* char *stpcpy(char *dst, const char *src) */
     91 #define stpcpy(dest, ...) \
     92 		__builtin___stpcpy_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
     93 #endif
     94 #endif /* __DARWIN_C_LEVEL >= 200809L */
     95 
     96 #if __DARWIN_C_LEVEL >= 200809L
     97 #if __has_builtin(__builtin___stpncpy_chk) || __APPLE_CC__ >= 5666 || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)
     98 #undef stpncpy
     99 /* char *stpncpy(char *dst, const char *src, size_t n) */
    100 #define stpncpy(dest, ...) \
    101 		__builtin___stpncpy_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
    102 #endif
    103 #endif /* _DARWIN_C_LEVEL >= 200809L */
    104 
    105 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
    106 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 || \
    107 		defined(__DRIVERKIT_VERSION_MIN_REQUIRED)
    108 #if __has_builtin(__builtin___strlcpy_chk) && __HAS_FIXED_CHK_PROTOTYPES
    109 #undef strlcpy
    110 /* size_t strlcpy(char *dst, const char *source, size_t size) */
    111 #define strlcpy(dest, ...) \
    112 		__builtin___strlcpy_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
    113 #endif
    114 
    115 #if __has_builtin(__builtin___strlcat_chk) && __HAS_FIXED_CHK_PROTOTYPES
    116 #undef strlcat
    117 /* size_t strlcat(char *dst, const char *source, size_t size) */
    118 #define strlcat(dest, ...) \
    119 		__builtin___strlcat_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
    120 #endif
    121 #endif /* __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 */
    122 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
    123 
    124 #if __has_builtin(__builtin___strncpy_chk) || defined(__GNUC__)
    125 #undef strncpy
    126 /* char *strncpy(char *dst, const char *src, size_t n) */
    127 #define strncpy(dest, ...) \
    128 		__builtin___strncpy_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
    129 #endif
    130 
    131 #if __has_builtin(__builtin___strcat_chk) || defined(__GNUC__)
    132 #undef strcat
    133 /* char *strcat(char *s1, const char *s2) */
    134 #define strcat(dest, ...) \
    135 		__builtin___strcat_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
    136 #endif
    137 
    138 #if ! (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 32000)
    139 #if __has_builtin(__builtin___strncat_chk) || defined(__GNUC__)
    140 #undef strncat
    141 /* char *strncat(char *s1, const char *s2, size_t n) */
    142 #define strncat(dest, ...) \
    143 		__builtin___strncat_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
    144 #endif
    145 #endif
    146 
    147 #undef __HAS_FIXED_CHK_PROTOTYPES
    148 
    149 #endif /* _USE_FORTIFY_LEVEL > 0 */
    150 #endif /* _SECURE__STRING_H_ */