19e9803bfSMichael Jones //===-- Implementation of strncat -----------------------------------------===// 29e9803bfSMichael Jones // 39e9803bfSMichael Jones // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 49e9803bfSMichael Jones // See https://llvm.org/LICENSE.txt for license information. 59e9803bfSMichael Jones // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 69e9803bfSMichael Jones // 79e9803bfSMichael Jones //===----------------------------------------------------------------------===// 89e9803bfSMichael Jones 99e9803bfSMichael Jones #include "src/string/strncat.h" 109e9803bfSMichael Jones #include "src/string/string_utils.h" 119e9803bfSMichael Jones #include "src/string/strncpy.h" 129e9803bfSMichael Jones 139e9803bfSMichael Jones #include "src/__support/common.h" 149e9803bfSMichael Jones 159e9803bfSMichael Jones namespace __llvm_libc { 169e9803bfSMichael Jones 179e9803bfSMichael Jones LLVM_LIBC_FUNCTION(char *, strncat, 189e9803bfSMichael Jones (char *__restrict dest, const char *__restrict src, 199e9803bfSMichael Jones size_t count)) { 20*1c92911eSMichael Jones size_t src_length = internal::string_length(src); 21*1c92911eSMichael Jones size_t copy_amount = src_length > count ? count : src_length; 22*1c92911eSMichael Jones size_t dest_length = internal::string_length(dest); 23*1c92911eSMichael Jones __llvm_libc::strncpy(dest + dest_length, src, copy_amount); 24*1c92911eSMichael Jones dest[dest_length + copy_amount] = '\0'; 259e9803bfSMichael Jones return dest; 269e9803bfSMichael Jones } 279e9803bfSMichael Jones 289e9803bfSMichael Jones } // namespace __llvm_libc 29