//===-- Implementation of strtok ------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "src/string/strtok.h" #include "src/__support/common.h" #include "utils/CPP/Bitset.h" namespace __llvm_libc { static char *strtok_str = nullptr; char *LLVM_LIBC_ENTRYPOINT(strtok)(char *src, const char *delimiter_string) { cpp::Bitset<256> delimiter_set; for (; *delimiter_string; ++delimiter_string) delimiter_set.set(*delimiter_string); src = src ? src : strtok_str; for (; *src && delimiter_set.test(*src); ++src) ; if (!*src) { strtok_str = src; return nullptr; } char *token = src; for (; *src && !delimiter_set.test(*src); ++src) ; strtok_str = src; if (*strtok_str) { *strtok_str = '\0'; ++strtok_str; } return token; } } // namespace __llvm_libc