| 490 | } |
| 491 | |
| 492 | Status GetChildren(const std::string& directory_path, |
| 493 | std::vector<std::string>* result) override { |
| 494 | const std::string find_pattern = directory_path + "\\*"; |
| 495 | WIN32_FIND_DATAW find_data; |
| 496 | auto wFind_pattern = toUtf16(find_pattern); |
| 497 | HANDLE dir_handle = ::FindFirstFileW(wFind_pattern.c_str(), &find_data); |
| 498 | if (dir_handle == INVALID_HANDLE_VALUE) { |
| 499 | DWORD last_error = ::GetLastError(); |
| 500 | if (last_error == ERROR_FILE_NOT_FOUND) { |
| 501 | return Status::OK(); |
| 502 | } |
| 503 | return WindowsError(directory_path, last_error); |
| 504 | } |
| 505 | do { |
| 506 | char base_name[_MAX_FNAME]; |
| 507 | char ext[_MAX_EXT]; |
| 508 | |
| 509 | auto find_data_filename = toUtf8(find_data.cFileName); |
| 510 | if (!_splitpath_s(find_data_filename.c_str(), nullptr, 0, nullptr, 0, |
| 511 | base_name, ARRAYSIZE(base_name), ext, ARRAYSIZE(ext))) { |
| 512 | result->emplace_back(std::string(base_name) + ext); |
| 513 | } |
| 514 | } while (::FindNextFileW(dir_handle, &find_data)); |
| 515 | DWORD last_error = ::GetLastError(); |
| 516 | ::FindClose(dir_handle); |
| 517 | if (last_error != ERROR_NO_MORE_FILES) { |
| 518 | return WindowsError(directory_path, last_error); |
| 519 | } |
| 520 | return Status::OK(); |
| 521 | } |
| 522 | |
| 523 | Status DeleteFile(const std::string& filename) override { |
| 524 | auto wFilename = toUtf16(filename); |
nothing calls this directly
no test coverage detected