summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Src/FileSearch.cpp
diff options
context:
space:
mode:
authorfires.gc <fires.gc@gmail.com>2008-10-31 22:31:24 +0000
committerfires.gc <fires.gc@gmail.com>2008-10-31 22:31:24 +0000
commit2d2a91b532f13a65a2fa6a59684f89737fb5f1f0 (patch)
treef95460a3ba2aac9802ba044740e875ff2f5e6321 /Source/Core/Common/Src/FileSearch.cpp
parentc3dc7ec4812df83d071287c66906bdaff3700c3e (diff)
added support for IPC file system. i am sure it will break linux and osx builds and prolly we have to talk how we can do our file handling at all. perhaps we have to define an interface for file accesses.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1028 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/Common/Src/FileSearch.cpp')
-rw-r--r--Source/Core/Common/Src/FileSearch.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/Source/Core/Common/Src/FileSearch.cpp b/Source/Core/Common/Src/FileSearch.cpp
new file mode 100644
index 0000000000..6ada69d79b
--- /dev/null
+++ b/Source/Core/Common/Src/FileSearch.cpp
@@ -0,0 +1,117 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#include "Common.h"
+#ifndef _WIN32
+#include <sys/types.h>
+#include <dirent.h>
+#else
+#include <windows.h>
+#endif
+
+#include <string>
+
+#include "FileSearch.h"
+
+#include "StringUtil.h"
+
+
+CFileSearch::CFileSearch(const CFileSearch::XStringVector& _rSearchStrings, const CFileSearch::XStringVector& _rDirectories)
+{
+ // Reverse the loop order for speed?
+ for (size_t j = 0; j < _rSearchStrings.size(); j++)
+ {
+ for (size_t i = 0; i < _rDirectories.size(); i++)
+ {
+ FindFiles(_rSearchStrings[j], _rDirectories[i]);
+ }
+ }
+}
+
+
+void CFileSearch::FindFiles(const std::string& _searchString, const std::string& _strPath)
+{
+ std::string GCMSearchPath;
+ BuildCompleteFilename(GCMSearchPath, _strPath, _searchString);
+#ifdef _WIN32
+ WIN32_FIND_DATA findData;
+ HANDLE FindFirst = FindFirstFile(GCMSearchPath.c_str(), &findData);
+
+ if (FindFirst != INVALID_HANDLE_VALUE)
+ {
+ bool bkeepLooping = true;
+
+ while (bkeepLooping)
+ {
+ std::string strFilename;
+ BuildCompleteFilename(strFilename, _strPath, findData.cFileName);
+
+ m_FileNames.push_back(strFilename);
+
+ bkeepLooping = FindNextFile(FindFirst, &findData) ? true : false;
+ }
+ }
+ FindClose(FindFirst);
+
+
+#else
+ size_t dot_pos = _searchString.rfind(".");
+
+ if (dot_pos == std::string::npos)
+ {
+ return;
+ }
+
+ std::string ext = _searchString.substr(dot_pos);
+ DIR* dir = opendir(_strPath.c_str());
+
+ if (!dir)
+ {
+ return;
+ }
+
+ dirent* dp;
+
+ while (true)
+ {
+ dp = readdir(dir);
+
+ if (!dp)
+ {
+ break;
+ }
+
+ std::string s(dp->d_name);
+
+ if ( (s.size() > ext.size()) && (!strcasecmp(s.substr(s.size() - ext.size()).c_str(), ext.c_str())) )
+ {
+ std::string full_name = _strPath + "/" + s;
+ m_FileNames.push_back(full_name);
+ }
+ }
+
+ closedir(dir);
+#endif
+}
+
+
+const CFileSearch::XStringVector& CFileSearch::GetFileNames() const
+{
+ return(m_FileNames);
+}
+
+