diff --git a/src/filesystem.cc b/src/filesystem.cc index be32b081..541bdfcb 100644 --- a/src/filesystem.cc +++ b/src/filesystem.cc @@ -13,21 +13,25 @@ static void GetFilesInFolderHelper( std::queue> q; q.emplace(fs::path(folder), fs::path(output_prefix)); while (!q.empty()) { - for (auto it = fs::directory_iterator(q.front().first); it != fs::directory_iterator(); ++it) { - auto path = it->path(); - std::string filename = path.filename(); - if (filename[0] != '.' || filename == ".ccls") { - fs::file_status status = it->symlink_status(); - if (fs::is_regular_file(status)) - handler(q.front().second / filename); - else if (fs::is_directory(status) || fs::is_symlink(status)) { - if (recursive) { - std::string child_dir = q.front().second / filename; - if (fs::is_directory(status)) - q.push(make_pair(path, child_dir)); + try { + for (auto it = fs::directory_iterator(q.front().first); + it != fs::directory_iterator(); ++it) { + auto path = it->path(); + std::string filename = path.filename(); + if (filename[0] != '.' || filename == ".ccls") { + fs::file_status status = it->symlink_status(); + if (fs::is_regular_file(status)) + handler(q.front().second / filename); + else if (fs::is_directory(status) || fs::is_symlink(status)) { + if (recursive) { + std::string child_dir = q.front().second / filename; + if (fs::is_directory(status)) + q.push(make_pair(path, child_dir)); + } } } } + } catch (fs::filesystem_error&) { } q.pop(); }