12b7b03b7SRobert Clausecker /*-
22b7b03b7SRobert Clausecker * SPDX-License-Identifier: BSD-2-Clause
32b7b03b7SRobert Clausecker *
42b7b03b7SRobert Clausecker * Copyright (c) 2023 Robert Clausecker
52b7b03b7SRobert Clausecker */
62b7b03b7SRobert Clausecker
72b7b03b7SRobert Clausecker #include <sys/cdefs.h>
82b7b03b7SRobert Clausecker
92b7b03b7SRobert Clausecker #include <string.h>
102b7b03b7SRobert Clausecker
112b7b03b7SRobert Clausecker void *__memchr(const void *, int, size_t);
122b7b03b7SRobert Clausecker size_t __strlcpy(char *restrict, const char *restrict, size_t);
132b7b03b7SRobert Clausecker
142b7b03b7SRobert Clausecker size_t
strlcat(char * restrict dst,const char * restrict src,size_t dstsize)152b7b03b7SRobert Clausecker strlcat(char *restrict dst, const char *restrict src, size_t dstsize)
162b7b03b7SRobert Clausecker {
172b7b03b7SRobert Clausecker char *loc = __memchr(dst, '\0', dstsize);
182b7b03b7SRobert Clausecker
192b7b03b7SRobert Clausecker if (loc != NULL) {
202b7b03b7SRobert Clausecker size_t dstlen = (size_t)(loc - dst);
212b7b03b7SRobert Clausecker
222b7b03b7SRobert Clausecker return (dstlen + __strlcpy(loc, src, dstsize - dstlen));
232b7b03b7SRobert Clausecker } else
242b7b03b7SRobert Clausecker return (dstsize + strlen(src));
252b7b03b7SRobert Clausecker }
26