/** * Strcat variant respecting buffer capacity. * Function signatures based on libbsd. * * Created by Ondřej Hruška on 2020/09/19. */ #ifndef STRLCAT_H #define STRLCAT_H #include /** * Append a zero-terminated to a zero-terminated buffer. * * @param[out] dst - destination buffer * @param[in] src - source string * @param[in] capacity - destination buffer capacity * @return The buffer size needed. If > size, then data loss occurred. Returns 0 if invalid arguments were supplied. */ size_t strlcat(char *__restrict__ dst, const char *__restrict__ src, size_t capacity); /** * Append at most N characters of a zero-terminated string to a zero-terminated buffer. * * @param[out] dst - destination buffer * @param[in] src - source string * @param[in] capacity - destination buffer capacity * @param[in] num - number of bytes to write * @return The buffer size needed. If > size, then data loss occurred. Returns 0 if invalid arguments were supplied. */ size_t strlncat(char *__restrict__ dst, const char *__restrict__ src, size_t capacity, size_t num); /** * Copy a zero-terminated string to a zero-terminated buffer. * * @param[out] dst - destination buffer * @param[in] src - source string * @param[in] capacity - destination buffer capacity * @return The buffer size needed. If > size, then data loss occurred. Returns 0 if invalid arguments were supplied. */ size_t strlcpy(char *__restrict__ dst, const char *__restrict__ src, size_t capacity); /** * Copy at most N characters of a zero-terminated string to a zero-terminated buffer. * * @param[out] dst - destination buffer * @param[in] src - source string * @param[in] capacity - destination buffer capacity * @param[in] num - number of bytes to write * @return The buffer size needed. If > size, then data loss occurred. Returns 0 if invalid arguments were supplied. */ size_t strlncpy(char *__restrict__ dst, const char *__restrict__ src, size_t capacity, size_t num); #endif //STRLCAT_H