paulbergmann_mpstubs/utils/string.h

123 lines
4.2 KiB
C

/*! \file
* \brief General purpose \ref string "String functions"
*/
#pragma once
#include "types.h"
/*! \defgroup string String function
* \brief String functions as provided by `%string.h` in the C standard library
*/
/*! \brief Find the first occurrence of a character in a string
* \ingroup string
* \param s string to
* \param c character to find
* \return Pointer to first occurrence of the character
* or to null byte at the end of the string if not found
*/
extern "C" char *strchrnul(const char *s, int c);
/*! \brief Find the first occurrence of a character in a string
* \ingroup string
* \param s string to
* \param c character to find
* \return Pointer to first occurrence of the character
* or to nullptr if not found
*/
extern "C" char *strchr(const char *s, int c);
/*! \brief Compare two strings
* \ingroup string
* \param s1 first string
* \param s2 second string
* \return an integer less than, equal to, or greater than zero if first string is found, respectively,
* to be less than, to match, or be greater than second string
*/
extern "C" int strcmp(const char *s1, const char *s2);
/*! \brief Compare two strings
* \ingroup string
* \param s1 first string
* \param s2 second string
* \param n number of bytes to compare
* \return an integer less than, equal to, or greater than zero if the given number of bytes of the first string are
* found, respectively, to be less than, to match, or be greater than second string
*/
extern "C" int strncmp(const char *s1, const char *s2, size_t n);
/*! \brief Calculate the length of a string
* \ingroup string
* \param s pointer to a string
* \return number of bytes in the string
*/
extern "C" size_t strlen(const char *s);
/*! \brief Calculate the length of a string, limited by maxlen
* \ingroup string
* \param s pointer to a string
* \param maxlen upper limit of length to be returned
* \return number of bytes in the string, or maxlen -- whichever is smaller
*/
extern "C" size_t strnlen(const char *s, size_t maxlen);
/*! \brief Copy the contents of a string
* including the terminating null byte (`\0`)
* \ingroup string
* \param dest destination string buffer
* \param src source string buffer
* \return a pointer to the destination string buffer
* \note Beware of buffer overruns!
*/
extern "C" char * strcpy(char * dest, const char * src); //NOLINT
/*! \brief Copy the contents of a string up to a maximum length
* or the terminating null byte (`\0`), whatever comes first.
* \ingroup string
* \param dest destination string buffer
* \param src source string buffer
* \param n maximum number of bytes to copy
* \return a pointer to the destination string buffer
* \note If there is no null byte (`\0`) among the first `n` bytes, the destination will not be null-terminated!
*/
extern "C" char * strncpy(char * dest, const char * src, size_t n);
/*! \brief Copy a memory area
* \ingroup string
* \param dest destination buffer
* \param src source buffer
* \param size number of bytes to copy
* \return pointer to destination
* \note The memory must not overlap!
*/
extern "C" void* memcpy(void * __restrict__ dest, void const * __restrict__ src, size_t size);
/*! \brief Copy a memory area
* while the source may overlap with the destination
* \ingroup string
* \param dest destination buffer
* \param src source buffer
* \param size number of bytes to copy
* \return pointer to destination
*/
extern "C" void* memmove(void * dest, void const * src, size_t size);
/*! \brief Fill a memory area with a pattern
* \ingroup string
* \param dest destination buffer
* \param pattern single byte pattern
* \param size number of bytes to fill with pattern
* \return pointer to destination
*/
extern "C" void* memset(void *dest, int pattern, size_t size);
/*! \brief Compare a memory area
* \ingroup string
* \param s1 first memory buffer
* \param s2 second memory buffer
* \param n number of bytes to compare
* \return an integer less than, equal to, or greater than zero if the first n bytes of s1 is found, respectively,
* to be less than, to match, or be greater than the first n bytes of s2.
*/
extern "C" int memcmp(const void * s1, const void * s2, size_t n);