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
					
				
					 1 changed files with 25 additions and 1 deletions
				
			
		
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue