implemented strcasestr for dmenu (I call it cistrstr) for portability issues (cygwin has no strcasestr, oh dear)
This commit is contained in:
parent
1c488e6dac
commit
8b2f132973
26
dmenu.c
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…
Reference in New Issue