xref: /plan9/sys/src/ape/lib/ap/gen/strtok.c (revision 2d069fea74dfcc83c6858e715bf74862cb64720a)
1 #include <string.h>
2 
3 #define	N	256
4 
5 char*
strtok_r(char * s,const char * b,char ** last)6 strtok_r(char *s, const char *b, char **last)
7 {
8 	char map[N], *os;
9 
10 	memset(map, 0, N);
11 	while(*b)
12 		map[*(unsigned char*)b++] = 1;
13 	if(s == 0)
14 		s = *last;
15 	while(map[*(unsigned char*)s++])
16 		;
17 	if(*--s == 0)
18 		return 0;
19 	os = s;
20 	while(map[*(unsigned char*)s] == 0)
21 		if(*s++ == 0) {
22 			*last = s-1;
23 			return os;
24 		}
25 	*s++ = 0;
26 	*last = s;
27 	return os;
28 }
29 
30 char*
strtok(char * s,const char * b)31 strtok(char *s, const char *b)
32 {
33 	static char *under_rock;
34 
35 	return strtok_r(s, b, &under_rock);
36 }
37