still working on a more robust vfs
This commit is contained in:
@@ -2,63 +2,64 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
char* strtok_r(char *s, const char *delim, char **saveptr) {
|
||||
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 (!saveptr) {
|
||||
if (str == NULL) {
|
||||
str = *saveptr;
|
||||
}
|
||||
|
||||
if (str == NULL || *str == '\0') {
|
||||
*saveptr = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!s) {
|
||||
s = *saveptr;
|
||||
}
|
||||
|
||||
if (!s || *s == '\0') {
|
||||
*saveptr = s;
|
||||
str += kernel_strspn(str, delim);
|
||||
if (*str == '\0') {
|
||||
*saveptr = NULL;
|
||||
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++;
|
||||
token = str;
|
||||
str = kernel_strpbrk(token, delim);
|
||||
|
||||
if (str == NULL) {
|
||||
*saveptr = NULL;
|
||||
} else {
|
||||
*str = '\0';
|
||||
*saveptr = str + 1;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user