xref: /plan9/sys/src/libc/port/strtok.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier #include <u.h>
2*3e12c5d1SDavid du Colombier #include <libc.h>
3*3e12c5d1SDavid du Colombier 
4*3e12c5d1SDavid du Colombier #define	N	256
5*3e12c5d1SDavid du Colombier 
6*3e12c5d1SDavid du Colombier char*
strtok(char * s,char * b)7*3e12c5d1SDavid du Colombier strtok(char *s, char *b)
8*3e12c5d1SDavid du Colombier {
9*3e12c5d1SDavid du Colombier 	static char *under_rock;
10*3e12c5d1SDavid du Colombier 	char map[N], *os;
11*3e12c5d1SDavid du Colombier 
12*3e12c5d1SDavid du Colombier 	memset(map, 0, N);
13*3e12c5d1SDavid du Colombier 	while(*b)
14*3e12c5d1SDavid du Colombier 		map[*(uchar*)b++] = 1;
15*3e12c5d1SDavid du Colombier 	if(s == 0)
16*3e12c5d1SDavid du Colombier 		s = under_rock;
17*3e12c5d1SDavid du Colombier 	while(map[*(uchar*)s++])
18*3e12c5d1SDavid du Colombier 		;
19*3e12c5d1SDavid du Colombier 	if(*--s == 0)
20*3e12c5d1SDavid du Colombier 		return 0;
21*3e12c5d1SDavid du Colombier 	os = s;
22*3e12c5d1SDavid du Colombier 	while(map[*(uchar*)s] == 0)
23*3e12c5d1SDavid du Colombier 		if(*s++ == 0) {
24*3e12c5d1SDavid du Colombier 			under_rock = s-1;
25*3e12c5d1SDavid du Colombier 			return os;
26*3e12c5d1SDavid du Colombier 		}
27*3e12c5d1SDavid du Colombier 	*s++ = 0;
28*3e12c5d1SDavid du Colombier 	under_rock = s;
29*3e12c5d1SDavid du Colombier 	return os;
30*3e12c5d1SDavid du Colombier }
31