tsrm_strtok_r.c 1001 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. TSRM_API 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
  52. /*
  53. * Local variables:
  54. * tab-width: 4
  55. * c-basic-offset: 4
  56. * End:
  57. * vim600: sw=4 ts=4 fdm=marker
  58. * vim<600: sw=4 ts=4
  59. */