diff --git a/userspace/libraries/LibC/include/string.h b/userspace/libraries/LibC/include/string.h index 3a6575f1..75bef719 100644 --- a/userspace/libraries/LibC/include/string.h +++ b/userspace/libraries/LibC/include/string.h @@ -42,6 +42,7 @@ char* strndup(const char* s, size_t n); size_t strnlen(const char* s, size_t maxlen); char* strpbrk(const char* s1, const char* s2); char* strrchr(const char* s, int c); +char* strsep(char** __restrict stringp, const char* __restrict delim); char* strsignal(int signum); size_t strspn(const char* s1, const char* s2); char* strstr(const char* s1, const char* s2); diff --git a/userspace/libraries/LibC/string.cpp b/userspace/libraries/LibC/string.cpp index 96d0acd8..3479d946 100644 --- a/userspace/libraries/LibC/string.cpp +++ b/userspace/libraries/LibC/string.cpp @@ -274,6 +274,25 @@ char* strrchr(const char* str, int c) return (*str == c) ? (char*)str : nullptr; } +char* strsep(char** __restrict stringp, const char* __restrict delim) +{ + if (*stringp == nullptr) + return nullptr; + + char* original = *stringp; + + char* match = strpbrk(*stringp, delim); + if (match == nullptr) + *stringp = nullptr; + else + { + *stringp = match + 1; + *match = '\0'; + } + + return original; +} + char* strstr(const char* haystack, const char* needle) { const size_t needle_len = strlen(needle);