| 703 | } |
| 704 | |
| 705 | DirectoryEntry* DirectoryEntry::getSubDirectory(std::wstring_view name, bool create, |
| 706 | DirectoryStats& stats, int originID) |
| 707 | { |
| 708 | std::wstring nameLc = ToLowerCopy(name); |
| 709 | |
| 710 | std::scoped_lock lock(m_SubDirMutex); |
| 711 | |
| 712 | SubDirectoriesLookup::iterator itor; |
| 713 | elapsed(stats.subdirLookupTimes, [&] { |
| 714 | itor = m_SubDirectoriesLookup.find(nameLc); |
| 715 | }); |
| 716 | |
| 717 | if (itor != m_SubDirectoriesLookup.end()) { |
| 718 | ++stats.subdirExists; |
| 719 | return itor->second; |
| 720 | } |
| 721 | |
| 722 | if (create) { |
| 723 | ++stats.subdirCreate; |
| 724 | |
| 725 | auto* entry = new DirectoryEntry(std::wstring(name.begin(), name.end()), this, |
| 726 | originID, m_FileRegister, m_OriginConnection); |
| 727 | |
| 728 | elapsed(stats.addDirectoryTimes, [&] { |
| 729 | addDirectoryToList(entry, std::move(nameLc)); |
| 730 | // nameLc is moved from this point |
| 731 | }); |
| 732 | |
| 733 | return entry; |
| 734 | } else { |
| 735 | return nullptr; |
| 736 | } |
| 737 | } |
| 738 | |
| 739 | DirectoryEntry* DirectoryEntry::getSubDirectory(env::Directory& dir, bool create, |
| 740 | DirectoryStats& stats, int originID) |
no test coverage detected