/* * Copyright (C) 2002 Manuel Novoa III * Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org> * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ /* OpenBSD function: * Append at most n-1-strlen(dst) chars from src to dst and nul-terminate dst. * Returns strlen(src) + strlen({original} dst), so truncation occurred if the * return val is >= n. * Note: If dst doesn't contain a nul in the first n chars, strlen(dst) is * taken as n. */ #include "_string.h" size_t strlcat(register char *__restrict dst, register const char *__restrict src, size_t n) { size_t len; char dummy[1]; len = 0; while (1) { if (len >= n) { dst = dummy; break; } if (!*dst) { break; } ++dst; ++len; } while ((*dst = *src) != 0) { if (++len < n) { ++dst; } ++src; } return len; }