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