tsrm_strtok_r.c 838 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <stdio.h>
  2. #include "tsrm_config_common.h"
  3. #include "tsrm_strtok_r.h"
  4. static inline int in_character_class(char ch, const char *delim)
  5. {
  6. while (*delim) {
  7. if (*delim == ch) {
  8. return 1;
  9. }
  10. delim++;
  11. }
  12. return 0;
  13. }
  14. char *tsrm_strtok_r(char *s, const char *delim, char **last)
  15. {
  16. char *token;
  17. if (s == NULL) {
  18. s = *last;
  19. }
  20. while (*s && in_character_class(*s, delim)) {
  21. s++;
  22. }
  23. if (!*s) {
  24. return NULL;
  25. }
  26. token = s;
  27. while (*s && !in_character_class(*s, delim)) {
  28. s++;
  29. }
  30. if (!*s) {
  31. *last = s;
  32. } else {
  33. *s = '\0';
  34. *last = s + 1;
  35. }
  36. return token;
  37. }
  38. #if 0
  39. main()
  40. {
  41. char foo[] = "/foo/bar//\\barbara";
  42. char *last;
  43. char *token;
  44. token = tsrm_strtok_r(foo, "/\\", &last);
  45. while (token) {
  46. printf ("Token = '%s'\n", token);
  47. token = tsrm_strtok_r(NULL, "/\\", &last);
  48. }
  49. return 0;
  50. }
  51. #endif