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