Skip to content

Commit

Permalink
Fix get/set enviroment variables possible issues
Browse files Browse the repository at this point in the history
  • Loading branch information
qubka committed May 19, 2024
1 parent 521189e commit d04c57a
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 25 deletions.
36 changes: 24 additions & 12 deletions src/utils/library_search_dirs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,26 @@ class LibrarySearchDirsLinux final : public LibrarySearchDirs {
explicit LibrarySearchDirsLinux(const std::vector<fs::path>& directories) {
if (directories.empty())
return;
std::string newLibPath;
for (const auto& directory : directories) {
std::format_to(std::back_inserter(newLibPath), "{}:", directory.string());
}
_curLibPath = GetEnvVariable("LD_LIBRARY_PATH");
if (_curLibPath.has_value()) {
std::string newLibPath;
for (const auto& directory : directories) {
std::format_to(std::back_inserter(newLibPath), "{}:", directory.string());
}
std::format_to(std::back_inserter(newLibPath), "{}", *_curLibPath);
SetEnvVariable("LD_LIBRARY_PATH", newLibPath);
} else {
if (!newLibPath.empty()) {
newLibPath.pop_back();
}
}
SetEnvVariable("LD_LIBRARY_PATH", newLibPath.data());
}

~LibrarySearchDirsLinux() override {
if(_curLibPath.has_value()) {
SetEnvVariable("LD_LIBRARY_PATH", *_curLibPath);
SetEnvVariable("LD_LIBRARY_PATH", _curLibPath->data());
} else {
UnsetEnvVariable("LD_LIBRARY_PATH");
}
}

Expand All @@ -70,20 +76,26 @@ class LibrarySearchDirsApple final : public LibrarySearchDirs {
explicit LibrarySearchDirsApple(const std::vector<fs::path>& directories) {
if (directories.empty())
return;
std::string newLibPath;
for (const auto& directory : directories) {
std::format_to(std::back_inserter(newLibPath), "{}:", directory.string());
}
_curLibPath = GetEnvVariable("DYLD_LIBRARY_PATH");
if (_curLibPath.has_value()) {
std::string newLibPath;
for (const auto& directory : directories) {
std::format_to(std::back_inserter(newLibPath), "{}:", directory.string());
}
std::format_to(std::back_inserter(newLibPath), "{}", *_curLibPath);
SetEnvVariable("DYLD_LIBRARY_PATH", newLibPath);
} else {
if (!newLibPath.empty()) {
newLibPath.pop_back();
}
}
SetEnvVariable("DYLD_LIBRARY_PATH", newLibPath.data());
}

~LibrarySearchDirsApple() override {
if(_curLibPath.has_value()) {
SetEnvVariable("DYLD_LIBRARY_PATH", *_curLibPath);
SetEnvVariable("DYLD_LIBRARY_PATH", _curLibPath->data());
} else {
UnsetEnvVariable("DYLD_LIBRARY_PATH");
}
}

Expand Down
22 changes: 13 additions & 9 deletions src/utils/platform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,29 @@
#include "os.h"

#if PLUGIFY_PLATFORM_WINDOWS
std::optional<std::wstring> plugify::GetEnvVariable(std::wstring_view varName) {
DWORD size = GetEnvironmentVariableW(varName.data(), NULL, 0);
std::optional<std::wstring> plugify::GetEnvVariable(const wchar_t* varName) {
DWORD size = GetEnvironmentVariableW(varName, NULL, 0);
std::wstring buffer(size, 0);
GetEnvironmentVariableW(varName.data(), buffer.data(), size);
GetEnvironmentVariableW(varName, buffer.data(), size);
return { std::move(buffer) };
}

bool plugify::SetEnvVariable(std::wstring_view varName, std::wstring_view value) {
return SetEnvironmentVariableW(varName.data(), value.data()) != 0;
bool plugify::SetEnvVariable(const wchar_t* varName, const wchar_t* value) {
return SetEnvironmentVariableW(varName, value) != 0;
}
#else
std::optional<std::string> plugify::GetEnvVariable(std::string_view varName) {
char* val = getenv(varName.data());
std::optional<std::string> plugify::GetEnvVariable(const char* varName) {
char* val = getenv(varName);
if (!val)
return {};
return val;
}

bool plugify::SetEnvVariable(std::string_view varName, std::string_view value) {
return setenv(varName.data(), value.data(), 1) == 0;
bool plugify::SetEnvVariable(const char* varName, const char* value) {
return setenv(varName, value, 1) == 0;
}

bool plugify::UnsetEnvVariable(const char* varName) {
return unsetenv(varName) == 0;
}
#endif
9 changes: 5 additions & 4 deletions src/utils/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

namespace plugify {
#if PLUGIFY_PLATFORM_WINDOWS
std::optional<std::wstring> GetEnvVariable(std::wstring_view varName);
bool SetEnvVariable(std::wstring_view varName, std::wstring_view value);
std::optional<std::wstring> GetEnvVariable(const wchar_t* varName);
bool SetEnvVariable(const wchar_t* varName, const wchar_t* value);
#else
std::optional<std::string> GetEnvVariable(std::string_view varName);
bool SetEnvVariable(std::string_view varName, std::string_view value);
std::optional<std::string> GetEnvVariable(const char* varName);
bool SetEnvVariable(const char* varName, const char* value);
bool UnsetEnvVariable(const char* varName);
#endif
}

0 comments on commit d04c57a

Please sign in to comment.