diff --git a/repertory/librepertory/src/utils/file_utils.cpp b/repertory/librepertory/src/utils/file_utils.cpp index 379d2ff8..b7eaa161 100644 --- a/repertory/librepertory/src/utils/file_utils.cpp +++ b/repertory/librepertory/src/utils/file_utils.cpp @@ -45,11 +45,14 @@ auto get_directory_files(std::string_view path, bool oldest_first, auto full_path = utils::path::combine(abs_path, {fd.cFileName}); if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { - if (recursive) { - auto sub_files = - get_directory_files(full_path, oldest_first, recursive); - ret.insert(ret.end(), sub_files.begin(), sub_files.end()); + std::string name{fd.cFileName}; + if (name == "." || name == ".." || not recursive) { + continue; } + + auto sub_files = + get_directory_files(full_path, oldest_first, recursive); + ret.insert(ret.end(), sub_files.begin(), sub_files.end()); } else { ULARGE_INTEGER li{}; li.HighPart = fd.ftLastWriteTime.dwHighDateTime; @@ -75,14 +78,16 @@ auto get_directory_files(std::string_view path, bool oldest_first, struct dirent *de{}; while ((de = readdir(root)) != nullptr) { if (de->d_type == DT_DIR) { - if (recursive) { - auto sub_files = get_directory_files( - utils::path::combine(abs_path, {de->d_name}), oldest_first, - recursive); - ret.insert(ret.end(), sub_files.begin(), sub_files.end()); + std::string name{de->d_name}; + if (name == "." || name == ".." || not recursive) { + continue; } + + auto sub_files = get_directory_files( + utils::path::combine(abs_path, {name}), oldest_first, recursive); + ret.insert(ret.end(), sub_files.begin(), sub_files.end()); } else { - ret.emplace_back(utils::path::combine(abs_path, {de->d_name})); + ret.emplace_back(utils::path::combine(abs_path, {name})); } } } catch (const std::exception &e) {