xref: /plan9/sys/src/cmd/unix/drawterm/libc/runestrstr.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include <u.h>
2*8ccd4a63SDavid du Colombier #include <libc.h>
3*8ccd4a63SDavid du Colombier 
4*8ccd4a63SDavid du Colombier /*
5*8ccd4a63SDavid du Colombier  * Return pointer to first occurrence of s2 in s1,
6*8ccd4a63SDavid du Colombier  * 0 if none
7*8ccd4a63SDavid du Colombier  */
8*8ccd4a63SDavid du Colombier Rune*
runestrstr(Rune * s1,Rune * s2)9*8ccd4a63SDavid du Colombier runestrstr(Rune *s1, Rune *s2)
10*8ccd4a63SDavid du Colombier {
11*8ccd4a63SDavid du Colombier 	Rune *p, *pa, *pb;
12*8ccd4a63SDavid du Colombier 	int c0, c;
13*8ccd4a63SDavid du Colombier 
14*8ccd4a63SDavid du Colombier 	c0 = *s2;
15*8ccd4a63SDavid du Colombier 	if(c0 == 0)
16*8ccd4a63SDavid du Colombier 		return s1;
17*8ccd4a63SDavid du Colombier 	s2++;
18*8ccd4a63SDavid du Colombier 	for(p=runestrchr(s1, c0); p; p=runestrchr(p+1, c0)) {
19*8ccd4a63SDavid du Colombier 		pa = p;
20*8ccd4a63SDavid du Colombier 		for(pb=s2;; pb++) {
21*8ccd4a63SDavid du Colombier 			c = *pb;
22*8ccd4a63SDavid du Colombier 			if(c == 0)
23*8ccd4a63SDavid du Colombier 				return p;
24*8ccd4a63SDavid du Colombier 			if(c != *++pa)
25*8ccd4a63SDavid du Colombier 				break;
26*8ccd4a63SDavid du Colombier 		}
27*8ccd4a63SDavid du Colombier 	}
28*8ccd4a63SDavid du Colombier 	return 0;
29*8ccd4a63SDavid du Colombier }
30