From af8edd3f2f53cb2ece9a7b1f6a62bd5e7ce57a9a Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 1 Mar 2017 00:09:28 +0300 Subject: Impliment some functions in VirtFs with physfs disabled. --- src/Makefile.am | 4 ++-- src/fs/virtfs.cpp | 13 ++++++++++++- src/fs/virtfsdir.cpp | 10 ++++++++-- src/fs/virtfsdir.h | 4 +++- src/fs/virtfszip.cpp | 9 ++++++++- src/fs/virtfszip.h | 4 +++- 6 files changed, 36 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 71d5c3c87..31d78afe7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -582,8 +582,6 @@ BASE_SRC += events/actionevent.h \ utils/stringvector.h \ utils/timer.cpp \ utils/timer.h \ - fs/virtdirentry.cpp \ - fs/virtdirentry.h \ fs/virtfile.cpp \ fs/virtfile.h \ fs/virtfileprivate.cpp \ @@ -834,6 +832,8 @@ BASE_SRC += \ fs/virtfsphys.h else BASE_SRC += \ + fs/virtdirentry.cpp \ + fs/virtdirentry.h \ fs/virtfsdir.cpp \ fs/virtfsdir.h \ fs/virtfszip.cpp \ diff --git a/src/fs/virtfs.cpp b/src/fs/virtfs.cpp index 3ba214dc7..69f379a08 100644 --- a/src/fs/virtfs.cpp +++ b/src/fs/virtfs.cpp @@ -87,12 +87,23 @@ namespace VirtFs bool exists(const std::string &restrict name) { +#ifdef USE_PHYSFS return VirtFsPhys::exists(name); +#else // USE_PHYSFS + return VirtFsDir::exists(name) || VirtFsZip::exists(name); +#endif // USE_PHYSFS } - VirtList *enumerateFiles(const std::string &restrict dir) + VirtList *enumerateFiles(const std::string &restrict dirName) { +#ifdef USE_PHYSFS return VirtFsPhys::enumerateFiles(dir); +#else // USE_PHYSFS + VirtList *const list = new VirtList; + VirtFsDir::enumerateFiles(dirName, list); + VirtFsZip::enumerateFiles(dirName, list); + return list; +#endif // USE_PHYSFS } bool isDirectory(const std::string &restrict name) diff --git a/src/fs/virtfsdir.cpp b/src/fs/virtfsdir.cpp index 6673072aa..cb512f2ca 100644 --- a/src/fs/virtfsdir.cpp +++ b/src/fs/virtfsdir.cpp @@ -338,10 +338,16 @@ namespace VirtFsDir return false; } - VirtList *enumerateFiles(std::string dirName) + VirtList *enumerateFiles(const std::string &dirName) { - prepareFsPath(dirName); VirtList *const list = new VirtList; + return enumerateFiles(dirName, list); + } + + VirtList *enumerateFiles(std::string dirName, + VirtList *const list) + { + prepareFsPath(dirName); if (checkPath(dirName) == false) { reportAlways("VirtFsDir::enumerateFiles invalid path: %s", diff --git a/src/fs/virtfsdir.h b/src/fs/virtfsdir.h index 8ea825d82..0ec2f466d 100644 --- a/src/fs/virtfsdir.h +++ b/src/fs/virtfsdir.h @@ -52,7 +52,9 @@ namespace VirtFsDir void deinit(); std::vector &getEntries(); bool exists(std::string name); - VirtList *enumerateFiles(std::string dir) RETURNS_NONNULL; + VirtList *enumerateFiles(const std::string &dirName) RETURNS_NONNULL; + VirtList *enumerateFiles(std::string dirName, + VirtList *const list) RETURNS_NONNULL; bool isDirectory(std::string dirName); bool isSymbolicLink(std::string name); void freeList(VirtList *restrict const handle); diff --git a/src/fs/virtfszip.cpp b/src/fs/virtfszip.cpp index dc8223b6f..538eb7513 100644 --- a/src/fs/virtfszip.cpp +++ b/src/fs/virtfszip.cpp @@ -261,7 +261,14 @@ namespace VirtFsZip return false; } - VirtList *enumerateFiles(std::string dirName) + VirtList *enumerateFiles(const std::string &dirName) + { + VirtList *const list = new VirtList; + return enumerateFiles(dirName, list); + } + + VirtList *enumerateFiles(std::string dirName, + VirtList *const list) { prepareFsPath(dirName); VirtList *const list = new VirtList; diff --git a/src/fs/virtfszip.h b/src/fs/virtfszip.h index d66ce7ee8..fd7a0568b 100644 --- a/src/fs/virtfszip.h +++ b/src/fs/virtfszip.h @@ -50,7 +50,9 @@ namespace VirtFsZip void deinit(); std::vector &getEntries(); bool exists(std::string name); - VirtList *enumerateFiles(std::string dir) RETURNS_NONNULL; + VirtList *enumerateFiles(const std::string &dirName) RETURNS_NONNULL; + VirtList *enumerateFiles(std::string dirName, + VirtList *const list) RETURNS_NONNULL; bool isDirectory(std::string dirName); bool isSymbolicLink(std::string name); void freeList(VirtList *restrict const handle); -- cgit v1.2.3-70-g09d2