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