Files
RockOS/kernel/lib/strtok.c
2026-07-10 07:46:46 -05:00

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;
}