|
|
Message-ID: <CAL3m8eCJfkbdR84sN7-HTkQbWkFHfvKKZAKpO8ajCDeh5wv00w@mail.gmail.com>
Date: Thu, 21 Feb 2013 10:40:38 -0500
From: Strake <strake888@...il.com>
To: musl <musl@...ts.openwall.com>
Subject: [PATCH] write strcasestr
>From 6a228eaf8bc2b3830c56bd2c8caa2ffa44245531 Mon Sep 17 00:00:00 2001
From: Strake <strake888@...il.com>
Date: Thu, 21 Feb 2013 10:41:09 -0500
Subject: [PATCH] write strcasestr
---
src/string/strcasestr.c | 36 ++++++++++++++++++++++++++++++++----
1 file changed, 32 insertions(+), 4 deletions(-)
diff --git a/src/string/strcasestr.c b/src/string/strcasestr.c
index f1cb0e8..c67c606 100644
--- a/src/string/strcasestr.c
+++ b/src/string/strcasestr.c
@@ -1,7 +1,35 @@
+#include <stdlib.h>
#include <string.h>
+#include <wchar.h>
+#include <stdio.h>
-char *strcasestr(const char *h, const char *n)
-{
- //FIXME!
- return strstr(h, n);
+static void mbstolower (char *s) {
+ mbstate_t mbst;
+ wchar_t wx;
+
+ while (*s) {
+ memset (&mbst, 0, sizeof (mbstate_t));
+ if (mbrtowc (&wx, s, MB_CUR_MAX, &mbst) < 0) break;
+ wx = towlower (wx);
+ memset (&mbst, 0, sizeof (mbstate_t));
+ s += wcrtomb (s, wx, &mbst);
+ }
+}
+
+char *strcasestr (const char *s, const char *t) {
+ char *x, *y, *z;
+
+ x = strdup (s); if (!x) return 0;
+ y = strdup (t); if (!y) return 0;
+
+ mbstolower (x);
+ mbstolower (y);
+
+ z = strstr (x, y);
+ if (z) s += z - x; else s = 0;
+
+ free (x);
+ free (y);
+
+ return s;
}
--
1.7.11.3
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.