xref: /freebsd/lib/libc/amd64/string/strlcat.c (revision 2b7b03b7)
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