mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 03:55:24 +00:00
LibC: strtok is now implemented (string.h)
This commit is contained in:
parent
c13be2c7ea
commit
a544fded88
Notes:
sideshowbarker
2024-07-19 11:40:18 +09:00
Author: https://github.com/jonahisadev 🔰 Commit: https://github.com/SerenityOS/serenity/commit/a544fded88d Pull-request: https://github.com/SerenityOS/serenity/pull/669 Reviewed-by: https://github.com/awesomekling Reviewed-by: https://github.com/xTibor
1 changed files with 44 additions and 3 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue