From 5d826ec284603553311b71eab304484a3589c6bc Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sun, 4 Mar 2012 17:20:42 +0100 Subject: [PATCH] Added strstr(3). --- libmaxsi/include/string.h | 2 +- libmaxsi/string.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libmaxsi/include/string.h b/libmaxsi/include/string.h index a7ed294e..80a2be64 100644 --- a/libmaxsi/include/string.h +++ b/libmaxsi/include/string.h @@ -52,6 +52,7 @@ int strncmp(const char*, const char*, size_t); char* strncpy(char* restrict, const char* restrict, size_t); char* strrchr(const char*, int); size_t strspn(const char*, const char*); +char* strstr(const char*, const char*); char* strtok(char* restrict, const char* restrict); char* strtok_r(char* restrict, const char* restrict, char** restrict); @@ -67,7 +68,6 @@ char* strndup(const char*, size_t); size_t strnlen(const char*, size_t); char* strpbrk(const char*, const char*); char* strsignal(int); -char* strstr(const char*, const char*); size_t strxfrm(char* restrict, const char* restrict, size_t); size_t strxfrm_l(char* restrict, const char* restrict, size_t, locale_t); #endif diff --git a/libmaxsi/string.cpp b/libmaxsi/string.cpp index b7bb7ff7..e539901d 100644 --- a/libmaxsi/string.cpp +++ b/libmaxsi/string.cpp @@ -244,6 +244,24 @@ namespace Maxsi return result; } + // TODO: This simple and hacky implementation runs in O(N^2) even though + // this problem can be solved in O(N). + char* strstr(const char* haystack, const char* needle) + { + if ( !needle[0] ) { return (char*) haystack; } + for ( size_t i = 0; haystack[i]; i++ ) + { + bool diff = false; + for ( size_t j = 0; needle[j]; j++ ) + { + if ( haystack[i+j] != needle[j] ) { diff = true; break; } + } + if ( diff ) { continue; } + return (char*) haystack + i; + } + return NULL; + } + #ifndef SORTIX_KERNEL extern "C" char* strdup(const char* input) {