1f773d37eScgyurgyik //===-- Implementation of strnlen------------------------------------------===//
2f773d37eScgyurgyik //
3f773d37eScgyurgyik // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4f773d37eScgyurgyik // See https://llvm.org/LICENSE.txt for license information.
5f773d37eScgyurgyik // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f773d37eScgyurgyik //
7f773d37eScgyurgyik //===----------------------------------------------------------------------===//
8f773d37eScgyurgyik 
9f773d37eScgyurgyik #include "src/string/strnlen.h"
10c92d1aa4Scgyurgyik #include "src/string/string_utils.h"
11f773d37eScgyurgyik 
12f773d37eScgyurgyik #include "src/__support/common.h"
13f773d37eScgyurgyik #include <stddef.h>
14f773d37eScgyurgyik 
15f773d37eScgyurgyik namespace __llvm_libc {
16f773d37eScgyurgyik 
17*a0b65a7bSMichael Jones LLVM_LIBC_FUNCTION(size_t, strnlen, (const char *src, size_t n)) {
18c92d1aa4Scgyurgyik   const void *temp = internal::find_first_character(
19c92d1aa4Scgyurgyik       reinterpret_cast<const unsigned char *>(src), '\0', n);
20c92d1aa4Scgyurgyik   return temp ? reinterpret_cast<const char *>(temp) - src : n;
21f773d37eScgyurgyik }
22f773d37eScgyurgyik 
23f773d37eScgyurgyik } // namespace __llvm_libc
24