This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch upstream/latest in repository colobot.
commit 47ed73247bed29f31720ef795141328b5d810d0e Author: krzys-h <krzy...@interia.pl> Date: Sun Mar 22 13:34:17 2015 +0100 Use std::wstring in boost::filesystem calls on Windows, fixes #414 --- src/common/pathman.cpp | 25 +++++++++++++++++++++++++ src/common/resources/resourcemanager.cpp | 19 +++++++++++++++++-- src/script/scriptfunc.cpp | 9 +++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/common/pathman.cpp b/src/common/pathman.cpp index ccf61ab..51e7e7d 100644 --- a/src/common/pathman.cpp +++ b/src/common/pathman.cpp @@ -35,6 +35,10 @@ #include <boost/algorithm/string.hpp> #include <boost/filesystem.hpp> +#ifdef PLATFORM_WINDOWS + #include "app/system_windows.h" +#endif + template<> CPathManager* CSingleton<CPathManager>::m_instance = nullptr; CPathManager::CPathManager() @@ -96,7 +100,11 @@ const std::string& CPathManager::GetSavePath() std::string CPathManager::VerifyPaths() { + #if PLATFORM_WINDOWS + boost::filesystem::path dataPath(CSystemUtilsWindows::UTF8_Decode(m_dataPath)); + #else boost::filesystem::path dataPath(m_dataPath); + #endif if (! (boost::filesystem::exists(dataPath) && boost::filesystem::is_directory(dataPath)) ) { CLogger::GetInstancePointer()->Error("Data directory '%s' doesn't exist or is not a directory\n", m_dataPath.c_str()); @@ -105,14 +113,23 @@ std::string CPathManager::VerifyPaths() std::string("Please check your installation, or supply a valid data directory by -datadir option."); } + #if PLATFORM_WINDOWS + boost::filesystem::path langPath(CSystemUtilsWindows::UTF8_Decode(m_langPath)); + #else boost::filesystem::path langPath(m_langPath); + #endif if (! (boost::filesystem::exists(langPath) && boost::filesystem::is_directory(langPath)) ) { CLogger::GetInstancePointer()->Warn("Language path '%s' is invalid, assuming translation files not installed\n", m_langPath.c_str()); } + #if PLATFORM_WINDOWS + boost::filesystem::create_directories(CSystemUtilsWindows::UTF8_Decode(m_savePath)); + boost::filesystem::create_directories(CSystemUtilsWindows::UTF8_Decode(m_savePath+"/mods")); + #else boost::filesystem::create_directories(m_savePath); boost::filesystem::create_directories(m_savePath+"/mods"); + #endif return ""; } @@ -132,10 +149,18 @@ void CPathManager::InitPaths() void CPathManager::LoadModsFromDir(const std::string &dir) { try { + #if PLATFORM_WINDOWS + boost::filesystem::directory_iterator iterator(CSystemUtilsWindows::UTF8_Decode(dir)); + #else boost::filesystem::directory_iterator iterator(dir); + #endif for(; iterator != boost::filesystem::directory_iterator(); ++iterator) { + #if PLATFORM_WINDOWS + AddMod(CSystemUtilsWindows::UTF8_Encode(iterator->path().wstring())); + #else AddMod(iterator->path().string()); + #endif } } catch(std::exception &e) diff --git a/src/common/resources/resourcemanager.cpp b/src/common/resources/resourcemanager.cpp index 64cb4ee..6f9ae24 100644 --- a/src/common/resources/resourcemanager.cpp +++ b/src/common/resources/resourcemanager.cpp @@ -28,6 +28,10 @@ #include <boost/filesystem.hpp> #include <boost/regex.hpp> +#if PLATFORM_WINDOWS + #include "app/system_windows.h" +#endif + namespace fs = boost::filesystem; namespace @@ -183,7 +187,12 @@ bool CResourceManager::RemoveDirectory(const std::string& directory) std::string writeDir = PHYSFS_getWriteDir(); try { - fs::remove_all(writeDir + "/" + CleanPath(directory)); + std::string path = writeDir + "/" + CleanPath(directory); + #ifdef PLATFORM_WINDOWS + fs::remove_all(CSystemUtilsWindows::UTF8_Decode(path)); + #else + fs::remove_all(path); + #endif } catch (std::exception & e) { @@ -267,7 +276,13 @@ bool CResourceManager::Move(const std::string& from, const std::string& to) std::string writeDir = PHYSFS_getWriteDir(); try { - fs::rename(writeDir + "/" + CleanPath(from), writeDir + "/" + CleanPath(to)); + std::string path_from = writeDir + "/" + CleanPath(from); + std::string path_to = writeDir + "/" + CleanPath(to); + #ifdef PLATFORM_WINDOWS + fs::rename(CSystemUtilsWindows::UTF8_Decode(path_from), CSystemUtilsWindows::UTF8_Decode(path_to)); + #else + fs::rename(path_from, path_to); + #endif } catch (std::exception & e) { diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 3fd3add..3416343 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -22,6 +22,7 @@ #include "app/app.h" +#include "common/config.h" #include "common/pathman.h" #include "common/resources/inputstream.h" #include "common/resources/resourcemanager.h" @@ -49,6 +50,10 @@ #include "ui/displaytext.h" +#if PLATFORM_WINDOWS + #include "app/system_windows.h" +#endif + // Compiling a procedure without any parameters. @@ -3245,7 +3250,11 @@ void PrepareFilename(CBotString &filename) filename = filename.Mid(pos+1); // also removes the drive letter C: } + #if PLATFORM_WINDOWS + boost::filesystem::create_directories(CSystemUtilsWindows::UTF8_Decode(CScriptFunctions::m_filesDir)); + #else boost::filesystem::create_directories(CScriptFunctions::m_filesDir); + #endif filename = CBotString(CScriptFunctions::m_filesDir.c_str()) + CBotString("/") + filename; CLogger::GetInstancePointer()->Debug("CBot accessing file '%s'\n", static_cast<const char*>(filename)); } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits