blob: 965a02b6a005071251759789b324a8224dc36cac [file] [log] [blame]
// Copyright Microsoft and CHERIoT Contributors.
// SPDX-License-Identifier: MIT
#pragma once
#include <cdefs.h>
#include <stddef.h>
#include <stdint.h>
int __cheri_libcall memcmp(const void *str1, const void *str2, size_t count);
void *__cheri_libcall memcpy(void *dest, const void *src, size_t n);
void *__cheri_libcall memset(void *, int, size_t);
void *__cheri_libcall memmove(void *dest, const void *src, size_t n);
void *__cheri_libcall memchr(const void *, int, size_t);
void *__cheri_libcall memrchr(const void *, int, size_t);
size_t __cheri_libcall strlen(const char *str);
int __cheri_libcall strncmp(const char *s1, const char *s2, size_t n);
char *__cheri_libcall strncpy(char *dest, const char *src, size_t n);
int __cheri_libcall strcmp(const char *s1, const char *s2);
char *__cheri_libcall strnstr(const char *haystack,
const char *needle,
size_t haystackLength);
char *__cheri_libcall strchr(const char *s, int c);
size_t __cheri_libcall strlcpy(char *dest, const char *src, size_t n);
/**
* Explicit bzero is a memset variant that the compiler is not permitted to
* remove. Our implementation simply wraps memset and is safe from removal
* because it is provided by a different shared library.
*/
void __cheri_libcall explicit_bzero(void *s, size_t n);
__always_inline static inline char *strcpy(char *dst, const char *src)
{
return dst + strlcpy(dst, src, SIZE_MAX);
}
__always_inline static inline char *strstr(const char *haystack,
const char *needle)
{
return strnstr(haystack, needle, SIZE_MAX);
}