2017-05-01 22:03:42 +00:00
|
|
|
/* Environment handling implementation bits.
|
|
|
|
*
|
|
|
|
* This file is part of libostd. See COPYING.md for futher information.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <cstdlib>
|
|
|
|
#include <cstring>
|
|
|
|
#include <new>
|
|
|
|
|
|
|
|
#include "ostd/environ.hh"
|
|
|
|
|
|
|
|
#ifdef OSTD_PLATFORM_WIN32
|
|
|
|
# define WIN32_LEAN_AND_MEAN
|
|
|
|
# include <windows.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
namespace ostd {
|
|
|
|
|
|
|
|
OSTD_EXPORT std::optional<std::string> env_get(string_range name) {
|
2017-06-02 16:33:56 +00:00
|
|
|
char const *ret = std::getenv(std::string{name}.data());
|
2017-05-01 22:03:42 +00:00
|
|
|
if (!ret) {
|
|
|
|
return std::nullopt;
|
|
|
|
}
|
|
|
|
return std::string{ret};
|
|
|
|
}
|
|
|
|
|
|
|
|
OSTD_EXPORT bool env_set(string_range name, string_range value, bool update) {
|
|
|
|
#ifndef OSTD_PLATFORM_WIN32
|
2017-06-02 16:33:56 +00:00
|
|
|
return !setenv(std::string{name}.data(), std::string{value}.data(), update);
|
2017-05-01 22:03:42 +00:00
|
|
|
#else
|
2017-06-02 16:33:56 +00:00
|
|
|
std::string nstr{name};
|
|
|
|
if (!update && GetEnvironmentVariable(nstr.data(), nullptr, 0)) {
|
2017-05-01 22:03:42 +00:00
|
|
|
return true;
|
|
|
|
}
|
2017-06-02 16:33:56 +00:00
|
|
|
return !!SetEnvironmentVariable(nstr.data(), std::string{value}.data());
|
2017-05-01 22:03:42 +00:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
OSTD_EXPORT bool env_unset(string_range name) {
|
|
|
|
#ifndef OSTD_PLATFORM_WIN32
|
|
|
|
return !unsetenv(std::string{name}.data());
|
|
|
|
#else
|
|
|
|
return !!SetEnvironmentVariable(std::string{name}.data(), nullptr);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
} /* namespace ostd */
|