X-Git-Url: https://git.saurik.com/apple/libplatform.git/blobdiff_plain/e39c3b4b1d65e3593d0e74f799230d571e52d4fa..438624e04d57192b9d4dd7a6083a0ccd59a5a95f:/src/string/generic/strlcat.c diff --git a/src/string/generic/strlcat.c b/src/string/generic/strlcat.c new file mode 100644 index 0000000..ade1f7a --- /dev/null +++ b/src/string/generic/strlcat.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2011 Apple, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#include + +#if !_PLATFORM_OPTIMIZED_STRLCAT + +size_t +_platform_strlcat(char * restrict dst, const char * restrict src, size_t maxlen) { + const size_t srclen = _platform_strlen(src); + const size_t dstlen = _platform_strnlen(dst, maxlen); + if (dstlen == maxlen) return maxlen+srclen; + if (srclen < maxlen-dstlen) { + _platform_memmove(dst+dstlen, src, srclen+1); + } else { + _platform_memmove(dst+dstlen, src, maxlen-dstlen-1); + dst[maxlen-1] = '\0'; + } + return dstlen + srclen; +} + +#if VARIANT_STATIC +size_t +strlcat(char * restrict dst, const char * restrict src, size_t maxlen) { + return _platform_strlcat(dst, src, maxlen); +} +#endif + +#endif