diff options
author | Dirk Hohndel <hohndel@x200.gr8dns.org> | 2010-04-13 09:47:48 -0700 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2010-04-14 11:34:12 -0700 |
commit | d09154465aeae727e93a4abf54ff8f3bf0bdab76 (patch) | |
tree | 9727f87261f668ab6d7d23302633387801e54c65 /compat/strcasestr.c | |
parent | 25f3185ad088673cb00f4f3ecba60cd9614bbc40 (diff) |
Add simplistic reimplementation of strcasestr to compat library
While all systems that I have access to support strcasestr, it is
in fact not part of POSIX. So here's a fallback reimplementation
based on POSIX functions.
Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
Tested-by: Tomas Carnecky <tom@dbservice.com> (on OpenSolaris snv_134)
Diffstat (limited to 'compat/strcasestr.c')
-rw-r--r-- | compat/strcasestr.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/compat/strcasestr.c b/compat/strcasestr.c new file mode 100644 index 00000000..62a3a545 --- /dev/null +++ b/compat/strcasestr.c @@ -0,0 +1,40 @@ +/* + * slow simplistic reimplementation of strcasestr for systems that + * don't include it in their library + * + * based on a GPL implementation in OpenTTD found under GPL v2 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation, version 2. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + +/* Imported into notmuch by Dirk Hohndel - original author unknown. */ + +#include <string.h> + +#include "compat.h" + +char *strcasestr(const char *haystack, const char *needle) +{ + size_t hay_len = strlen(haystack); + size_t needle_len = strlen(needle); + while (hay_len >= needle_len) { + if (strncasecmp(haystack, needle, needle_len) == 0) + return (char *) haystack; + + haystack++; + hay_len--; + } + + return NULL; +} |