commit 8b2f132973f0fc8150ea66debbed057d849b5cfe
parent 1c488e6dac6e327ce06685556b1989bd75faf241
Author: Anselm R. Garbe <[email protected]>
Date: Mon, 1 Oct 2007 15:28:42 +0200
implemented strcasestr for dmenu (I call it cistrstr) for portability issues (cygwin has no strcasestr, oh dear)
Diffstat:
M | dmenu.c | | | 26 | +++++++++++++++++++++++++- |
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git 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;