GitOrigin-RevId: 1747b786d930cd2150a9d5eacd75908e3f37a45b
This commit is contained in:
Arseny Smirnov 2019-05-02 06:43:33 +02:00
parent 83f99f6193
commit 7831955779
2 changed files with 13 additions and 12 deletions

View File

@ -549,15 +549,6 @@ Result<std::pair<FileFd, string>> mkstemp(CSlice dir) {
static Result<bool> walk_path_dir(const std::wstring &dir_name,
const std::function<WalkPath::Action(CSlice name, WalkPath::Type type)> &func) {
std::wstring name = dir_name + L"\\*";
switch (func(entry_name, WalkPath::Type::EnterDir)) {
case WalkPath::Action::Abort:
return false;
case WalkPath::Action::SkipDir:
return true;
case WalkPath::Action::Continue:
break;
}
WIN32_FIND_DATA file_data;
auto handle = FindFirstFileExW(name.c_str(), FindExInfoStandard, &file_data, FindExSearchNameMatch, nullptr, 0);
if (handle == INVALID_HANDLE_VALUE) {
@ -567,6 +558,17 @@ static Result<bool> walk_path_dir(const std::wstring &dir_name,
SCOPE_EXIT {
FindClose(handle);
};
TRY_RESULT(dir_entry_name, from_wstring(dir_name));
switch (func(dir_entry_name, WalkPath::Type::EnterDir)) {
case WalkPath::Action::Abort:
return false;
case WalkPath::Action::SkipDir:
return true;
case WalkPath::Action::Continue:
break;
}
while (true) {
auto full_name = dir_name + L"\\" + file_data.cFileName;
TRY_RESULT(entry_name, from_wstring(full_name));
@ -595,8 +597,7 @@ static Result<bool> walk_path_dir(const std::wstring &dir_name,
return OS_ERROR("FindNextFileW");
}
}
TRY_RESULT(entry_name, from_wstring(dir_name));
switch (func(entry_name, WalkPath::Type::ExitDir)) {
switch (func(dir_entry_name, WalkPath::Type::ExitDir)) {
case WalkPath::Action::Abort:
return false;
case WalkPath::Action::SkipDir:

View File

@ -46,7 +46,7 @@ TEST(Port, files) {
bool was_abort = false;
walk_path(main_dir, [&](CSlice name, WalkPath::Type type) {
CHECK(!was_abort);
if (type == WalkPath::Type::EnterDir && ends_with(name, PSLICE() << "/B")) {
if (type == WalkPath::Type::EnterDir && ends_with(name, PSLICE() << TD_DIR_SLASH << "B")) {
was_abort = true;
return WalkPath::Action::Abort;
}