Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/amd64/string/strncat.c
/*- | /*- | ||||
* SPDX-License-Identifier: BSD-2-Clause | * SPDX-License-Identifier: BSD-2-Clause | ||||
* | * | ||||
* Copyright (c) 2023 Robert Clausecker | * Copyright (c) 2023 Robert Clausecker | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
#include <string.h> | #include <string.h> | ||||
void *__memccpy(void *restrict, const void *restrict, int, size_t); | void *__memccpy(void *restrict, const void *restrict, int, size_t); | ||||
char * | char * | ||||
strncat(char *dest, const char *src, size_t n) | (strncat)(char *dest, const char *src, size_t n) | ||||
{ | { | ||||
size_t len; | size_t len; | ||||
char *endptr; | char *endptr; | ||||
len = strlen(dest); | len = strlen(dest); | ||||
endptr = __memccpy(dest + len, src, '\0', n); | endptr = __memccpy(dest + len, src, '\0', n); | ||||
/* avoid an extra branch */ | /* avoid an extra branch */ | ||||
if (endptr == NULL) | if (endptr == NULL) | ||||
endptr = dest + len + n + 1; | endptr = dest + len + n + 1; | ||||
endptr[-1] = '\0'; | endptr[-1] = '\0'; | ||||
return (dest); | return (dest); | ||||
} | } |