aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/amd64/string/strncat.c
blob: 2c63ab50b3c38a38159be3dfc928ca8573118ba3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*-
 * SPDX-License-Identifier: BSD-2-Clause
 *
 * Copyright (c) 2023 Robert Clausecker
 */

#include <sys/cdefs.h>

#include <string.h>

#undef strncat	/* _FORTIFY_SOURCE */

void *__memccpy(void *restrict, const void *restrict, int, size_t);

char *
strncat(char *dest, const char *src, size_t n)
{
	size_t len;
	char *endptr;

	len = strlen(dest);
	endptr = __memccpy(dest + len, src, '\0', n);

	/* avoid an extra branch */
	if (endptr == NULL)
		endptr = dest + len + n + 1;

	endptr[-1] = '\0';

	return (dest);
}