/* * Copyright (c) 2012-2017 Roberto E. Vargas Caballero * * SPDX-License-Identifier: BSD-3-Clause */ /* * Portions copyright (c) 2018-2025, Arm Limited and Contributors. * Portions copyright (c) 2023, Intel Corporation. All rights reserved. * All rights reserved. */ #ifndef STRING_H #define STRING_H #include /* * When conditions are right, the compiler may have a baked-in call that can be * inlined and that will be much more optimal than our generic implementation. * When it doesn't, it will emit a call to the original function for which we * provide an implementation. */ #define memcpy __builtin_memcpy #define memset __builtin_memset #define memcmp __builtin_memcmp #define memchr __builtin_memchr #define strcmp __builtin_strcmp #define strncmp __builtin_strncmp #define strchr __builtin_strchr #define strlen __builtin_strlen #define strrchr __builtin_strrchr int memcpy_s(void *dst, size_t dsize, void *src, size_t ssize); void *memmove(void *dst, const void *src, size_t len); void *memrchr(const void *src, int c, size_t len); size_t strnlen(const char *s, size_t maxlen); size_t strlcpy(char * dst, const char * src, size_t dsize); size_t strlcat(char * dst, const char * src, size_t dsize); char *strtok_r(char *s, const char *delim, char **last); size_t strnlen_secure(const char *str, size_t maxlen); int strcpy_secure(char *restrict dest, size_t dest_size, const char *restrict src); #endif /* STRING_H */