diff options
Diffstat (limited to 'src/fs')
-rw-r--r-- | src/fs/files.cpp | 16 | ||||
-rw-r--r-- | src/fs/files_unittest.cc | 12 | ||||
-rw-r--r-- | src/fs/virtfs/virtfs_unittest.cc | 202 | ||||
-rw-r--r-- | src/fs/virtfs/virtfszip.cpp | 2 | ||||
-rw-r--r-- | src/fs/virtfs/zip.cpp | 6 | ||||
-rw-r--r-- | src/fs/virtfs/zip_unittest.cc | 29 | ||||
-rw-r--r-- | src/fs/virtfs_unittest.cc | 39 |
7 files changed, 175 insertions, 131 deletions
diff --git a/src/fs/files.cpp b/src/fs/files.cpp index d8a6e76ec..f6a138475 100644 --- a/src/fs/files.cpp +++ b/src/fs/files.cpp @@ -38,6 +38,8 @@ #include "debug.h" +extern const char *dirSeparator; + #ifdef ANDROID void Files::extractLocale() { @@ -211,7 +213,21 @@ int Files::copyFile(const std::string &restrict srcName, bool Files::existsLocal(const std::string &path) { struct stat statbuf; +#ifdef WIN32 + // in windows path\file.ext\ by default detected as exists + // if file.ext is not directory, need return false + const bool res = (stat(path.c_str(), &statbuf) == 0); + if (res == false) + return false; + if ((findLast(path, "/") == true || findLast(path, "\\") == true) && + S_ISDIR(statbuf.st_mode) == 0) + { + return false; + } + return true; +#else // WIN32 return stat(path.c_str(), &statbuf) == 0; +#endif // WIN32 } bool Files::loadTextFileLocal(const std::string &fileName, diff --git a/src/fs/files_unittest.cc b/src/fs/files_unittest.cc index 19fd40ec1..d2bac3256 100644 --- a/src/fs/files_unittest.cc +++ b/src/fs/files_unittest.cc @@ -34,7 +34,6 @@ TEST_CASE("Files renameFile") { - dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); VirtFs::addDirToSearchPathSilent("data", Append_false); @@ -74,7 +73,6 @@ TEST_CASE("Files renameFile") TEST_CASE("Files existsLocal") { - dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); VirtFs::addDirToSearchPathSilent("data", Append_false); @@ -91,7 +89,6 @@ TEST_CASE("Files existsLocal") TEST_CASE("Files loadTextFileString") { - dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); VirtFs::addDirToSearchPathSilent("data", Append_false); @@ -107,7 +104,6 @@ TEST_CASE("Files loadTextFileString") TEST_CASE("Files loadTextFile") { - dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); VirtFs::addDirToSearchPathSilent("data", Append_false); @@ -127,7 +123,6 @@ TEST_CASE("Files loadTextFile") TEST_CASE("Files saveTextFile") { - dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); VirtFs::addDirToSearchPathSilent("data", Append_false); @@ -138,7 +133,13 @@ TEST_CASE("Files saveTextFile") Files::saveTextFile(dir, "tempfile.txt", "test line\ntext line2"); std::string data = VirtFs::loadTextFileString("test/tempfile.txt"); ::remove((dir + "/tempfile.txt").c_str()); +#ifdef WIN32 + REQUIRE(data == "test line\r\ntext line2\r\n"); +#else // WIN32 + REQUIRE(data == "test line\ntext line2\n"); +#endif // WIN32 + ResourceManager::deleteInstance(); VirtFs::removeDirFromSearchPathSilent("data"); VirtFs::removeDirFromSearchPathSilent("../data"); @@ -148,7 +149,6 @@ TEST_CASE("Files saveTextFile") TEST_CASE("Files getFilesInDir") { - dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); VirtFs::addDirToSearchPathSilent("data", Append_false); diff --git a/src/fs/virtfs/virtfs_unittest.cc b/src/fs/virtfs/virtfs_unittest.cc index cece63a04..8047c879c 100644 --- a/src/fs/virtfs/virtfs_unittest.cc +++ b/src/fs/virtfs/virtfs_unittest.cc @@ -55,14 +55,15 @@ TEST_CASE("VirtFs1 addDirToSearchPath") { VirtFs::init("."); logger = new Logger(); + const std::string sep = dirSeparator; SECTION("simple 1") { REQUIRE(VirtFs::addDirToSearchPathSilent2("dir1", Append_false)); - REQUIRE(VirtFs::searchEntryByRootInternal("dir1/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("test/") == nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir1" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("test" + sep) == nullptr); REQUIRE(VirtFs::getEntries().size() == 1); - REQUIRE(VirtFs::getEntries()[0]->root == "dir1/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir1" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[0])->userDir == "dir1"); @@ -72,13 +73,13 @@ TEST_CASE("VirtFs1 addDirToSearchPath") { REQUIRE(VirtFs::addDirToSearchPathSilent2("dir1/", Append_true)); - REQUIRE(VirtFs::searchEntryByRootInternal("dir1/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("test/") == nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir1" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("test" + sep) == nullptr); REQUIRE(VirtFs::getEntries().size() == 1); - REQUIRE(VirtFs::getEntries()[0]->root == "dir1/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir1" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( - VirtFs::getEntries()[0])->userDir == "dir1/"); + VirtFs::getEntries()[0])->userDir == "dir1" + sep); } SECTION("simple 3") @@ -87,12 +88,12 @@ TEST_CASE("VirtFs1 addDirToSearchPath") Append_false)); REQUIRE(VirtFs::addDirToSearchPathSilent2("dir2", Append_false)); - REQUIRE(VirtFs::searchEntryByRootInternal("dir1/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("dir2/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("test/") == nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir1" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir2" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("test" + sep) == nullptr); REQUIRE(VirtFs::getEntries().size() == 2); - REQUIRE(VirtFs::getEntries()[0]->root == "dir2/"); - REQUIRE(VirtFs::getEntries()[1]->root == "dir1/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir2" + sep); + REQUIRE(VirtFs::getEntries()[1]->root == "dir1" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( @@ -107,16 +108,16 @@ TEST_CASE("VirtFs1 addDirToSearchPath") Append_true)); REQUIRE(VirtFs::addDirToSearchPathSilent2("dir2", Append_true)); - REQUIRE(VirtFs::searchEntryByRootInternal("dir1/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("dir2/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("test/") == nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir1" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir2" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("test" + sep) == nullptr); REQUIRE(VirtFs::getEntries().size() == 2); - REQUIRE(VirtFs::getEntries()[0]->root == "dir1/"); - REQUIRE(VirtFs::getEntries()[1]->root == "dir2/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir1" + sep); + REQUIRE(VirtFs::getEntries()[1]->root == "dir2" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( - VirtFs::getEntries()[0])->userDir == "dir1/"); + VirtFs::getEntries()[0])->userDir == "dir1" + sep); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[1])->userDir == "dir2"); } @@ -129,14 +130,15 @@ TEST_CASE("VirtFs1 addDirToSearchPath") Append_true)); REQUIRE(VirtFs::addDirToSearchPathSilent2("dir3/test", Append_true)); - REQUIRE(VirtFs::searchEntryByRootInternal("dir1/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("dir2/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("dir3/test/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("test/") == nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir1" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("dir2" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal( + "dir3" + sep + "test" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal("test" + sep) == nullptr); REQUIRE(VirtFs::getEntries().size() == 3); - REQUIRE(VirtFs::getEntries()[0]->root == "dir1/"); - REQUIRE(VirtFs::getEntries()[1]->root == "dir2/"); - REQUIRE(VirtFs::getEntries()[2]->root == "dir3/test/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir1" + sep); + REQUIRE(VirtFs::getEntries()[1]->root == "dir2" + sep); + REQUIRE(VirtFs::getEntries()[2]->root == "dir3" + sep + "test" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[2]->type == FsEntryType::Dir); @@ -145,7 +147,7 @@ TEST_CASE("VirtFs1 addDirToSearchPath") REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[1])->userDir == "dir2"); REQUIRE(static_cast<VirtDirEntry*>( - VirtFs::getEntries()[2])->userDir == "dir3/test"); + VirtFs::getEntries()[2])->userDir == "dir3" + sep + "test"); } SECTION("simple 6") @@ -154,21 +156,25 @@ TEST_CASE("VirtFs1 addDirToSearchPath") Append_true)); REQUIRE(VirtFs::addDirToSearchPathSilent2("dir2", Append_true)); - REQUIRE(VirtFs::addDirToSearchPathSilent2("dir3/test", + REQUIRE(VirtFs::addDirToSearchPathSilent2("dir3\\test", Append_false)); - REQUIRE(VirtFs::searchEntryByRootInternal("dir1/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("dir2/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("dir3/test/") != nullptr); - REQUIRE(VirtFs::searchEntryByRootInternal("test/") == nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal( + "dir1" + sep + "") != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal( + "dir2" + sep + "") != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal( + "dir3" + sep + "test" + sep) != nullptr); + REQUIRE(VirtFs::searchEntryByRootInternal( + "test" + sep + "") == nullptr); REQUIRE(VirtFs::getEntries().size() == 3); - REQUIRE(VirtFs::getEntries()[0]->root == "dir3/test/"); - REQUIRE(VirtFs::getEntries()[1]->root == "dir1/"); - REQUIRE(VirtFs::getEntries()[2]->root == "dir2/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir3" + sep + "test" + sep); + REQUIRE(VirtFs::getEntries()[1]->root == "dir1" + sep); + REQUIRE(VirtFs::getEntries()[2]->root == "dir2" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[2]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( - VirtFs::getEntries()[0])->userDir == "dir3/test"); + VirtFs::getEntries()[0])->userDir == "dir3" + sep + "test"); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[1])->userDir == "dir1"); REQUIRE(static_cast<VirtDirEntry*>( @@ -185,6 +191,7 @@ TEST_CASE("VirtFs1 addZipToSearchPath") logger = new Logger(); std::string name("data/test/test.zip"); std::string prefix; + const std::string sep = dirSeparator; std::vector<ZipLocalHeader*> headers; if (Files::existsLocal(name) == false) prefix = "../"; @@ -194,12 +201,12 @@ TEST_CASE("VirtFs1 addZipToSearchPath") REQUIRE(VirtFs::addZipToSearchPath(prefix + "data/test/test.zip", Append_false)); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") == nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") == nullptr); REQUIRE(VirtFs::getEntries().size() == 1); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test.zip"); + prefix + "data" + sep + "test" + sep + "test.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); } @@ -210,15 +217,15 @@ TEST_CASE("VirtFs1 addZipToSearchPath") REQUIRE(VirtFs::addZipToSearchPath(prefix + "data/test/test2.zip", Append_false)); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::getEntries().size() == 2); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); REQUIRE(VirtFs::getEntries()[1]->root == - prefix + "data/test/test.zip"); + prefix + "data" + sep + "test" + sep + "test.zip"); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Zip); } @@ -229,15 +236,15 @@ TEST_CASE("VirtFs1 addZipToSearchPath") REQUIRE(VirtFs::addZipToSearchPath(prefix + "data/test/test2.zip", Append_true)); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::getEntries().size() == 2); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test.zip"); + prefix + "data" + sep + "test" + sep + "test.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); REQUIRE(VirtFs::getEntries()[1]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Zip); } @@ -250,20 +257,20 @@ TEST_CASE("VirtFs1 addZipToSearchPath") REQUIRE(VirtFs::addZipToSearchPath(prefix + "data/test/test2.zip", Append_false)); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/") != nullptr); + prefix + "data" + sep + "test" + sep + "") != nullptr); REQUIRE(VirtFs::getEntries().size() == 3); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); REQUIRE(VirtFs::getEntries()[1]->root == - prefix + "data/test/"); + prefix + "data" + sep + "test" + sep + ""); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[2]->root == - prefix + "data/test/test.zip"); + prefix + "data" + sep + "test" + sep + "test.zip"); REQUIRE(VirtFs::getEntries()[2]->type == FsEntryType::Zip); } @@ -276,20 +283,20 @@ TEST_CASE("VirtFs1 addZipToSearchPath") REQUIRE(VirtFs::addZipToSearchPath(prefix + "data/test/test2.zip", Append_true)); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/") != nullptr); + prefix + "data" + sep + "test" + sep + "") != nullptr); REQUIRE(VirtFs::getEntries().size() == 3); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/"); + prefix + "data" + sep + "test" + sep + ""); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[1]->root == - prefix + "data/test/test.zip"); + prefix + "data" + sep + "test" + sep + "test.zip"); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Zip); REQUIRE(VirtFs::getEntries()[2]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[2]->type == FsEntryType::Zip); } @@ -303,6 +310,7 @@ TEST_CASE("VirtFs1 removeFromSearchPath") logger = new Logger(); std::string name("data/test/test.zip"); std::string prefix; + const std::string sep = dirSeparator; std::vector<ZipLocalHeader*> headers; if (Files::existsLocal(name) == false) prefix = "../"; @@ -333,28 +341,28 @@ TEST_CASE("VirtFs1 removeFromSearchPath") REQUIRE_THROWS(VirtFs::removeDirFromSearchPath("dir2")); REQUIRE(VirtFs::removeDirFromSearchPath("dir1")); REQUIRE(VirtFs::getEntries().size() == 2); - REQUIRE(VirtFs::getEntries()[0]->root == "dir3/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir3" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[0])->userDir == "dir3"); - REQUIRE(VirtFs::getEntries()[1]->root == "dir2/dir3/"); + REQUIRE(VirtFs::getEntries()[1]->root == "dir2" + sep + "dir3" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( - VirtFs::getEntries()[1])->userDir == "dir2/dir3"); + VirtFs::getEntries()[1])->userDir == "dir2" + sep + "dir3"); REQUIRE_THROWS(VirtFs::removeDirFromSearchPath("dir1")); REQUIRE(VirtFs::getEntries().size() == 2); - REQUIRE(VirtFs::getEntries()[0]->root == "dir3/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir3" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[0])->userDir == "dir3"); - REQUIRE(VirtFs::getEntries()[1]->root == "dir2/dir3/"); + REQUIRE(VirtFs::getEntries()[1]->root == "dir2" + sep + "dir3" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( - VirtFs::getEntries()[1])->userDir == "dir2/dir3"); + VirtFs::getEntries()[1])->userDir == "dir2" + sep + "dir3"); REQUIRE(VirtFs::removeDirFromSearchPath("dir2/dir3")); - REQUIRE_THROWS(VirtFs::removeDirFromSearchPath("dir2/dir3/")); + REQUIRE_THROWS(VirtFs::removeDirFromSearchPath("dir2/dir3" + sep)); REQUIRE(VirtFs::getEntries().size() == 1); - REQUIRE(VirtFs::getEntries()[0]->root == "dir3/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir3" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[0])->userDir == "dir3"); @@ -365,7 +373,7 @@ TEST_CASE("VirtFs1 removeFromSearchPath") REQUIRE(VirtFs::addDirToSearchPathSilent2("dir1", Append_true)); REQUIRE(VirtFs::getEntries().size() == 1); - REQUIRE(VirtFs::getEntries()[0]->root == "dir1/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir1" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[0])->userDir == "dir1"); @@ -375,7 +383,7 @@ TEST_CASE("VirtFs1 removeFromSearchPath") REQUIRE(VirtFs::addDirToSearchPathSilent2("dir1", Append_true)); REQUIRE(VirtFs::getEntries().size() == 1); - REQUIRE(VirtFs::getEntries()[0]->root == "dir1/"); + REQUIRE(VirtFs::getEntries()[0]->root == "dir1" + sep); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir); REQUIRE(static_cast<VirtDirEntry*>( VirtFs::getEntries()[0])->userDir == "dir1"); @@ -389,25 +397,25 @@ TEST_CASE("VirtFs1 removeFromSearchPath") Append_true)); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::getEntries().size() == 2); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test.zip"); + prefix + "data" + sep + "test" + sep + "test.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); REQUIRE(VirtFs::getEntries()[1]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Zip); VirtFs::removeZipFromSearchPath(prefix + "data/test/test.zip"); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") == nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") == nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::getEntries().size() == 1); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); } @@ -417,39 +425,39 @@ TEST_CASE("VirtFs1 removeFromSearchPath") Append_false)); REQUIRE(VirtFs::addDirToSearchPath(prefix + "data/test", Append_false)); - REQUIRE(VirtFs::addZipToSearchPath(prefix + "data/test/test2.zip", + REQUIRE(VirtFs::addZipToSearchPath(prefix + "data\\test/test2.zip", Append_false)); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/") != nullptr); + prefix + "data" + sep + "test" + sep + "") != nullptr); REQUIRE(VirtFs::getEntries().size() == 3); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); REQUIRE(VirtFs::getEntries()[1]->root == - prefix + "data/test/"); + prefix + "data" + sep + "test" + sep); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir); REQUIRE(VirtFs::getEntries()[2]->root == - prefix + "data/test/test.zip"); + prefix + "data" + sep + "test" + sep + "test.zip"); REQUIRE(VirtFs::getEntries()[2]->type == FsEntryType::Zip); VirtFs::removeZipFromSearchPath(prefix + "data/test/test.zip"); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test.zip") == nullptr); + prefix + "data" + sep + "test" + sep + "test.zip") == nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/test2.zip") != nullptr); + prefix + "data" + sep + "test" + sep + "test2.zip") != nullptr); REQUIRE(VirtFs::searchEntryByRootInternal( - prefix + "data/test/") != nullptr); + prefix + "data" + sep + "test" + sep + "") != nullptr); REQUIRE(VirtFs::getEntries().size() == 2); REQUIRE(VirtFs::getEntries()[0]->root == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip); REQUIRE(VirtFs::getEntries()[1]->root == - prefix + "data/test/"); + prefix + "data" + sep + "test" + sep); REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir); } @@ -547,6 +555,7 @@ TEST_CASE("VirtFs1 getRealDir1") { VirtFs::init("."); logger = new Logger(); + const std::string sep = dirSeparator; REQUIRE(VirtFs::getRealDir(".") == ""); REQUIRE(VirtFs::getRealDir("..") == ""); const bool dir1 = VirtFs::addDirToSearchPathSilent("data", @@ -587,17 +596,17 @@ TEST_CASE("VirtFs1 getRealDir1") REQUIRE(VirtFs::getRealDir("test\\test.txt") == "data"); REQUIRE(VirtFs::getRealDir("test.txt") == - "data/test"); + "data" + sep + "test"); } else { - REQUIRE(VirtFs::getRealDir("test") == "../data"); + REQUIRE(VirtFs::getRealDir("test") == ".." + sep + "data"); REQUIRE(VirtFs::getRealDir("test/test.txt") == - "../data"); + ".." + sep + "data"); REQUIRE(VirtFs::getRealDir("test\\test.txt") == - "../data"); + ".." + sep + "data"); REQUIRE(VirtFs::getRealDir("test.txt") == - "../data/test"); + ".." + sep + "data" + sep + "test"); } REQUIRE(VirtFs::getRealDir("zzz") == ""); @@ -612,9 +621,9 @@ TEST_CASE("VirtFs1 getRealDir1") } else { - REQUIRE(VirtFs::getRealDir("test") == "../data"); + REQUIRE(VirtFs::getRealDir("test") == ".." + sep + "data"); REQUIRE(VirtFs::getRealDir("test/test.txt") == - "../data"); + ".." + sep + "data"); } REQUIRE(VirtFs::getRealDir("zzz") == ""); @@ -628,10 +637,11 @@ TEST_CASE("VirtFs1 getRealDir2") { VirtFs::init("."); logger = new Logger(); + const std::string sep = dirSeparator; std::string name("data/test/test.zip"); - std::string prefix("data/test/"); + std::string prefix("data" + sep + "test" + sep); if (Files::existsLocal(name) == false) - prefix = "../" + prefix; + prefix = ".." + sep + prefix; VirtFs::addZipToSearchPath(prefix + "test2.zip", Append_false); diff --git a/src/fs/virtfs/virtfszip.cpp b/src/fs/virtfs/virtfszip.cpp index eac4a2535..0f1021793 100644 --- a/src/fs/virtfs/virtfszip.cpp +++ b/src/fs/virtfs/virtfszip.cpp @@ -136,7 +136,7 @@ namespace VirtFsZip StringVect &names) { VirtZipEntry *const zipEntry = static_cast<VirtZipEntry*>(entry); - if (dirName == "/") + if (dirName == dirSeparator) { FOR_EACH (std::vector<ZipLocalHeader*>::const_iterator, it2, diff --git a/src/fs/virtfs/zip.cpp b/src/fs/virtfs/zip.cpp index 8dd7d8080..0556af1f8 100644 --- a/src/fs/virtfs/zip.cpp +++ b/src/fs/virtfs/zip.cpp @@ -36,6 +36,8 @@ #include "debug.h" +extern const char *dirSeparator; + #define readVal(val, sz, msg) \ cnt = fread(static_cast<void*>(val), 1, sz, arcFile); \ if (cnt != sz) \ @@ -131,7 +133,7 @@ namespace Zip header->dataOffset = ftell(arcFile) + extraFieldLen; fseek(arcFile, extraFieldLen + header->compressSize, SEEK_CUR); // pointer on 30 + fileNameLen + extraFieldLen + compressSize - if (findLast(header->fileName, "/") == false) + if (findLast(header->fileName, dirSeparator) == false) { headers.push_back(header); logger->log(" file name: %s", @@ -145,6 +147,8 @@ namespace Zip } else { + logger->log(" dir name: %s", + header->fileName.c_str()); dirs.push_back(header->fileName); delete header; } diff --git a/src/fs/virtfs/zip_unittest.cc b/src/fs/virtfs/zip_unittest.cc index 4b9258ec5..27d4bc1f9 100644 --- a/src/fs/virtfs/zip_unittest.cc +++ b/src/fs/virtfs/zip_unittest.cc @@ -35,11 +35,14 @@ #include "debug.h" +extern const char *dirSeparator; + TEST_CASE("Zip readArchiveInfo") { logger = new Logger(); std::string name("data/test/test.zip"); std::string prefix; + const std::string sep = dirSeparator; if (Files::existsLocal(name) == false) prefix = "../"; @@ -54,10 +57,10 @@ TEST_CASE("Zip readArchiveInfo") REQUIRE(Zip::readArchiveInfo(entry)); REQUIRE(headers.size() == 2); REQUIRE(entry->root == name); - REQUIRE(headers[0]->fileName == "dir/hide.png"); + REQUIRE(headers[0]->fileName == "dir" + sep + "hide.png"); REQUIRE(headers[0]->compressSize == 365); REQUIRE(headers[0]->uncompressSize == 368); - REQUIRE(headers[1]->fileName == "dir/brimmedhat.png"); + REQUIRE(headers[1]->fileName == "dir" + sep + "brimmedhat.png"); REQUIRE(headers[1]->compressSize == 1959); REQUIRE(headers[1]->uncompressSize == 1959); @@ -79,39 +82,43 @@ TEST_CASE("Zip readArchiveInfo") REQUIRE(headers[0]->compressSize == 17); REQUIRE(headers[0]->uncompressSize == 23); - REQUIRE(headers[1]->fileName == "dir2/hide.png"); + REQUIRE(headers[1]->fileName == "dir2" + sep + "hide.png"); REQUIRE(headers[1]->compressSize == 365); REQUIRE(headers[1]->uncompressSize == 368); - REQUIRE(headers[2]->fileName == "dir2/test.txt"); + REQUIRE(headers[2]->fileName == "dir2" + sep + "test.txt"); REQUIRE(headers[2]->compressSize == 17); REQUIRE(headers[2]->uncompressSize == 23); - REQUIRE(headers[3]->fileName == "dir2/paths.xml"); + REQUIRE(headers[3]->fileName == "dir2" + sep + "paths.xml"); REQUIRE(headers[3]->compressSize == 154); REQUIRE(headers[3]->uncompressSize == 185); - REQUIRE(headers[4]->fileName == "dir2/units.xml"); + REQUIRE(headers[4]->fileName == "dir2" + sep + "units.xml"); REQUIRE(headers[4]->compressSize == 202); REQUIRE(headers[4]->uncompressSize == 306); - REQUIRE(headers[5]->fileName == "dir/hide.png"); + REQUIRE(headers[5]->fileName == "dir" + sep + "hide.png"); REQUIRE(headers[5]->compressSize == 365); REQUIRE(headers[5]->uncompressSize == 368); - REQUIRE(headers[6]->fileName == "dir/1/test.txt"); + REQUIRE(headers[6]->fileName == + "dir" + sep + "1" + sep + "test.txt"); REQUIRE(headers[6]->compressSize == 17); REQUIRE(headers[6]->uncompressSize == 23); - REQUIRE(headers[7]->fileName == "dir/1/file1.txt"); + REQUIRE(headers[7]->fileName == + "dir" + sep + "1" + sep + "file1.txt"); REQUIRE(headers[7]->compressSize == 17); REQUIRE(headers[7]->uncompressSize == 23); - REQUIRE(headers[8]->fileName == "dir/gpl/palette.gpl"); + REQUIRE(headers[8]->fileName == + "dir" + sep + "gpl" + sep + "palette.gpl"); REQUIRE(headers[8]->compressSize == 128); REQUIRE(headers[8]->uncompressSize == 213); - REQUIRE(headers[9]->fileName == "dir/dye.png"); + REQUIRE(headers[9]->fileName == + "dir" + sep + "dye.png"); REQUIRE(headers[9]->compressSize == 794); REQUIRE(headers[9]->uncompressSize == 794); diff --git a/src/fs/virtfs_unittest.cc b/src/fs/virtfs_unittest.cc index c1dcc4fd0..b3f07daa1 100644 --- a/src/fs/virtfs_unittest.cc +++ b/src/fs/virtfs_unittest.cc @@ -599,6 +599,7 @@ TEST_CASE("VirtFs openRead3") TEST_CASE("VirtFs getRealDir1") { logger = new Logger(); + const std::string sep = dirSeparator; REQUIRE(VirtFs::getRealDir(".") == ""); REQUIRE(VirtFs::getRealDir("..") == ""); const bool dir1 = VirtFs::addDirToSearchPathSilent("data", Append_false); @@ -626,15 +627,15 @@ TEST_CASE("VirtFs getRealDir1") REQUIRE(VirtFs::getRealDir("test/test.txt") == "data"); REQUIRE(VirtFs::getRealDir("test.txt") == - "data/test"); + "data" + sep + "test"); } else { - REQUIRE(VirtFs::getRealDir("test") == "../data"); + REQUIRE(VirtFs::getRealDir("test") == ".." + sep + "data"); REQUIRE(VirtFs::getRealDir("test/test.txt") == - "../data"); + ".." + sep + "data"); REQUIRE(VirtFs::getRealDir("test.txt") == - "../data/test"); + ".." + sep + "data" + sep + "test"); } REQUIRE(VirtFs::getRealDir("zzz") == ""); @@ -642,15 +643,17 @@ TEST_CASE("VirtFs getRealDir1") { VirtFs::addZipToSearchPath("data/test/test.zip", Append_false); REQUIRE(VirtFs::getRealDir("dir/brimmedhat.png") == - "data/test/test.zip"); - REQUIRE(VirtFs::getRealDir("hide.png") == "data/test"); + "data" + sep + "test" + sep + "test.zip"); + REQUIRE(VirtFs::getRealDir("hide.png") == + "data" + sep + "test"); } else { VirtFs::addZipToSearchPath("../data/test/test.zip", Append_false); REQUIRE(VirtFs::getRealDir("dir/brimmedhat.png") == - "../data/test/test.zip"); - REQUIRE(VirtFs::getRealDir("hide.png") == "../data/test"); + ".." + sep + "data" + sep + "test" + sep + "test.zip"); + REQUIRE(VirtFs::getRealDir("hide.png") == + ".." + sep + "data" + sep + "test"); } VirtFs::removeDirFromSearchPathSilent("data/test"); @@ -661,14 +664,16 @@ TEST_CASE("VirtFs getRealDir1") REQUIRE(VirtFs::getRealDir("test") == "data"); REQUIRE(VirtFs::getRealDir("test/test.txt") == "data"); - REQUIRE(VirtFs::getRealDir("dir/hide.png") == "data/test/test.zip"); + REQUIRE(VirtFs::getRealDir("dir/hide.png") == + "data" + sep + "test" + sep + "test.zip"); } else { - REQUIRE(VirtFs::getRealDir("test") == "../data"); + REQUIRE(VirtFs::getRealDir("test") == ".." + sep + "data"); REQUIRE(VirtFs::getRealDir("test/test.txt") == - "../data"); - REQUIRE(VirtFs::getRealDir("dir/hide.png") == "../data/test/test.zip"); + ".." + sep + "data"); + REQUIRE(VirtFs::getRealDir("dir/hide.png") == + ".." + sep + "data" + sep + "test" + sep + "test.zip"); } REQUIRE(VirtFs::exists("dir/hide.png")); REQUIRE(VirtFs::getRealDir("zzz") == ""); @@ -685,6 +690,7 @@ TEST_CASE("VirtFs getRealDir1") TEST_CASE("VirtFs getrealDir2") { logger = new Logger(); + const std::string sep = dirSeparator; std::string name("data/test/test.zip"); std::string prefix; if (Files::existsLocal(name) == false) @@ -697,12 +703,13 @@ TEST_CASE("VirtFs getrealDir2") REQUIRE(VirtFs::getRealDir("zzz") == ""); REQUIRE(VirtFs::getRealDir("dir1/file1.txt") == - prefix + "data/test"); - REQUIRE(VirtFs::getRealDir("hide.png") == prefix + "data/test"); + prefix + "data" + sep + "test"); + REQUIRE(VirtFs::getRealDir("hide.png") == + prefix + "data" + sep + "test"); REQUIRE(VirtFs::getRealDir("dir//hide.png") == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); REQUIRE(VirtFs::getRealDir("dir/1//test.txt") == - prefix + "data/test/test2.zip"); + prefix + "data" + sep + "test" + sep + "test2.zip"); VirtFs::removeZipFromSearchPath(prefix + "data/test/test2.zip"); VirtFs::removeDirFromSearchPath(prefix + "data/test"); |