Files
RockOS/kernel/lib/strtok.c

65 lines
1.2 KiB
C

#include <lib/string.h>
#include <stddef.h>
static size_t kernel_strspn(const char *s, const char *accept) {
const char *p;
const char *a;
size_t count = 0;
for (p = s; *p != '\0'; ++p) {
for (a = accept; *a != '\0'; ++a) {
if (*p == *a)
break;
}
if (*a == '\0')
return count;
++count;
}
return count;
}
static char *kernel_strpbrk(const char *s, const char *accept) {
while (*s != '\0') {
const char *a = accept;
while (*a != '\0') {
if (*s == *a) {
return (char *)s;
}
a++;
}
s++;
}
return NULL;
}
char *strtok_r(char *str, const char *delim, char **saveptr) {
char *token;
if (str == NULL) {
str = *saveptr;
}
if (str == NULL || *str == '\0') {
*saveptr = NULL;
return NULL;
}
str += kernel_strspn(str, delim);
if (*str == '\0') {
*saveptr = NULL;
return NULL;
}
token = str;
str = kernel_strpbrk(token, delim);
if (str == NULL) {
*saveptr = NULL;
} else {
*str = '\0';
*saveptr = str + 1;
}
return token;
}