From 442dd133bbfb68023b85084196a9307c6848f432 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Thu, 2 Mar 2023 17:45:56 +0000 Subject: [PATCH] FileManager: Migrate to Directory::for_each_entry() --- .../FileManager/PropertiesWindow.cpp | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Userland/Applications/FileManager/PropertiesWindow.cpp b/Userland/Applications/FileManager/PropertiesWindow.cpp index b9a8a73b34..e5d8392155 100644 --- a/Userland/Applications/FileManager/PropertiesWindow.cpp +++ b/Userland/Applications/FileManager/PropertiesWindow.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include @@ -295,20 +295,18 @@ void PropertiesWindow::DirectoryStatisticsCalculator::start() auto timer = Core::ElapsedTimer(); while (!m_work_queue.is_empty()) { auto base_directory = m_work_queue.dequeue(); - Core::DirIterator di(base_directory, Core::DirIterator::SkipParentAndBaseDir); - while (di.has_next()) { + auto result = Core::Directory::for_each_entry(base_directory, Core::DirIterator::SkipParentAndBaseDir, [&](auto const& entry, auto const& directory) -> ErrorOr { if (task.is_cancelled()) - return ECANCELED; + return Error::from_errno(ECANCELED); - auto path = di.next_path(); struct stat st = {}; - if (fstatat(di.fd(), path.characters(), &st, AT_SYMLINK_NOFOLLOW) < 0) { + if (fstatat(directory.fd(), entry.name.characters(), &st, AT_SYMLINK_NOFOLLOW) < 0) { perror("fstatat"); - continue; + return IterationDecision::Continue; } if (S_ISDIR(st.st_mode)) { - auto full_path = LexicalPath::join("/"sv, base_directory, path).string(); + auto full_path = LexicalPath::join(directory.path().string(), entry.name).string(); m_directory_count++; m_work_queue.enqueue(full_path); } else if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) { @@ -321,7 +319,11 @@ void PropertiesWindow::DirectoryStatisticsCalculator::start() timer.start(); on_update(m_total_size_in_bytes, m_file_count, m_directory_count); } - } + + return IterationDecision::Continue; + }); + if (result.is_error() && result.error().code() == ECANCELED) + return ECANCELED; } return ESUCCESS; },