summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Src/FileUtil.cpp
diff options
context:
space:
mode:
authorbushing <bushing@gmail.com>2008-12-29 02:11:56 +0000
committerbushing <bushing@gmail.com>2008-12-29 02:11:56 +0000
commit20e14bebc4a2b465c0808f4dd4b8993e84259430 (patch)
tree880543332d56b5a38546915898b85f2c8db663af /Source/Core/Common/Src/FileUtil.cpp
parent5f1f968e215ebe4b64513ffbcdbf8b2de9d4eed0 (diff)
implement ScanDirectoryTree for POSIX
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1710 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/Common/Src/FileUtil.cpp')
-rw-r--r--Source/Core/Common/Src/FileUtil.cpp31
1 files changed, 28 insertions, 3 deletions
diff --git a/Source/Core/Common/Src/FileUtil.cpp b/Source/Core/Common/Src/FileUtil.cpp
index 65c57b1305..3ce28b1eb7 100644
--- a/Source/Core/Common/Src/FileUtil.cpp
+++ b/Source/Core/Common/Src/FileUtil.cpp
@@ -403,9 +403,34 @@ u32 ScanDirectoryTree(const std::string& _Directory, FSTEntry& parentEntry)
#else
u32 ScanDirectoryTree(const std::string& _Directory, FSTEntry& parentEntry)
{
- PanicAlert("Scan directory not implemanted yet\n");
- // TODO - Insert linux stuff here
- return 0;
+ u32 foundEntries = 0;
+
+ struct dirent dirent, *result = NULL;
+
+ // Find the first file in the directory.
+ DIR *dirp = opendir(_Directory.c_str());
+
+ while (!readdir_r(dirp, &dirent, &result) && result) {
+ FSTEntry entry;
+ if (result->d_name[0]=='.') continue;
+ entry.virtualName = result->d_name;
+ entry.physicalName = _Directory + "/" + entry.virtualName;
+ if (IsDirectory(entry.physicalName.c_str())) {
+ entry.isDirectory = true;
+ entry.size = ScanDirectoryTree(entry.physicalName, entry);
+ foundEntries += entry.size;
+ } else {
+ entry.isDirectory = false;
+ entry.size = GetSize(entry.physicalName.c_str());
+ }
+
+ ++foundEntries;
+
+ parentEntry.children.push_back(entry);
+ }
+ closedir(dirp);
+
+ return foundEntries;
}
#endif