mirror of
https://github.com/php/php-src.git
synced 2024-12-02 22:34:55 +08:00
73 lines
1001 B
C
73 lines
1001 B
C
#include <stdio.h>
|
|
|
|
#include "tsrm_config_common.h"
|
|
#include "tsrm_strtok_r.h"
|
|
|
|
static inline int in_character_class(char ch, const char *delim)
|
|
{/*{{{*/
|
|
while (*delim) {
|
|
if (*delim == ch) {
|
|
return 1;
|
|
}
|
|
delim++;
|
|
}
|
|
return 0;
|
|
}/*}}}*/
|
|
|
|
TSRM_API 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
|
|
|
|
/*
|
|
* Local variables:
|
|
* tab-width: 4
|
|
* c-basic-offset: 4
|
|
* End:
|
|
* vim600: sw=4 ts=4 fdm=marker
|
|
* vim<600: sw=4 ts=4
|
|
*/
|