summaryrefslogtreecommitdiff
path: root/src/envfs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/envfs.cpp')
-rw-r--r--src/envfs.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/envfs.cpp b/src/envfs.cpp
index 5cd36957..a67faf84 100644
--- a/src/envfs.cpp
+++ b/src/envfs.cpp
@@ -212,15 +212,6 @@ void setHandleCloserThreadCount(std::size_t n)
g_handleClosers.setMax(n);
}
-void shrinkFs()
-{
- g_handleClosers.join();
-
- g_handleClosers.forEach([](auto&& t) {
- t.shrink();
- });
-}
-
void forEachEntryImpl(
void* cx, HandleCloserThread& hc, std::vector<std::unique_ptr<unsigned char[]>>& buffers,
POBJECT_ATTRIBUTES poa, std::size_t depth,
@@ -328,14 +319,13 @@ void forEachEntryImpl(
}
}
-void forEachEntry(
+
+void DirectoryWalker::forEachEntry(
const std::wstring& path, void* cx,
DirStartF* dirStartF, DirEndF* dirEndF, FileF* fileF)
{
auto& hc = g_handleClosers.request();
- std::vector<std::unique_ptr<unsigned char[]>> buffers;
-
if (!NtOpenFile) {
LibraryPtr m(::LoadLibraryW(L"ntdll.dll"));
NtOpenFile = (NtOpenFile_type)::GetProcAddress(m.get(), "NtOpenFile");
@@ -354,10 +344,18 @@ void forEachEntry(
oa.Length = sizeof(oa);
oa.ObjectName = &ObjectName;
- forEachEntryImpl(cx, hc, buffers, &oa, 0, dirStartF, dirEndF, fileF);
+ forEachEntryImpl(cx, hc, m_buffers, &oa, 0, dirStartF, dirEndF, fileF);
hc.wakeup();
}
+
+void forEachEntry(
+ const std::wstring& path, void* cx,
+ DirStartF* dirStartF, DirEndF* dirEndF, FileF* fileF)
+{
+ DirectoryWalker().forEachEntry(path, cx, dirStartF, dirEndF, fileF);
+}
+
Directory getFilesAndDirs(const std::wstring& path)
{
struct Context