LibC: strtok is now implemented (string.h)

This commit is contained in:
Jonah Alligood 2019-10-15 23:29:22 -05:00 committed by Andreas Kling
parent c13be2c7ea
commit a544fded88
Notes: sideshowbarker 2024-07-19 11:40:18 +09:00

View file

@ -457,9 +457,50 @@ char* strpbrk(const char* s, const char* accept)
char* strtok(char* str, const char* delim)
{
(void)str;
(void)delim;
ASSERT_NOT_REACHED();
static char* saved_str;
if (!str) {
if (!saved_str)
return nullptr;
str = saved_str;
}
size_t token_start = 0;
size_t token_end = 0;
for (size_t i = 0; i < strlen(str); ++i) {
bool is_delim = false;
for (size_t j = 0; j < strlen(delim); ++j) {
if (str[i] == delim[j]) {
is_delim = true;
++token_start;
break;
}
}
if (!is_delim) break;
}
if (strlen(&str[token_start]) == 0)
return nullptr;
for (size_t i = 0; i < strlen(delim); ++i) {
char* delim_ptr = strchr(&str[token_start], delim[i]);
if (!delim_ptr)
continue;
size_t delim_offset = static_cast<size_t>(delim_ptr - str);
if (!token_end || token_end > delim_offset)
token_end = delim_offset;
}
if (token_end == 0) {
saved_str = nullptr;
return &str[token_start];
}
saved_str = &str[token_end + 1];
str[token_end] = '\0';
return &str[token_start];
}
int strcoll(const char* s1, const char* s2)