diff --git a/common/StringUtil.h b/common/StringUtil.h index 48f0a77e3a..a3c1bc717a 100644 --- a/common/StringUtil.h +++ b/common/StringUtil.h @@ -209,17 +209,6 @@ namespace StringUtil std::optional> DecodeHex(const std::string_view& str); std::string EncodeHex(const u8* data, int length); - /// starts_with from C++20 - static inline bool StartsWith(const std::string_view& str, const std::string_view& prefix) - { - return (str.compare(0, prefix.length(), prefix) == 0); - } - static inline bool EndsWith(const std::string_view& str, const std::string_view& suffix) - { - const std::size_t suffix_length = suffix.length(); - return (str.length() >= suffix_length && str.compare(str.length() - suffix_length, suffix_length, suffix) == 0); - } - /// StartsWith/EndsWith variants which aren't case sensitive. static inline bool StartsWithNoCase(const std::string_view& str, const std::string_view& prefix) { diff --git a/pcsx2-qt/QtKeyCodes.cpp b/pcsx2-qt/QtKeyCodes.cpp index d10aa8a938..5745c419bb 100644 --- a/pcsx2-qt/QtKeyCodes.cpp +++ b/pcsx2-qt/QtKeyCodes.cpp @@ -476,7 +476,7 @@ std::optional InputManager::ConvertHostKeyboardStringToCode(const std::stri { std::string_view compare_name = str; u32 modifier_bits = 0; - if (StringUtil::StartsWith(compare_name, "Numpad")) + if (compare_name.starts_with("Numpad")) { compare_name = compare_name.substr(6); modifier_bits |= Qt::KeypadModifier; diff --git a/pcsx2/CDVD/CDVD.cpp b/pcsx2/CDVD/CDVD.cpp index 29ed9b83a5..4d129e6099 100644 --- a/pcsx2/CDVD/CDVD.cpp +++ b/pcsx2/CDVD/CDVD.cpp @@ -429,12 +429,12 @@ static bool cdvdUncheckedLoadDiscElf(ElfObject* elfo, IsoReader& isor, const std bool cdvdLoadElf(ElfObject* elfo, const std::string_view& elfpath, bool isPSXElf, Error* error) { - if (StringUtil::StartsWith(elfpath, "host:")) + if (elfpath.starts_with("host:")) { std::string host_filename(elfpath.substr(5)); return elfo->OpenFile(host_filename, isPSXElf, error); } - else if (StringUtil::StartsWith(elfpath, "cdrom:") || StringUtil::StartsWith(elfpath, "cdrom0:")) + else if (elfpath.starts_with("cdrom:") || elfpath.starts_with("cdrom0:")) { IsoReader isor; if (!isor.Open(error)) @@ -451,7 +451,7 @@ bool cdvdLoadElf(ElfObject* elfo, const std::string_view& elfpath, bool isPSXElf bool cdvdLoadDiscElf(ElfObject* elfo, IsoReader& isor, const std::string_view& elfpath, bool isPSXElf, Error* error) { - if (!StringUtil::StartsWith(elfpath, "cdrom:") && !StringUtil::StartsWith(elfpath, "cdrom0:")) + if (!elfpath.starts_with("cdrom:") && !elfpath.starts_with("cdrom0:")) return false; return cdvdUncheckedLoadDiscElf(elfo, isor, elfpath, isPSXElf, error); diff --git a/pcsx2/DEV9/pcap_io.cpp b/pcsx2/DEV9/pcap_io.cpp index df76595a27..e5af53fc2e 100644 --- a/pcsx2/DEV9/pcap_io.cpp +++ b/pcsx2/DEV9/pcap_io.cpp @@ -225,7 +225,7 @@ std::vector PCAPAdapter::GetAdapters() entry.type = Pcsx2Config::DEV9Options::NetApi::PCAP_Switched; #ifdef _WIN32 //guid - if (!StringUtil::StartsWith(d->name, PCAPPREFIX)) + if (!std::string_view(d->name).ends_with(PCAPPREFIX)) { Console.Error("PCAP: Unexpected Device: ", d->name); d = d->next; diff --git a/pcsx2/GameDatabase.cpp b/pcsx2/GameDatabase.cpp index df0ccb7d1d..b51cf971ef 100644 --- a/pcsx2/GameDatabase.cpp +++ b/pcsx2/GameDatabase.cpp @@ -187,7 +187,7 @@ void GameDatabase::parseAndInsert(const std::string_view& serial, const c4::yml: auto fix = std::string(n.val().str, n.val().len); // Enum values don't end with Hack, but gamedb does, so remove it before comparing. - if (StringUtil::EndsWith(fix, "Hack")) + if (fix.ends_with("Hack")) { fix.erase(fix.size() - 4); for (GamefixId id = GamefixId_FIRST; id < pxEnumEnd; ++id) diff --git a/pcsx2/GameList.cpp b/pcsx2/GameList.cpp index 8afb454697..6340e3c729 100644 --- a/pcsx2/GameList.cpp +++ b/pcsx2/GameList.cpp @@ -231,65 +231,65 @@ GameList::Region GameList::ParseDatabaseRegion(const std::string_view& db_region // clang-format off ////// NTSC ////// ////////////////// - if (StringUtil::StartsWith(db_region, "NTSC-B")) + if (db_region.starts_with("NTSC-B")) return Region::NTSC_B; - else if (StringUtil::StartsWith(db_region, "NTSC-C")) + else if (db_region.starts_with("NTSC-C")) return Region::NTSC_C; - else if (StringUtil::StartsWith(db_region, "NTSC-HK")) + else if (db_region.starts_with("NTSC-HK")) return Region::NTSC_HK; - else if (StringUtil::StartsWith(db_region, "NTSC-J")) + else if (db_region.starts_with("NTSC-J")) return Region::NTSC_J; - else if (StringUtil::StartsWith(db_region, "NTSC-K")) + else if (db_region.starts_with("NTSC-K")) return Region::NTSC_K; - else if (StringUtil::StartsWith(db_region, "NTSC-T")) + else if (db_region.starts_with("NTSC-T")) return Region::NTSC_T; - else if (StringUtil::StartsWith(db_region, "NTSC-U")) + else if (db_region.starts_with("NTSC-U")) return Region::NTSC_U; ////// PAL ////// ////////////////// - else if (StringUtil::StartsWith(db_region, "PAL-AF")) + else if (db_region.starts_with("PAL-AF")) return Region::PAL_AF; - else if (StringUtil::StartsWith(db_region, "PAL-AU")) + else if (db_region.starts_with("PAL-AU")) return Region::PAL_AU; - else if (StringUtil::StartsWith(db_region, "PAL-A")) + else if (db_region.starts_with("PAL-A")) return Region::PAL_A; - else if (StringUtil::StartsWith(db_region, "PAL-BE")) + else if (db_region.starts_with("PAL-BE")) return Region::PAL_BE; - else if (StringUtil::StartsWith(db_region, "PAL-E")) + else if (db_region.starts_with("PAL-E")) return Region::PAL_E; - else if (StringUtil::StartsWith(db_region, "PAL-FI")) + else if (db_region.starts_with("PAL-FI")) return Region::PAL_FI; - else if (StringUtil::StartsWith(db_region, "PAL-F")) + else if (db_region.starts_with("PAL-F")) return Region::PAL_F; - else if (StringUtil::StartsWith(db_region, "PAL-GR")) + else if (db_region.starts_with("PAL-GR")) return Region::PAL_GR; - else if (StringUtil::StartsWith(db_region, "PAL-G")) + else if (db_region.starts_with("PAL-G")) return Region::PAL_G; - else if (StringUtil::StartsWith(db_region, "PAL-IN")) + else if (db_region.starts_with("PAL-IN")) return Region::PAL_IN; - else if (StringUtil::StartsWith(db_region, "PAL-I")) + else if (db_region.starts_with("PAL-I")) return Region::PAL_I; - else if (StringUtil::StartsWith(db_region, "PAL-M")) + else if (db_region.starts_with("PAL-M")) return Region::PAL_M; - else if (StringUtil::StartsWith(db_region, "PAL-NL")) + else if (db_region.starts_with("PAL-NL")) return Region::PAL_NL; - else if (StringUtil::StartsWith(db_region, "PAL-NO")) + else if (db_region.starts_with("PAL-NO")) return Region::PAL_NO; - else if (StringUtil::StartsWith(db_region, "PAL-PL")) + else if (db_region.starts_with("PAL-PL")) return Region::PAL_PL; - else if (StringUtil::StartsWith(db_region, "PAL-P")) + else if (db_region.starts_with("PAL-P")) return Region::PAL_P; - else if (StringUtil::StartsWith(db_region, "PAL-R")) + else if (db_region.starts_with("PAL-R")) return Region::PAL_R; - else if (StringUtil::StartsWith(db_region, "PAL-SC")) + else if (db_region.starts_with("PAL-SC")) return Region::PAL_SC; - else if (StringUtil::StartsWith(db_region, "PAL-SWI")) + else if (db_region.starts_with("PAL-SWI")) return Region::PAL_SWI; - else if (StringUtil::StartsWith(db_region, "PAL-SW")) + else if (db_region.starts_with("PAL-SW")) return Region::PAL_SW; - else if (StringUtil::StartsWith(db_region, "PAL-S")) + else if (db_region.starts_with("PAL-S")) return Region::PAL_S; - else if (StringUtil::StartsWith(db_region, "PAL-UK")) + else if (db_region.starts_with("PAL-UK")) return Region::PAL_UK; else return Region::Other; diff --git a/pcsx2/Input/DInputSource.cpp b/pcsx2/Input/DInputSource.cpp index cd1a4e00dc..e052ec2706 100644 --- a/pcsx2/Input/DInputSource.cpp +++ b/pcsx2/Input/DInputSource.cpp @@ -325,7 +325,7 @@ void DInputSource::UpdateMotorState(InputBindingKey large_key, InputBindingKey s std::optional DInputSource::ParseKeyString(const std::string_view& device, const std::string_view& binding) { - if (!StringUtil::StartsWith(device, "DInput-") || binding.empty()) + if (!device.starts_with("DInput-") || binding.empty()) return std::nullopt; const std::optional player_id = StringUtil::FromChars(device.substr(7)); @@ -336,7 +336,7 @@ std::optional DInputSource::ParseKeyString(const std::string_vi key.source_type = InputSourceType::DInput; key.source_index = static_cast(player_id.value()); - if (StringUtil::StartsWith(binding, "+Axis") || StringUtil::StartsWith(binding, "-Axis")) + if (binding.starts_with("+Axis") || binding.starts_with("-Axis")) { std::string_view end; const std::optional axis_index = StringUtil::FromChars(binding.substr(5), 10, &end); @@ -349,7 +349,7 @@ std::optional DInputSource::ParseKeyString(const std::string_vi key.invert = (end == "~"); return key; } - else if (StringUtil::StartsWith(binding, "FullAxis")) + else if (binding.starts_with("FullAxis")) { std::string_view end; const std::optional axis_index = StringUtil::FromChars(binding.substr(8), 10, &end); @@ -362,7 +362,7 @@ std::optional DInputSource::ParseKeyString(const std::string_vi key.invert = (end == "~"); return key; } - else if (StringUtil::StartsWith(binding, "Hat")) + else if (binding.starts_with("Hat")) { if (binding[3] < '0' || binding[3] > '9' || binding.length() < 5) return std::nullopt; @@ -382,7 +382,7 @@ std::optional DInputSource::ParseKeyString(const std::string_vi // bad direction return std::nullopt; } - else if (StringUtil::StartsWith(binding, "Button")) + else if (binding.starts_with("Button")) { const std::optional button_index = StringUtil::FromChars(binding.substr(6)); if (!button_index.has_value()) diff --git a/pcsx2/Input/InputManager.cpp b/pcsx2/Input/InputManager.cpp index 04cceb4298..7095d81685 100644 --- a/pcsx2/Input/InputManager.cpp +++ b/pcsx2/Input/InputManager.cpp @@ -233,11 +233,11 @@ std::optional InputManager::ParseInputBindingKey(const std::str return std::nullopt; // lameee, string matching - if (StringUtil::StartsWith(source, "Keyboard")) + if (source.starts_with("Keyboard")) { return ParseHostKeyboardKey(source, sub_binding); } - else if (StringUtil::StartsWith(source, "Pointer")) + else if (source.starts_with("Pointer")) { return ParsePointerKey(source, sub_binding); } @@ -411,7 +411,7 @@ void InputManager::PrettifyInputBindingPart(const std::string_view binding, Smal return; // lameee, string matching - if (StringUtil::StartsWith(source, "Keyboard")) + if (source.starts_with("Keyboard")) { std::optional key = ParseHostKeyboardKey(source, sub_binding); const char* icon = key.has_value() ? ConvertHostKeyboardCodeToIcon(key->data) : nullptr; @@ -422,7 +422,7 @@ void InputManager::PrettifyInputBindingPart(const std::string_view binding, Smal return; } } - else if (StringUtil::StartsWith(source, "Pointer")) + else if (source.starts_with("Pointer")) { const std::optional key = ParsePointerKey(source, sub_binding); if (key.has_value()) @@ -633,7 +633,7 @@ std::optional InputManager::ParsePointerKey(const std::string_v key.source_type = InputSourceType::Pointer; key.source_index = static_cast(pointer_index.value()); - if (StringUtil::StartsWith(sub_binding, "Button")) + if (sub_binding.starts_with("Button")) { const std::optional button_number = StringUtil::FromChars(sub_binding.substr(6)); if (!button_number.has_value() || button_number.value() < 0) @@ -646,7 +646,7 @@ std::optional InputManager::ParsePointerKey(const std::string_v for (u32 i = 0; i < s_pointer_axis_names.size(); i++) { - if (StringUtil::StartsWith(sub_binding, s_pointer_axis_names[i])) + if (sub_binding.starts_with(s_pointer_axis_names[i])) { key.source_subtype = InputSubclass::PointerAxis; key.data = i; @@ -678,7 +678,7 @@ std::optional InputManager::ParsePointerKey(const std::string_v std::optional InputManager::GetIndexFromPointerBinding(const std::string_view& source) { - if (!StringUtil::StartsWith(source, "Pointer-")) + if (!source.starts_with("Pointer-")) return std::nullopt; const std::optional pointer_index = StringUtil::FromChars(source.substr(8)); diff --git a/pcsx2/Input/InputSource.cpp b/pcsx2/Input/InputSource.cpp index 786354f776..df2773f40b 100644 --- a/pcsx2/Input/InputSource.cpp +++ b/pcsx2/Input/InputSource.cpp @@ -92,7 +92,7 @@ std::optional InputSource::ParseGenericControllerKey( key.source_type = clazz; key.source_index = source_index.value(); - if (StringUtil::StartsWith(sub_binding, "+Axis") || StringUtil::StartsWith(sub_binding, "-Axis")) + if (sub_binding.starts_with("+Axis") || sub_binding.starts_with("-Axis")) { const std::optional axis_number = StringUtil::FromChars(sub_binding.substr(5)); if (!axis_number.has_value() || axis_number.value() < 0) @@ -108,7 +108,7 @@ std::optional InputSource::ParseGenericControllerKey( else return std::nullopt; } - else if (StringUtil::StartsWith(sub_binding, "FullAxis")) + else if (sub_binding.starts_with("FullAxis")) { const std::optional axis_number = StringUtil::FromChars(sub_binding.substr(8)); if (!axis_number.has_value() || axis_number.value() < 0) @@ -117,7 +117,7 @@ std::optional InputSource::ParseGenericControllerKey( key.data = static_cast(axis_number.value()); key.modifier = InputModifier::FullAxis; } - else if (StringUtil::StartsWith(sub_binding, "Button")) + else if (sub_binding.starts_with("Button")) { const std::optional button_number = StringUtil::FromChars(sub_binding.substr(6)); if (!button_number.has_value() || button_number.value() < 0) diff --git a/pcsx2/Input/SDLInputSource.cpp b/pcsx2/Input/SDLInputSource.cpp index e76cb81681..78a12d9241 100644 --- a/pcsx2/Input/SDLInputSource.cpp +++ b/pcsx2/Input/SDLInputSource.cpp @@ -328,7 +328,7 @@ std::vector> SDLInputSource::EnumerateDevice std::optional SDLInputSource::ParseKeyString(const std::string_view& device, const std::string_view& binding) { - if (!StringUtil::StartsWith(device, "SDL-") || binding.empty()) + if (!device.starts_with("SDL-") || binding.empty()) return std::nullopt; const std::optional player_id = StringUtil::FromChars(device.substr(4)); @@ -339,7 +339,7 @@ std::optional SDLInputSource::ParseKeyString(const std::string_ key.source_type = InputSourceType::SDL; key.source_index = static_cast(player_id.value()); - if (StringUtil::EndsWith(binding, "Motor")) + if (binding.ends_with("Motor")) { key.source_subtype = InputSubclass::ControllerMotor; if (binding == "LargeMotor") @@ -357,7 +357,7 @@ std::optional SDLInputSource::ParseKeyString(const std::string_ return std::nullopt; } } - else if (StringUtil::EndsWith(binding, "Haptic")) + else if (binding.ends_with("Haptic")) { key.source_subtype = InputSubclass::ControllerHaptic; key.data = 0; @@ -368,7 +368,7 @@ std::optional SDLInputSource::ParseKeyString(const std::string_ // likely an axis const std::string_view axis_name(binding.substr(1)); - if (StringUtil::StartsWith(axis_name, "Axis")) + if (axis_name.starts_with("Axis")) { std::string_view end; if (auto value = StringUtil::FromChars(axis_name.substr(4), 10, &end)) @@ -392,7 +392,7 @@ std::optional SDLInputSource::ParseKeyString(const std::string_ } } } - else if (StringUtil::StartsWith(binding, "FullAxis")) + else if (binding.starts_with("FullAxis")) { std::string_view end; if (auto value = StringUtil::FromChars(binding.substr(8), 10, &end)) @@ -404,7 +404,7 @@ std::optional SDLInputSource::ParseKeyString(const std::string_ return key; } } - else if (StringUtil::StartsWith(binding, "Hat")) + else if (binding.starts_with("Hat")) { std::string_view hat_dir; if (auto value = StringUtil::FromChars(binding.substr(3), 10, &hat_dir); value.has_value() && !hat_dir.empty()) @@ -423,7 +423,7 @@ std::optional SDLInputSource::ParseKeyString(const std::string_ else { // must be a button - if (StringUtil::StartsWith(binding, "Button")) + if (binding.starts_with("Button")) { if (auto value = StringUtil::FromChars(binding.substr(6))) { @@ -575,7 +575,7 @@ bool SDLInputSource::ProcessSDLEvent(const SDL_Event* event) SDL_Joystick* SDLInputSource::GetJoystickForDevice(const std::string_view& device) { - if (!StringUtil::StartsWith(device, "SDL-")) + if (!device.starts_with("SDL-")) return nullptr; const std::optional player_id = StringUtil::FromChars(device.substr(4)); @@ -890,7 +890,7 @@ std::vector SDLInputSource::EnumerateMotors() bool SDLInputSource::GetGenericBindingMapping(const std::string_view& device, InputManager::GenericInputBindingMapping* mapping) { - if (!StringUtil::StartsWith(device, "SDL-")) + if (!device.starts_with("SDL-")) return false; const std::optional player_id = StringUtil::FromChars(device.substr(4)); diff --git a/pcsx2/Input/XInputSource.cpp b/pcsx2/Input/XInputSource.cpp index 91cb4c3c80..9e10c95739 100644 --- a/pcsx2/Input/XInputSource.cpp +++ b/pcsx2/Input/XInputSource.cpp @@ -266,7 +266,7 @@ std::vector> XInputSource::EnumerateDevices( std::optional XInputSource::ParseKeyString(const std::string_view& device, const std::string_view& binding) { - if (!StringUtil::StartsWith(device, "XInput-") || binding.empty()) + if (!device.starts_with("XInput-") || binding.empty()) return std::nullopt; const std::optional player_id = StringUtil::FromChars(device.substr(7)); @@ -277,7 +277,7 @@ std::optional XInputSource::ParseKeyString(const std::string_vi key.source_type = InputSourceType::XInput; key.source_index = static_cast(player_id.value()); - if (StringUtil::EndsWith(binding, "Motor")) + if (binding.ends_with("Motor")) { key.source_subtype = InputSubclass::ControllerMotor; if (binding == "LargeMotor") @@ -399,7 +399,7 @@ std::vector XInputSource::EnumerateMotors() bool XInputSource::GetGenericBindingMapping(const std::string_view& device, InputManager::GenericInputBindingMapping* mapping) { - if (!StringUtil::StartsWith(device, "XInput-")) + if (!device.starts_with("XInput-")) return false; const std::optional player_id = StringUtil::FromChars(device.substr(7)); diff --git a/pcsx2/IopBios.cpp b/pcsx2/IopBios.cpp index 688dc619d5..eeb294869e 100644 --- a/pcsx2/IopBios.cpp +++ b/pcsx2/IopBios.cpp @@ -169,7 +169,7 @@ namespace R3000A // For now it just supports relative folders from the location of the elf std::string native_path(Path::Canonicalize(path)); std::string new_path; - if (!hostRoot.empty() && StringUtil::StartsWith(native_path, hostRoot)) + if (!hostRoot.empty() && native_path.starts_with(hostRoot)) new_path = std::move(native_path); else if (!hostRoot.empty()) // relative paths new_path = Path::Combine(hostRoot, native_path); @@ -195,7 +195,7 @@ namespace R3000A { // Only allow descendants of the hostfs directory. if (canonicalized_path.length() <= hostRoot.length() || // Length has to be equal or longer, - !StringUtil::StartsWith(canonicalized_path, hostRoot) || // and start with the host root, + !canonicalized_path.starts_with(hostRoot) || // and start with the host root, canonicalized_path[hostRoot.length()] != FS_OSPATH_SEPARATOR_CHARACTER) // and we can't access a sibling. { Console.Error(fmt::format( diff --git a/pcsx2/SIO/Memcard/MemoryCardFile.cpp b/pcsx2/SIO/Memcard/MemoryCardFile.cpp index 98c2842965..70294e698f 100644 --- a/pcsx2/SIO/Memcard/MemoryCardFile.cpp +++ b/pcsx2/SIO/Memcard/MemoryCardFile.cpp @@ -323,7 +323,7 @@ void FileMemoryCard::Open() FileSystem::SetPathCompression(fname.c_str(), EmuConfig.McdCompressNTFS); #endif - if (StringUtil::EndsWith(fname, ".bin")) + if (fname.ends_with(".bin")) { std::string newname(fname + "x"); if (!ConvertNoECCtoRAW(fname.c_str(), newname.c_str())) @@ -385,7 +385,7 @@ void FileMemoryCard::Close() std::fclose(m_file[slot]); m_file[slot] = nullptr; - if (StringUtil::EndsWith(m_filenames[slot], ".bin")) + if (m_filenames[slot].ends_with(".bin")) { const std::string name_in(m_filenames[slot] + 'x'); if (ConvertRAWtoNoECC(name_in.c_str(), m_filenames[slot].c_str())) @@ -890,8 +890,8 @@ std::vector FileMcd_GetAvailableCards(bool include_in_use_card } // We only want relevant file types. - if (!(StringUtil::EndsWith(fd.FileName, ".ps2") || StringUtil::EndsWith(fd.FileName, ".mcr") || - StringUtil::EndsWith(fd.FileName, ".mcd") || StringUtil::EndsWith(fd.FileName, ".bin"))) + if (!(fd.FileName.ends_with(".ps2") || fd.FileName.ends_with(".mcr") || + fd.FileName.ends_with(".mcd") || fd.FileName.ends_with(".bin"))) continue; if (fd.Attributes & FILESYSTEM_FILE_ATTRIBUTE_DIRECTORY) diff --git a/pcsx2/SIO/Memcard/MemoryCardFolder.cpp b/pcsx2/SIO/Memcard/MemoryCardFolder.cpp index e940dc92d2..8040c38f5b 100644 --- a/pcsx2/SIO/Memcard/MemoryCardFolder.cpp +++ b/pcsx2/SIO/Memcard/MemoryCardFolder.cpp @@ -576,7 +576,7 @@ bool FolderMemoryCard::AddFolder(MemoryCardFileEntry* const dirEntry, const std: bool FolderMemoryCard::AddFile(MemoryCardFileEntry* const dirEntry, const std::string& dirPath, const EnumeratedFileEntry& fileEntry, MemoryCardFileMetadataReference* parent) { const std::string filePath(Path::Combine(dirPath, fileEntry.m_fileName)); - pxAssertMsg(StringUtil::StartsWith(filePath, m_folderName.c_str()), "Full file path starts with MC folder path"); + pxAssertMsg(filePath.starts_with(m_folderName), "Full file path starts with MC folder path"); const std::string relativeFilePath(filePath.substr(m_folderName.length() + 1)); if (auto file = FileSystem::OpenManagedCFile(filePath.c_str(), "rb"); file) @@ -668,7 +668,7 @@ u32 FolderMemoryCard::CalculateRequiredClustersOfDirectory(const std::string& di FileSystem::FindFiles(dirPath.c_str(), "*", FILESYSTEM_FIND_FILES | FILESYSTEM_FIND_FOLDERS | FILESYSTEM_FIND_HIDDEN_FILES | FILESYSTEM_FIND_RELATIVE_PATHS, &files); for (const FILESYSTEM_FIND_DATA& fd : files) { - if (StringUtil::StartsWith(fd.FileName, "_pcsx2_")) + if (fd.FileName.starts_with("_pcsx2_")) continue; ++requiredFileEntryPages; @@ -1803,7 +1803,7 @@ std::vector FolderMemoryCard::GetOrderedF for (FILESYSTEM_FIND_DATA& fd : results) { - if (StringUtil::StartsWith(fd.FileName, "_pcsx2_")) + if (fd.FileName.starts_with("_pcsx2_")) continue; std::string filePath(Path::Combine(dirPath, fd.FileName)); @@ -2176,7 +2176,7 @@ void FileAccessHelper::CloseMatching(const std::string_view& path) { for (auto it = m_files.begin(); it != m_files.end();) { - if (StringUtil::StartsWith(it->second.hostFilePath, path)) + if (it->second.hostFilePath.starts_with(path)) { CloseFileHandle(it->second.fileHandle, it->second.fileRef->entry); it = m_files.erase(it);