// SPDX-License-Identifier: CDDL-1.0 /* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. * You may only use this file in accordance with the terms of version * 1.0 of the CDDL. * * A full copy of the text of the CDDL should have accompanied this * source. A copy of the CDDL is also available via the Internet at * https://opensource.org/license/CDDL-1.0. */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef HAVE_STRLCAT #include #include /* * Appends src to the dstsize buffer at dst. The append will never * overflow the destination buffer and the buffer will always be null * terminated. Never reference beyond &dst[dstsize-1] when computing * the length of the pre-existing string. */ size_t strlcat(char *dst, const char *src, size_t dstsize) { char *df = dst; size_t left = dstsize; size_t l1; size_t l2 = strlen(src); size_t copied; while (left-- != 0 && *df != '\0') df++; l1 = df - dst; if (dstsize == l1) return (l1 + l2); copied = l1 + l2 >= dstsize ? dstsize - l1 - 1 : l2; (void) memcpy(dst + l1, src, copied); dst[l1+copied] = '\0'; return (l1 + l2); } #endif