refining vfs
This commit is contained in:
@@ -15,7 +15,7 @@ void memcpy(const void* src, void* dst, size_t sz) {
|
||||
}
|
||||
}
|
||||
|
||||
void memset(const uint8_t* dst, uint8_t val, size_t sz) {
|
||||
void memset(uint8_t* dst, uint8_t val, size_t sz) {
|
||||
for (size_t i = 0; i < sz; i++) {
|
||||
((uint8_t*)dst)[i] = val;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include <stddef.h>
|
||||
|
||||
void memcpy(const void* src, void* dst, size_t sz);
|
||||
void memset(const uint8_t* dst, uint8_t val, size_t sz);
|
||||
void memset(uint8_t* dst, uint8_t val, size_t sz);
|
||||
|
||||
int strcmp(const char *s1, const char *s2);
|
||||
int strncmp(const char *s1, const char *s2, size_t n);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef KSTRING_H
|
||||
#define KSTRING_H
|
||||
|
||||
char* strtok_r(char* str, const char* delim, char** saveptr);
|
||||
char* strtok_r(char *s, const char *delim, char **saveptr);
|
||||
|
||||
#endif
|
||||
@@ -2,48 +2,63 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
static int is_delim(char c, const char* delim) {
|
||||
while (*delim) {
|
||||
if (c == *delim) {
|
||||
return 1;
|
||||
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++;
|
||||
}
|
||||
delim++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char* strtok_r(char* str, const char* delim, char** saveptr) {
|
||||
if (saveptr == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char* next_token = (str != NULL) ? str : *saveptr;
|
||||
|
||||
if (next_token == NULL || *next_token == '\0') {
|
||||
*saveptr = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (*next_token && is_delim(*next_token, delim)) {
|
||||
next_token++;
|
||||
}
|
||||
|
||||
if (*next_token == '\0') {
|
||||
*saveptr = next_token;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char* token_start = next_token;
|
||||
|
||||
while (*next_token) {
|
||||
if (is_delim(*next_token, delim)) {
|
||||
*next_token = '\0'; // Destructively null-terminate the token
|
||||
*saveptr = next_token + 1; // Save the position right after the null-terminator
|
||||
return token_start;
|
||||
if (!is_delim) {
|
||||
break;
|
||||
}
|
||||
next_token++;
|
||||
s++;
|
||||
}
|
||||
|
||||
*saveptr = next_token;
|
||||
return token_start;
|
||||
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