2000-09-04 02:18:13 +08:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2000-09-07 04:27:12 +08:00
|
|
|
#include "tsrm_config_common.h"
|
|
|
|
#include "tsrm_strtok_r.h"
|
2000-09-11 23:15:29 +08:00
|
|
|
|
2000-09-07 04:27:12 +08:00
|
|
|
static inline int in_character_class(char ch, const char *delim)
|
2000-09-04 02:18:13 +08:00
|
|
|
{
|
|
|
|
while (*delim) {
|
|
|
|
if (*delim == ch) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
delim++;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *tsrm_strtok_r(char *s, const char *delim, char **last)
|
|
|
|
{
|
|
|
|
char *token;
|
|
|
|
|
|
|
|
if (s == NULL) {
|
|
|
|
s = *last;
|
|
|
|
}
|
|
|
|
|
|
|
|
while (*s && in_character_class(*s, delim)) {
|
|
|
|
s++;
|
|
|
|
}
|
|
|
|
if (!*s) {
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
token = s;
|
|
|
|
|
|
|
|
while (*s && !in_character_class(*s, delim)) {
|
|
|
|
s++;
|
|
|
|
}
|
|
|
|
if (!*s) {
|
|
|
|
*last = s;
|
|
|
|
} else {
|
|
|
|
*s = '\0';
|
|
|
|
*last = s + 1;
|
|
|
|
}
|
|
|
|
return token;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
main()
|
|
|
|
{
|
|
|
|
char foo[] = "/foo/bar//\\barbara";
|
|
|
|
char *last;
|
|
|
|
char *token;
|
|
|
|
|
|
|
|
token = tsrm_strtok_r(foo, "/\\", &last);
|
|
|
|
while (token) {
|
|
|
|
printf ("Token = '%s'\n", token);
|
|
|
|
token = tsrm_strtok_r(NULL, "/\\", &last);
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|