strtok.c 505 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include <string.h>
  2. #define N 256
  3. char*
  4. strtok_r(char *s, const char *b, char **last)
  5. {
  6. char map[N], *os;
  7. memset(map, 0, N);
  8. while(*b)
  9. map[*(unsigned char*)b++] = 1;
  10. if(s == 0)
  11. s = *last;
  12. while(map[*(unsigned char*)s++])
  13. ;
  14. if(*--s == 0)
  15. return 0;
  16. os = s;
  17. while(map[*(unsigned char*)s] == 0)
  18. if(*s++ == 0) {
  19. *last = s-1;
  20. return os;
  21. }
  22. *s++ = 0;
  23. *last = s;
  24. return os;
  25. }
  26. char*
  27. strtok(char *s, const char *b)
  28. {
  29. static char *under_rock;
  30. return strtok_r(s, b, &under_rock);
  31. }