13e12c5d1SDavid du Colombier #include <string.h>
23e12c5d1SDavid du Colombier
33e12c5d1SDavid du Colombier #define N 256
43e12c5d1SDavid du Colombier
53e12c5d1SDavid du Colombier char*
strtok_r(char * s,const char * b,char ** last)6*2d069feaSDavid du Colombier strtok_r(char *s, const char *b, char **last)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier char map[N], *os;
93e12c5d1SDavid du Colombier
103e12c5d1SDavid du Colombier memset(map, 0, N);
113e12c5d1SDavid du Colombier while(*b)
123e12c5d1SDavid du Colombier map[*(unsigned char*)b++] = 1;
133e12c5d1SDavid du Colombier if(s == 0)
14*2d069feaSDavid du Colombier s = *last;
153e12c5d1SDavid du Colombier while(map[*(unsigned char*)s++])
163e12c5d1SDavid du Colombier ;
173e12c5d1SDavid du Colombier if(*--s == 0)
183e12c5d1SDavid du Colombier return 0;
193e12c5d1SDavid du Colombier os = s;
203e12c5d1SDavid du Colombier while(map[*(unsigned char*)s] == 0)
213e12c5d1SDavid du Colombier if(*s++ == 0) {
22*2d069feaSDavid du Colombier *last = s-1;
233e12c5d1SDavid du Colombier return os;
243e12c5d1SDavid du Colombier }
253e12c5d1SDavid du Colombier *s++ = 0;
26*2d069feaSDavid du Colombier *last = s;
273e12c5d1SDavid du Colombier return os;
283e12c5d1SDavid du Colombier }
29*2d069feaSDavid du Colombier
30*2d069feaSDavid du Colombier char*
strtok(char * s,const char * b)31*2d069feaSDavid du Colombier strtok(char *s, const char *b)
32*2d069feaSDavid du Colombier {
33*2d069feaSDavid du Colombier static char *under_rock;
34*2d069feaSDavid du Colombier
35*2d069feaSDavid du Colombier return strtok_r(s, b, &under_rock);
36*2d069feaSDavid du Colombier }
37