1 #include <stdio.h>
2
3 #include "tsrm_config_common.h"
4 #include "tsrm_strtok_r.h"
5
in_character_class(char ch,const char * delim)6 static inline int in_character_class(char ch, const char *delim)
7 {/*{{{*/
8 while (*delim) {
9 if (*delim == ch) {
10 return 1;
11 }
12 delim++;
13 }
14 return 0;
15 }/*}}}*/
16
tsrm_strtok_r(char * s,const char * delim,char ** last)17 TSRM_API char *tsrm_strtok_r(char *s, const char *delim, char **last)
18 {/*{{{*/
19 char *token;
20
21 if (s == NULL) {
22 s = *last;
23 }
24
25 while (*s && in_character_class(*s, delim)) {
26 s++;
27 }
28 if (!*s) {
29 return NULL;
30 }
31
32 token = s;
33
34 while (*s && !in_character_class(*s, delim)) {
35 s++;
36 }
37 if (!*s) {
38 *last = s;
39 } else {
40 *s = '\0';
41 *last = s + 1;
42 }
43 return token;
44 }/*}}}*/
45
46 #if 0
47
48 main()
49 {
50 char foo[] = "/foo/bar//\\barbara";
51 char *last;
52 char *token;
53
54 token = tsrm_strtok_r(foo, "/\\", &last);
55 while (token) {
56 printf ("Token = '%s'\n", token);
57 token = tsrm_strtok_r(NULL, "/\\", &last);
58 }
59
60 return 0;
61 }
62
63 #endif
64
65 /*
66 * Local variables:
67 * tab-width: 4
68 * c-basic-offset: 4
69 * End:
70 * vim600: sw=4 ts=4 fdm=marker
71 * vim<600: sw=4 ts=4
72 */
73