From 7a058180bbfd2d9080a8587b8640f5fbd02d78aa Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 12 Aug 2018 19:27:26 -0700 Subject: [PATCH] Io: Prevent cur/parent dir in listing of root. See #9344. Matches tests. --- Core/FileSystems/DirectoryFileSystem.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Core/FileSystems/DirectoryFileSystem.cpp b/Core/FileSystems/DirectoryFileSystem.cpp index 71e91d06d8..2b8a18f1bb 100644 --- a/Core/FileSystems/DirectoryFileSystem.cpp +++ b/Core/FileSystems/DirectoryFileSystem.cpp @@ -825,6 +825,8 @@ static std::string SimulateVFATBug(std::string filename) { std::vector DirectoryFileSystem::GetDirListing(std::string path) { std::vector myVector; + bool listingRoot = path == "/" || path == "\\"; + #ifdef _WIN32 WIN32_FIND_DATA findData; HANDLE hFind; @@ -849,7 +851,7 @@ std::vector DirectoryFileSystem::GetDirListing(std::string path) { entry.access = entry.type == FILETYPE_NORMAL ? 0666 : 0777; // TODO: is this just for .. or all subdirectories? Need to add a directory to the test // to find out. Also why so different than the old test results? - if (!wcscmp(findData.cFileName, L"..") ) + if (!wcscmp(findData.cFileName, L"..")) entry.size = 4096; else entry.size = findData.nFileSizeLow | ((u64)findData.nFileSizeHigh<<32); @@ -857,7 +859,8 @@ std::vector DirectoryFileSystem::GetDirListing(std::string path) { tmFromFiletime(entry.atime, findData.ftLastAccessTime); tmFromFiletime(entry.ctime, findData.ftCreationTime); tmFromFiletime(entry.mtime, findData.ftLastWriteTime); - myVector.push_back(entry); + if (!listingRoot || (wcscmp(findData.cFileName, L"..") && wcscmp(findData.cFileName, L"."))) + myVector.push_back(entry); int retval = FindNextFile(hFind, &findData); if (!retval) @@ -897,7 +900,8 @@ std::vector DirectoryFileSystem::GetDirListing(std::string path) { localtime_r((time_t*)&s.st_atime,&entry.atime); localtime_r((time_t*)&s.st_ctime,&entry.ctime); localtime_r((time_t*)&s.st_mtime,&entry.mtime); - myVector.push_back(entry); + if (!listingRoot || (wcscmp(findData.cFileName, L"..") && wcscmp(findData.cFileName, L"."))) + myVector.push_back(entry); } closedir(dp); #endif