summaryrefslogtreecommitdiff
path: root/src/resources
diff options
context:
space:
mode:
authorPhilipp Sehmisch <tmw@crushnet.org>2007-02-20 23:45:51 +0000
committerPhilipp Sehmisch <tmw@crushnet.org>2007-02-20 23:45:51 +0000
commit7cb624d0e6a2844360f28fdb8390f866aa3393c7 (patch)
tree1444fa899a8266072472cc1045ffb503bcab5ee1 /src/resources
parent6f4c416887d2a006a13dbd4e54932d46b59b0b17 (diff)
downloadmana-7cb624d0e6a2844360f28fdb8390f866aa3393c7.tar.gz
mana-7cb624d0e6a2844360f28fdb8390f866aa3393c7.tar.bz2
mana-7cb624d0e6a2844360f28fdb8390f866aa3393c7.tar.xz
mana-7cb624d0e6a2844360f28fdb8390f866aa3393c7.zip
Added support for customdata directory.
Diffstat (limited to 'src/resources')
-rw-r--r--src/resources/resourcemanager.cpp27
-rw-r--r--src/resources/resourcemanager.h8
2 files changed, 35 insertions, 0 deletions
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp
index 4ed316cf..37a82b0c 100644
--- a/src/resources/resourcemanager.cpp
+++ b/src/resources/resourcemanager.cpp
@@ -109,6 +109,33 @@ ResourceManager::addToSearchPath(const std::string &path, bool append)
PHYSFS_addToSearchPath(path.c_str(), append ? 1 : 0);
}
+void
+ResourceManager::searchAndAddArchives(const std::string &path,
+ const std::string &ext,
+ bool append)
+{
+ const char *dirSep = PHYSFS_getDirSeparator();
+ char **list = PHYSFS_enumerateFiles(path.c_str());
+
+ for (char **i = list; *i != NULL; i++)
+ {
+ size_t len = strlen(*i);
+
+ if (len > ext.length() && !ext.compare((*i)+(len - ext.length())))
+ {
+ std::string file, realPath, archive;
+
+ file = path + (*i);
+ realPath = std::string(PHYSFS_getRealDir(file.c_str()));
+ archive = realPath + dirSep + file;
+
+ addToSearchPath(archive, append);
+ }
+ }
+
+ PHYSFS_freeList(list);
+}
+
bool
ResourceManager::mkdir(const std::string &path)
{
diff --git a/src/resources/resourcemanager.h b/src/resources/resourcemanager.h
index d458f96e..e176e337 100644
--- a/src/resources/resourcemanager.h
+++ b/src/resources/resourcemanager.h
@@ -83,6 +83,14 @@ class ResourceManager
addToSearchPath(const std::string &path, bool append);
/**
+ * Searches for zip files and adds them to the search path.
+ */
+ void
+ searchAndAddArchives(const std::string &path,
+ const std::string &ext,
+ bool append);
+
+ /**
* Creates a directory in the write path
*/
bool