63 lines
1015 B
C
63 lines
1015 B
C
#include <string.h>
|
|
|
|
static char *global_sp = NULL;
|
|
|
|
char *strtok(char *str, const char *delim)
|
|
{
|
|
return strtok_r(str, delim, &global_sp);
|
|
}
|
|
|
|
char *strtok_r(char *str, const char *delim, char **sp)
|
|
{
|
|
int i = 0;
|
|
int len = strlen(delim);
|
|
|
|
if (len == 0) {
|
|
return NULL;
|
|
}
|
|
|
|
if (!str && !sp) {
|
|
return NULL;
|
|
}
|
|
|
|
if (str) {
|
|
*sp = str;
|
|
}
|
|
|
|
char *p_start = *sp;
|
|
while (1) {
|
|
for (i = 0; i < len; i++) {
|
|
if (*p_start == delim[i]) {
|
|
p_start++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (i == len) {
|
|
*sp = p_start;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (**sp == '\0') {
|
|
*sp = NULL;
|
|
return *sp;
|
|
}
|
|
|
|
while (**sp != '\0') {
|
|
for (i = 0; i < len; i++) {
|
|
if (**sp == delim[i]) {
|
|
**sp = '\0';
|
|
break;
|
|
}
|
|
}
|
|
|
|
(*sp)++;
|
|
if (i < len) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return p_start;
|
|
}
|