diff options
Diffstat (limited to 'src/fs/virtfs.cpp')
-rw-r--r-- | src/fs/virtfs.cpp | 155 |
1 files changed, 29 insertions, 126 deletions
diff --git a/src/fs/virtfs.cpp b/src/fs/virtfs.cpp index 9b19890eb..fa9df5ac2 100644 --- a/src/fs/virtfs.cpp +++ b/src/fs/virtfs.cpp @@ -20,51 +20,25 @@ #include "fs/virtfs.h" +#include "fs/virtfsphys.h" #include "fs/virtfile.h" -#include "fs/virtfileprivate.h" #include "fs/virtlist.h" -#include "utils/checkutils.h" - -#include <iostream> -#include <unistd.h> - -#ifdef ANDROID -#include "fs/paths.h" -#endif // ANDROID - #include "debug.h" const char *dirSeparator = nullptr; namespace VirtFs { -#if defined(__native_client__) - void init(const std::string &restrict name A_UNUSED) - { - if (!PHYSFS_init("/fakebinary")) -#elif defined(ANDROID) - void init(const std::string &restrict name A_UNUSED) - { - if (!PHYSFS_init((getRealPath(".").append("/fakebinary")).c_str())) -#else // defined(__native_client__) - void init(const std::string &restrict name) { - if (!PHYSFS_init(name.c_str())) -#endif // defined(__native_client__) - { - std::cout << "Error while initializing PhysFS: " - << VirtFs::getLastError() << std::endl; - _exit(1); - } + VirtFsPhys::init(name); updateDirSeparator(); - atexit(reinterpret_cast<void(*)()>(PHYSFS_deinit)); } void updateDirSeparator() { - dirSeparator = PHYSFS_getDirSeparator(); + dirSeparator = VirtFsPhys::getDirSeparator(); } const char *getDirSeparator() @@ -74,42 +48,32 @@ namespace VirtFs const char *getBaseDir() { - return PHYSFS_getBaseDir(); + return VirtFsPhys::getBaseDir(); } const char *getUserDir() { - return PHYSFS_getUserDir(); + return VirtFsPhys::getUserDir(); } bool exists(const std::string &restrict name) { - return PHYSFS_exists(name.c_str()); + return VirtFsPhys::exists(name); } VirtList *enumerateFiles(const std::string &restrict dir) { - char ** handle = PHYSFS_enumerateFiles(dir.c_str()); - VirtList *const files = new VirtList; - if (handle == nullptr) - return files; - for (const char *const *i = handle; *i; i++) - { - std::string str = *i; - files->names.push_back(str); - } - PHYSFS_freeList(handle); - return files; + return VirtFsPhys::enumerateFiles(dir); } bool isDirectory(const std::string &restrict name) { - return PHYSFS_isDirectory(name.c_str()); + return VirtFsPhys::isDirectory(name); } bool isSymbolicLink(const std::string &restrict name) { - return PHYSFS_isSymbolicLink(name.c_str()); + return VirtFsPhys::isSymbolicLink(name); } void freeList(VirtList *restrict const handle) @@ -119,127 +83,74 @@ namespace VirtFs VirtFile *openRead(const std::string &restrict filename) { - PHYSFS_file *restrict const handle = PHYSFS_openRead( - filename.c_str()); - if (!handle) - return nullptr; - VirtFile *restrict const file = new VirtFile; - file->mPrivate = new VirtFilePrivate(handle); - return file; + return VirtFsPhys::openRead(filename); } VirtFile *openWrite(const std::string &restrict filename) { - PHYSFS_file *restrict const handle = PHYSFS_openWrite( - filename.c_str()); - if (!handle) - return nullptr; - VirtFile *restrict const file = new VirtFile; - file->mPrivate = new VirtFilePrivate(handle); - return file; + return VirtFsPhys::openWrite(filename); } VirtFile *openAppend(const std::string &restrict filename) { - PHYSFS_file *restrict const handle = PHYSFS_openAppend( - filename.c_str()); - if (!handle) - return nullptr; - VirtFile *restrict const file = new VirtFile; - file->mPrivate = new VirtFilePrivate(handle); - return file; + return VirtFsPhys::openAppend(filename); } bool setWriteDir(const std::string &restrict newDir) { - return PHYSFS_setWriteDir(newDir.c_str()); + return VirtFsPhys::setWriteDir(newDir); } bool addDirToSearchPath(const std::string &restrict newDir, const Append append) { - logger->log("Add virtual directory: " + newDir); - if (newDir.find(".zip") != std::string::npos) - { - reportAlways("Called addDirToSearchPath with zip archive"); - return false; - } - return PHYSFS_addToSearchPath(newDir.c_str(), - append == Append_true ? 1 : 0); + return VirtFsPhys::addDirToSearchPath(newDir, append); } bool removeDirFromSearchPath(const std::string &restrict oldDir) { - logger->log("Remove virtual directory: " + oldDir); - if (oldDir.find(".zip") != std::string::npos) - { - reportAlways("Called removeDirFromSearchPath with zip archive"); - return false; - } - return PHYSFS_removeFromSearchPath(oldDir.c_str()); + return VirtFsPhys::removeDirFromSearchPath(oldDir); } bool addZipToSearchPath(const std::string &restrict newDir, const Append append) { - logger->log("Add virtual zip: " + newDir); - if (newDir.find(".zip") == std::string::npos) - { - reportAlways("Called addZipToSearchPath without zip archive"); - return false; - } - return PHYSFS_addToSearchPath(newDir.c_str(), - append == Append_true ? 1 : 0); + return VirtFsPhys::addZipToSearchPath(newDir, append); } bool removeZipFromSearchPath(const std::string &restrict oldDir) { - logger->log("Remove virtual zip: " + oldDir); - if (oldDir.find(".zip") == std::string::npos) - { - reportAlways("Called removeZipFromSearchPath without zip archive"); - return false; - } - return PHYSFS_removeFromSearchPath(oldDir.c_str()); + return VirtFsPhys::removeZipFromSearchPath(oldDir); } std::string getRealDir(const std::string &restrict filename) { - const char *const str = PHYSFS_getRealDir(filename.c_str()); - if (str == nullptr) - return std::string(); - return str; + return VirtFsPhys::getRealDir(filename); } bool mkdir(const std::string &restrict dirname) { - return PHYSFS_mkdir(dirname.c_str()); + return VirtFsPhys::mkdir(dirname); } bool remove(const std::string &restrict filename) { - return PHYSFS_delete(filename.c_str()); + return VirtFsPhys::remove(filename); } bool deinit() { - if (PHYSFS_deinit() != 0) - { - logger->log("Physfs deinit error: %s", - VirtFs::getLastError()); - return false; - } - return true; + return VirtFsPhys::deinit(); } void permitLinks(const bool val) { - PHYSFS_permitSymbolicLinks(val ? 1 : 0); + VirtFsPhys::permitLinks(val); } const char *getLastError() { - return PHYSFS_getLastError(); + return VirtFsPhys::getLastError(); } int close(VirtFile *restrict const file) @@ -255,9 +166,7 @@ namespace VirtFs const uint32_t objSize, const uint32_t objCount) { - if (file == nullptr) - return 0; - return PHYSFS_read(file->mPrivate->mFile, + return VirtFsPhys::read(file, buffer, objSize, objCount); @@ -268,9 +177,7 @@ namespace VirtFs const uint32_t objSize, const uint32_t objCount) { - if (file == nullptr) - return 0; - return PHYSFS_write(file->mPrivate->mFile, + return VirtFsPhys::write(file, buffer, objSize, objCount); @@ -278,27 +185,23 @@ namespace VirtFs int64_t fileLength(VirtFile *restrict const file) { - if (file == nullptr) - return -1; - return PHYSFS_fileLength(file->mPrivate->mFile); + return VirtFsPhys::fileLength(file); } int64_t tell(VirtFile *restrict const file) { - if (file == nullptr) - return -1; - return PHYSFS_tell(file->mPrivate->mFile); + return VirtFsPhys::tell(file); } int seek(VirtFile *restrict const file, const uint64_t pos) { - return PHYSFS_seek(file->mPrivate->mFile, + return VirtFsPhys::seek(file, pos); } int eof(VirtFile *restrict const file) { - return PHYSFS_eof(file->mPrivate->mFile); + return VirtFsPhys::eof(file); } } // namespace VirtFs |