xref: /llvm-project/libc/src/string/strnlen.cpp (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
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"
10*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
11c92d1aa4Scgyurgyik #include "src/string/string_utils.h"
12f773d37eScgyurgyik 
13f773d37eScgyurgyik #include "src/__support/common.h"
14f773d37eScgyurgyik #include <stddef.h>
15f773d37eScgyurgyik 
16*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
17f773d37eScgyurgyik 
18a0b65a7bSMichael Jones LLVM_LIBC_FUNCTION(size_t, strnlen, (const char *src, size_t n)) {
19c92d1aa4Scgyurgyik   const void *temp = internal::find_first_character(
20c92d1aa4Scgyurgyik       reinterpret_cast<const unsigned char *>(src), '\0', n);
21c92d1aa4Scgyurgyik   return temp ? reinterpret_cast<const char *>(temp) - src : n;
22f773d37eScgyurgyik }
23f773d37eScgyurgyik 
24*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
25