summaryrefslogtreecommitdiff
path: root/dmenu.c
diff options
context:
space:
mode:
authorAnselm R. Garbe <garbeam@gmail.com>2007-10-01 15:28:42 +0200
committerAnselm R. Garbe <garbeam@gmail.com>2007-10-01 15:28:42 +0200
commit8b2f132973f0fc8150ea66debbed057d849b5cfe (patch)
tree1a2d661230af69ad8bdde849c048b37e9e8df76e /dmenu.c
parent1c488e6dac6e327ce06685556b1989bd75faf241 (diff)
implemented strcasestr for dmenu (I call it cistrstr) for portability issues (cygwin has no strcasestr, oh dear)
Diffstat (limited to 'dmenu.c')
-rw-r--r--dmenu.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/dmenu.c b/dmenu.c
index b28a548..3256f9c 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -58,6 +58,7 @@ void readstdin(void);
void run(void);
void setup(Bool bottom);
int strcaseido(const char *text, const char *pattern);
+char *cistrstr(const char *s, const char *sub);
unsigned int textnw(const char *text, unsigned int len);
unsigned int textw(const char *text);
@@ -511,7 +512,7 @@ match(char *pattern) {
if(!i->matched && !strncasecmp(pattern, i->text, plen))
j = appenditem(i, j);
for(i = allitems; i; i = i->next)
- if(!i->matched && strcasestr(i->text, pattern))
+ if(!i->matched && cistrstr(i->text, pattern))
j = appenditem(i, j);
if(idomatch)
for(i = allitems; i; i = i->next)
@@ -629,6 +630,29 @@ strcaseido(const char *text, const char *pattern) {
return !*pattern;
}
+char *
+cistrstr(const char *s, const char *sub) {
+ int c, csub;
+ unsigned int len;
+
+ if(!sub)
+ return (char *)s;
+ if((c = *sub++) != 0) {
+ c = tolower(c);
+ len = strlen(sub);
+ do {
+ do {
+ if((csub = *s++) == 0)
+ return (NULL);
+ }
+ while(tolower(csub) != c);
+ }
+ while(strncasecmp(s, sub, len) != 0);
+ s--;
+ }
+ return (char *)s;
+}
+
unsigned int
textnw(const char *text, unsigned int len) {
XRectangle r;