aboutsummaryrefslogtreecommitdiffhomepage
path: root/compat/strcasestr.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <hohndel@x200.gr8dns.org>2010-04-13 09:47:48 -0700
committerGravatar Carl Worth <cworth@cworth.org>2010-04-14 11:34:12 -0700
commitd09154465aeae727e93a4abf54ff8f3bf0bdab76 (patch)
tree9727f87261f668ab6d7d23302633387801e54c65 /compat/strcasestr.c
parent25f3185ad088673cb00f4f3ecba60cd9614bbc40 (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.c40
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;
+}