diff options
Diffstat (limited to 'lib/libc/amd64/string/strlcat.c')
-rw-r--r-- | lib/libc/amd64/string/strlcat.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/libc/amd64/string/strlcat.c b/lib/libc/amd64/string/strlcat.c new file mode 100644 index 000000000000..94fdc0963dc3 --- /dev/null +++ b/lib/libc/amd64/string/strlcat.c @@ -0,0 +1,27 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2023 Robert Clausecker + */ + +#include <sys/cdefs.h> + +#include <string.h> + +#undef strlcat /* FORTIFY_SOURCE */ + +void *__memchr(const void *, int, size_t); +size_t __strlcpy(char *restrict, const char *restrict, size_t); + +size_t +strlcat(char *restrict dst, const char *restrict src, size_t dstsize) +{ + char *loc = __memchr(dst, '\0', dstsize); + + if (loc != NULL) { + size_t dstlen = (size_t)(loc - dst); + + return (dstlen + __strlcpy(loc, src, dstsize - dstlen)); + } else + return (dstsize + strlen(src)); +} |