1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2023 Robert Clausecker
5 */
6
7 #include <sys/cdefs.h>
8
9 #include <string.h>
10
11 #undef strncat /* _FORTIFY_SOURCE */
12
13 void *__memccpy(void *restrict, const void *restrict, int, size_t);
14
15 char *
strncat(char * dest,const char * src,size_t n)16 strncat(char *dest, const char *src, size_t n)
17 {
18 size_t len;
19 char *endptr;
20
21 len = strlen(dest);
22 endptr = __memccpy(dest + len, src, '\0', n);
23
24 /* avoid an extra branch */
25 if (endptr == NULL)
26 endptr = dest + len + n + 1;
27
28 endptr[-1] = '\0';
29
30 return (dest);
31 }
32