| 171 | } |
| 172 | |
| 173 | std::unique_ptr<fs::dir_base> iso_dev::open_dir(const std::string& path) |
| 174 | { |
| 175 | auto optEntry = open_entry(path); |
| 176 | if (!optEntry) |
| 177 | { |
| 178 | fs::g_tls_error = fs::error::noent; |
| 179 | return {}; |
| 180 | } |
| 181 | |
| 182 | if ((optEntry->flags & iso::DirEntryFlags::Directory) != iso::DirEntryFlags::Directory) |
| 183 | { |
| 184 | fs::g_tls_error = fs::error::exist; |
| 185 | return {}; |
| 186 | } |
| 187 | |
| 188 | auto items = read_dir(*optEntry); |
| 189 | std::vector<fs::dir_entry> result_items(items.first.size()); |
| 190 | |
| 191 | for (std::size_t i = 0; i < result_items.size(); ++i) |
| 192 | { |
| 193 | result_items[i] = items.first[i].to_fs_entry(items.second[i]); |
| 194 | } |
| 195 | |
| 196 | return std::make_unique<fs::virtual_dir>(std::move(result_items)); |
| 197 | } |
| 198 | |
| 199 | std::optional<iso::DirEntry> |
| 200 | iso_dev::open_entry(std::string_view path) |
no test coverage detected