still working on a more robust vfs

This commit is contained in:
2026-07-11 10:33:08 -05:00
parent 032a35206a
commit 92748fd258
8 changed files with 381 additions and 318 deletions

View File

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