1 /* 2 * Copyright (c) 2012-2017 Roberto E. Vargas Caballero 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 /* 7 * Portions copyright (c) 2018-2025, Arm Limited and Contributors. 8 * Portions copyright (c) 2023, Intel Corporation. All rights reserved. 9 * All rights reserved. 10 */ 11 12 #ifndef STRING_H 13 #define STRING_H 14 15 #include <stddef.h> 16 17 /* 18 * When conditions are right, the compiler may have a baked-in call that can be 19 * inlined and that will be much more optimal than our generic implementation. 20 * When it doesn't, it will emit a call to the original function for which we 21 * provide an implementation. 22 */ 23 #define memcpy __builtin_memcpy 24 #define memset __builtin_memset 25 #define memcmp __builtin_memcmp 26 #define memchr __builtin_memchr 27 #define strcmp __builtin_strcmp 28 #define strncmp __builtin_strncmp 29 #define strchr __builtin_strchr 30 #define strlen __builtin_strlen 31 #define strrchr __builtin_strrchr 32 33 int memcpy_s(void *dst, size_t dsize, void *src, size_t ssize); 34 void *memmove(void *dst, const void *src, size_t len); 35 void *memrchr(const void *src, int c, size_t len); 36 size_t strnlen(const char *s, size_t maxlen); 37 size_t strlcpy(char * dst, const char * src, size_t dsize); 38 size_t strlcat(char * dst, const char * src, size_t dsize); 39 char *strtok_r(char *s, const char *delim, char **last); 40 size_t strnlen_secure(const char *str, size_t maxlen); 41 int strcpy_secure(char *restrict dest, size_t dest_size, const char *restrict src); 42 43 #endif /* STRING_H */ 44