Browse Source

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
commit
8b2f132973
  1. 26
      dmenu.c

26
dmenu.c

@ -58,6 +58,7 @@ void readstdin(void);
void run(void); void run(void);
void setup(Bool bottom); void setup(Bool bottom);
int strcaseido(const char *text, const char *pattern); 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 textnw(const char *text, unsigned int len);
unsigned int textw(const char *text); unsigned int textw(const char *text);
@ -511,7 +512,7 @@ match(char *pattern) {
if(!i->matched && !strncasecmp(pattern, i->text, plen)) if(!i->matched && !strncasecmp(pattern, i->text, plen))
j = appenditem(i, j); j = appenditem(i, j);
for(i = allitems; i; i = i->next) 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); j = appenditem(i, j);
if(idomatch) if(idomatch)
for(i = allitems; i; i = i->next) for(i = allitems; i; i = i->next)
@ -629,6 +630,29 @@ strcaseido(const char *text, const char *pattern) {
return !*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 unsigned int
textnw(const char *text, unsigned int len) { textnw(const char *text, unsigned int len) {
XRectangle r; XRectangle r;

Loading…
Cancel
Save