1d080635bScgyurgyik //===-- Implementation of strstr ------------------------------------------===// 2d080635bScgyurgyik // 3d080635bScgyurgyik // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4d080635bScgyurgyik // See https://llvm.org/LICENSE.txt for license information. 5d080635bScgyurgyik // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6d080635bScgyurgyik // 7d080635bScgyurgyik //===----------------------------------------------------------------------===// 8d080635bScgyurgyik 9d080635bScgyurgyik #include "src/string/strstr.h" 10d080635bScgyurgyik 11d080635bScgyurgyik #include "src/__support/common.h" 12d080635bScgyurgyik #include <stddef.h> 13d080635bScgyurgyik 14d080635bScgyurgyik namespace __llvm_libc { 15d080635bScgyurgyik 16d080635bScgyurgyik // TODO: This is a simple brute force implementation. This can be 17d080635bScgyurgyik // improved upon using well known string matching algorithms. 18*a0b65a7bSMichael Jones LLVM_LIBC_FUNCTION(char *, strstr, (const char *haystack, const char *needle)) { 19d080635bScgyurgyik for (size_t i = 0; haystack[i]; ++i) { 20d080635bScgyurgyik size_t j; 21d080635bScgyurgyik for (j = 0; haystack[i + j] && haystack[i + j] == needle[j]; ++j) 22d080635bScgyurgyik ; 23d080635bScgyurgyik if (!needle[j]) 24d080635bScgyurgyik return const_cast<char *>(haystack + i); 25d080635bScgyurgyik } 26d080635bScgyurgyik return nullptr; 27d080635bScgyurgyik } 28d080635bScgyurgyik 29d080635bScgyurgyik } // namespace __llvm_libc 30