xref: /plan9/sys/src/libc/port/strstr.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier /*
53e12c5d1SDavid du Colombier  * Return pointer to first occurrence of s2 in s1,
63e12c5d1SDavid du Colombier  * 0 if none
73e12c5d1SDavid du Colombier  */
83e12c5d1SDavid du Colombier char*
strstr(char * s1,char * s2)93e12c5d1SDavid du Colombier strstr(char *s1, char *s2)
103e12c5d1SDavid du Colombier {
11*7dd7cddfSDavid du Colombier 	char *p, *pa, *pb;
12*7dd7cddfSDavid du Colombier 	int c0, c;
133e12c5d1SDavid du Colombier 
14*7dd7cddfSDavid du Colombier 	c0 = *s2;
15*7dd7cddfSDavid du Colombier 	if(c0 == 0)
163e12c5d1SDavid du Colombier 		return s1;
17*7dd7cddfSDavid du Colombier 	s2++;
18*7dd7cddfSDavid du Colombier 	for(p=strchr(s1, c0); p; p=strchr(p+1, c0)) {
19*7dd7cddfSDavid du Colombier 		pa = p;
20*7dd7cddfSDavid du Colombier 		for(pb=s2;; pb++) {
21*7dd7cddfSDavid du Colombier 			c = *pb;
22*7dd7cddfSDavid du Colombier 			if(c == 0)
233e12c5d1SDavid du Colombier 				return p;
24*7dd7cddfSDavid du Colombier 			if(c != *++pa)
25*7dd7cddfSDavid du Colombier 				break;
26*7dd7cddfSDavid du Colombier 		}
27*7dd7cddfSDavid du Colombier 	}
283e12c5d1SDavid du Colombier 	return 0;
293e12c5d1SDavid du Colombier }
30