64 lines
1.1 KiB
C
64 lines
1.1 KiB
C
#include <lib/string.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
char* strtok_r(char *s, const char *delim, char **saveptr) {
|
|
char *token;
|
|
|
|
if (!saveptr) {
|
|
return NULL;
|
|
}
|
|
|
|
if (!s) {
|
|
s = *saveptr;
|
|
}
|
|
|
|
if (!s || *s == '\0') {
|
|
*saveptr = s;
|
|
return NULL;
|
|
}
|
|
|
|
while (*s != '\0') {
|
|
const char *d = delim;
|
|
int is_delim = 0;
|
|
while (*d != '\0') {
|
|
if (*s == *d) {
|
|
is_delim = 1;
|
|
break;
|
|
}
|
|
d++;
|
|
}
|
|
if (!is_delim) {
|
|
break;
|
|
}
|
|
s++;
|
|
}
|
|
|
|
if (*s == '\0') {
|
|
*saveptr = s;
|
|
return NULL;
|
|
}
|
|
|
|
token = s;
|
|
|
|
while (*s != '\0') {
|
|
const char *d = delim;
|
|
int is_delim = 0;
|
|
while (*d != '\0') {
|
|
if (*s == *d) {
|
|
is_delim = 1;
|
|
break;
|
|
}
|
|
d++;
|
|
}
|
|
if (is_delim) {
|
|
*s = '\0';
|
|
*saveptr = s + 1;
|
|
return token;
|
|
}
|
|
s++;
|
|
}
|
|
|
|
*saveptr = s;
|
|
return token;
|
|
} |