Browse Source

Add system::get/setWorkingDirectory() which fixes the Windows build.

tags/v2.0.0
Andrew Belt 4 years ago
parent
commit
b3a3b1cdbd
4 changed files with 31 additions and 10 deletions
  1. +4
    -0
      include/system.hpp
  2. +2
    -6
      src/asset.cpp
  3. +3
    -4
      src/plugin.cpp
  4. +22
    -0
      src/system.cpp

+ 4
- 0
include/system.hpp View File

@@ -36,7 +36,11 @@ void createDirectories(const std::string& path);
The directory must be empty. Fails silently. The directory must be empty. Fails silently.
*/ */
void removeDirectory(const std::string& path); void removeDirectory(const std::string& path);
/** Deletes a directory if empty and all parent directories that are then empty.
*/
void removeDirectories(const std::string& path); void removeDirectories(const std::string& path);
std::string getWorkingDirectory();
void setWorkingDirectory(const std::string& path);
/** Returns the number of logical simultaneous multithreading (SMT) (e.g. Intel Hyperthreaded) threads on the CPU. */ /** Returns the number of logical simultaneous multithreading (SMT) (e.g. Intel Hyperthreaded) threads on the CPU. */
int getLogicalCoreCount(); int getLogicalCoreCount();
/** Sets a name of the current thread for debuggers and OS-specific process viewers. */ /** Sets a name of the current thread for debuggers and OS-specific process viewers. */


+ 2
- 6
src/asset.cpp View File

@@ -33,9 +33,7 @@ static void initSystemDir() {
return; return;


if (settings::devMode) { if (settings::devMode) {
char buf[4096] = ".";
getcwd(buf, sizeof(buf));
systemDir = buf;
systemDir = system::getWorkingDirectory();
return; return;
} }


@@ -72,9 +70,7 @@ static void initSystemDir() {
#endif #endif
#if defined ARCH_LIN #if defined ARCH_LIN
// Use the current working directory as the default path on Linux. // Use the current working directory as the default path on Linux.
char buf[4096] = ".";
getcwd(buf, sizeof(buf));
systemDir = buf;
systemDir = system::getWorkingDirectory();
#endif #endif
} }




+ 3
- 4
src/plugin.cpp View File

@@ -55,12 +55,11 @@ static void* loadLibrary(std::string libraryPath) {
} }
#else #else
// Plugin uses -rpath=. so change working directory so it can find libRack. // Plugin uses -rpath=. so change working directory so it can find libRack.
char cwd[PATH_MAX] = "";
getcwd(cwd, sizeof(cwd));
chdir(asset::systemDir.c_str());
std::string cwd = system::getWorkingDirectory();
system::setWorkingDirectory(asset::systemDir);
// And then change it back // And then change it back
DEFER({ DEFER({
chdir(cwd);
system::setWorkingDirectory(cwd);
}); });
// Load library with dlopen // Load library with dlopen
void* handle = dlopen(libraryPath.c_str(), RTLD_NOW | RTLD_LOCAL); void* handle = dlopen(libraryPath.c_str(), RTLD_NOW | RTLD_LOCAL);


+ 22
- 0
src/system.cpp View File

@@ -168,6 +168,28 @@ void removeDirectories(const std::string& path) {
} }




std::string getWorkingDirectory() {
#if defined ARCH_WIN
wchar_t buf[4096] = L"";
GetCurrentDirectory(sizeof(buf), buf);
return string::fromWstring(buf);
#else
char buf[4096] = "";
getcwd(buf, sizeof(buf));
return buf;
#endif
}


void setWorkingDirectory(const std::string& path) {
#if defined ARCH_WIN
std::wstring pathW = string::toWstring(path);
SetCurrentDirectory(pathW.c_str());
#else
chdir(path.c_str());
#endif
}

int getLogicalCoreCount() { int getLogicalCoreCount() {
return std::thread::hardware_concurrency(); return std::thread::hardware_concurrency();
} }


Loading…
Cancel
Save