xref: /plan9/sys/src/ape/lib/ap/gen/strstr.c (revision 781103c4074deb8af160e8a0da2742ba6b29dc2b)
13e12c5d1SDavid du Colombier #include <string.h>
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier /* Return pointer to first occurrence of s2 in s1, NULL if none */
43e12c5d1SDavid du Colombier 
5*781103c4SDavid du Colombier char *
strstr(const char * s1,const char * s2)6*781103c4SDavid du Colombier strstr(const char *s1, const char *s2)
73e12c5d1SDavid du Colombier {
87dd7cddfSDavid du Colombier 	char *p, *pa, *pb;
97dd7cddfSDavid du Colombier 	int c0, c;
103e12c5d1SDavid du Colombier 
117dd7cddfSDavid du Colombier 	c0 = *s2;
127dd7cddfSDavid du Colombier 	if(c0 == 0)
13*781103c4SDavid du Colombier 		return (char *)s1;
147dd7cddfSDavid du Colombier 	s2++;
157dd7cddfSDavid du Colombier 	for(p=strchr(s1, c0); p; p=strchr(p+1, c0)) {
167dd7cddfSDavid du Colombier 		pa = p;
17*781103c4SDavid du Colombier 		for(pb=(char *)s2;; pb++) {
187dd7cddfSDavid du Colombier 			c = *pb;
197dd7cddfSDavid du Colombier 			if(c == 0)
203e12c5d1SDavid du Colombier 				return p;
217dd7cddfSDavid du Colombier 			if(c != *++pa)
227dd7cddfSDavid du Colombier 				break;
237dd7cddfSDavid du Colombier 		}
247dd7cddfSDavid du Colombier 	}
257dd7cddfSDavid du Colombier 	return 0;
263e12c5d1SDavid du Colombier }
273e12c5d1SDavid du Colombier 
28