From 5a2e3f03b48191018361b046a44cd393d22184bb Mon Sep 17 00:00:00 2001 From: Panagiotis Christopoulos Charitos Date: Fri, 23 Aug 2019 20:13:21 +0200 Subject: [PATCH] Some more fixes --- src/anki/core/App.cpp | 2 +- src/anki/physics/Common.h | 7 +++++++ src/anki/util/Filesystem.h | 2 +- src/anki/util/FilesystemPosix.cpp | 4 ++-- src/anki/util/FilesystemWindows.cpp | 23 ++++++----------------- tests/util/Filesystem.cpp | 2 +- 6 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/anki/core/App.cpp b/src/anki/core/App.cpp index ff36ece56..dad75731a 100644 --- a/src/anki/core/App.cpp +++ b/src/anki/core/App.cpp @@ -496,7 +496,7 @@ Error App::initDirs(const ConfigSet& cfg) #if !ANKI_OS_ANDROID // Settings path StringAuto home(m_heapAlloc); - ANKI_CHECK(getHomeDirectory(m_heapAlloc, home)); + ANKI_CHECK(getHomeDirectory(home)); m_settingsDir.sprintf(m_heapAlloc, "%s/.anki", &home[0]); diff --git a/src/anki/physics/Common.h b/src/anki/physics/Common.h index a5669a2a2..be0779445 100644 --- a/src/anki/physics/Common.h +++ b/src/anki/physics/Common.h @@ -16,6 +16,10 @@ # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Wfloat-conversion" #endif +#if ANKI_COMPILER_MSVC +# pragma warning(push) +# pragma warning(disable : 4305) +#endif #define BT_THREADSAFE 0 #define BT_NO_PROFILE 1 #include @@ -26,6 +30,9 @@ #if ANKI_COMPILER_GCC_COMPATIBLE # pragma GCC diagnostic pop #endif +#if ANKI_COMPILER_MSVC +# pragma warning(pop) +#endif namespace anki { diff --git a/src/anki/util/Filesystem.h b/src/anki/util/Filesystem.h index 70ff68070..b731ade5f 100644 --- a/src/anki/util/Filesystem.h +++ b/src/anki/util/Filesystem.h @@ -45,7 +45,7 @@ ANKI_USE_RESULT Error createDirectory(const CString& dir); /// Get the home directory. /// Write the home directory to @a buff. The @a buffSize is the size of the @a buff. If the @buffSize is not enough the /// function will throw an exception. -ANKI_USE_RESULT Error getHomeDirectory(GenericMemoryPoolAllocator alloc, String& out); +ANKI_USE_RESULT Error getHomeDirectory(StringAuto& out); /// @} } // end namespace anki diff --git a/src/anki/util/FilesystemPosix.cpp b/src/anki/util/FilesystemPosix.cpp index 2950b4a5b..487ba1ba1 100644 --- a/src/anki/util/FilesystemPosix.cpp +++ b/src/anki/util/FilesystemPosix.cpp @@ -195,7 +195,7 @@ Error createDirectory(const CString& dir) return err; } -Error getHomeDirectory(GenericMemoryPoolAllocator alloc, String& out) +Error getHomeDirectory(StringAuto& out) { const char* home = getenv("HOME"); if(home == nullptr) @@ -204,7 +204,7 @@ Error getHomeDirectory(GenericMemoryPoolAllocator alloc, String& out) return Error::FUNCTION_FAILED; } - out.create(alloc, home); + out.create(home); return Error::NONE; } diff --git a/src/anki/util/FilesystemWindows.cpp b/src/anki/util/FilesystemWindows.cpp index e9dd134b4..7b96cdc81 100644 --- a/src/anki/util/FilesystemWindows.cpp +++ b/src/anki/util/FilesystemWindows.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include namespace anki @@ -70,28 +71,16 @@ Error createDirectory(const CString& dir) return err; } -Error getHomeDirectory(GenericMemoryPoolAllocator alloc, String& out) +Error getHomeDirectory(StringAuto& out) { - const char* homed = getenv("HOMEDRIVE"); - const char* homep = getenv("HOMEPATH"); - - if(homed == nullptr || homep == nullptr) + char path[MAX_PATH]; + if(SHGetFolderPath(NULL, CSIDL_PROFILE, nullptr, 0, path) != S_OK) { - ANKI_UTIL_LOGE("HOME environment variables not set"); + ANKI_UTIL_LOGE("SHGetFolderPath() failed"); return Error::FUNCTION_FAILED; } - out.sprintf(alloc, "%s/%s", homed, homep); - - // Convert to Unix path - for(char& c : out) - { - if(c == '\\') - { - c = '/'; - } - } - + out.create(path); return Error::NONE; } diff --git a/tests/util/Filesystem.cpp b/tests/util/Filesystem.cpp index c0977ece9..763e0881f 100644 --- a/tests/util/Filesystem.cpp +++ b/tests/util/Filesystem.cpp @@ -58,7 +58,7 @@ ANKI_TEST(Util, HomeDir) HeapAllocator alloc(allocAligned, nullptr); StringAuto out(alloc); - ANKI_TEST_EXPECT_NO_ERR(getHomeDirectory(alloc, out)); + ANKI_TEST_EXPECT_NO_ERR(getHomeDirectory(out)); printf("home dir %s\n", &out[0]); ANKI_TEST_EXPECT_GT(out.getLength(), 0); }