xref: /freebsd/lib/libc/aarch64/string/strncat.c (revision 429b03a00ba74ae0188cce3f3064cfac023e18c5)
13dc54291SGetz Mikalsen /*-
23dc54291SGetz Mikalsen  * SPDX-License-Identifier: BSD-2-Clause
33dc54291SGetz Mikalsen  *
43dc54291SGetz Mikalsen  * Copyright (c) 2023 Robert Clausecker
53dc54291SGetz Mikalsen  */
63dc54291SGetz Mikalsen 
73dc54291SGetz Mikalsen #include <sys/cdefs.h>
83dc54291SGetz Mikalsen 
93dc54291SGetz Mikalsen #include <string.h>
103dc54291SGetz Mikalsen 
11*429b03a0SKyle Evans #undef strncat	/* _FORTIFY_SOURCE */
12*429b03a0SKyle Evans 
133dc54291SGetz Mikalsen void *__memccpy(void *restrict, const void *restrict, int, size_t);
143dc54291SGetz Mikalsen 
153dc54291SGetz Mikalsen char *
strncat(char * dest,const char * src,size_t n)163dc54291SGetz Mikalsen strncat(char *dest, const char *src, size_t n)
173dc54291SGetz Mikalsen {
183dc54291SGetz Mikalsen 	size_t len;
193dc54291SGetz Mikalsen 	char *endptr;
203dc54291SGetz Mikalsen 
213dc54291SGetz Mikalsen 	len = strlen(dest);
223dc54291SGetz Mikalsen 	endptr = __memccpy(dest + len, src, '\0', n);
233dc54291SGetz Mikalsen 
243dc54291SGetz Mikalsen 	/* avoid an extra branch */
253dc54291SGetz Mikalsen 	if (endptr == NULL)
263dc54291SGetz Mikalsen 		endptr = dest + len + n + 1;
273dc54291SGetz Mikalsen 
283dc54291SGetz Mikalsen 	endptr[-1] = '\0';
293dc54291SGetz Mikalsen 
303dc54291SGetz Mikalsen 	return (dest);
313dc54291SGetz Mikalsen }
32