implemented strcasestr for dmenu (I call it cistrstr) for portability issues (cygwin has no strcasestr, oh dear)

master
Anselm R. Garbe 17 years ago
parent 1c488e6dac
commit 8b2f132973
  1. 26
      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;

Loading…
Cancel
Save