Michael Jones a0b65a7bcd [libc] Switch to use a macro which does not insert a section for every libc function.
Summary:
The new macro also inserts the C alias for the C++ implementations
without needing an objcopy based post processing step. The CMake
rules have been updated to reflect this. More CMake cleanup can be
taken up in future rounds and appropriate TODOs have been added for them.

Reviewers: mcgrathr, sivachandra

Subscribers:
2021-01-08 23:52:35 +00:00

30 lines
943 B
C++

//===-- Implementation of strstr ------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "src/string/strstr.h"
#include "src/__support/common.h"
#include <stddef.h>
namespace __llvm_libc {
// TODO: This is a simple brute force implementation. This can be
// improved upon using well known string matching algorithms.
LLVM_LIBC_FUNCTION(char *, strstr, (const char *haystack, const char *needle)) {
for (size_t i = 0; haystack[i]; ++i) {
size_t j;
for (j = 0; haystack[i + j] && haystack[i + j] == needle[j]; ++j)
;
if (!needle[j])
return const_cast<char *>(haystack + i);
}
return nullptr;
}
} // namespace __llvm_libc