X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fepa.cc;h=c7a1d41b0ebd8566f6aedc0240c455d5d95cef41;hb=2e27e21d3a09889311e18a8efe11abcaa6d9c8b3;hp=3d3f7477d7dfe56151a809b52398fed86698b1b1;hpb=603d07a80bb293cb7819e50397111674a96b142c;p=ardour.git diff --git a/libs/pbd/epa.cc b/libs/pbd/epa.cc index 3d3f7477d7..c7a1d41b0e 100644 --- a/libs/pbd/epa.cc +++ b/libs/pbd/epa.cc @@ -17,13 +17,19 @@ */ +#include + #include -#include #include "pbd/epa.h" #include "pbd/strsplit.h" +#ifdef COMPILER_MSVC +#define environ _environ +_CRTIMP extern char ** _environ; +#else extern char** environ; +#endif using namespace PBD; using namespace std; @@ -62,7 +68,7 @@ EnvironmentalProtectionAgency::save () /* fetch environment from named environment variable, rather than "environ" */ - const char* estr = getenv (_envname.c_str()); + const char* estr = g_getenv (_envname.c_str()); if (!estr) { return; @@ -115,7 +121,29 @@ EnvironmentalProtectionAgency::save () void EnvironmentalProtectionAgency::restore () const { + clear (); + for (map::const_iterator i = e.begin(); i != e.end(); ++i) { - setenv (i->first.c_str(), i->second.c_str(), 1); + g_setenv (i->first.c_str(), i->second.c_str(), 1); } -} +} + +void +EnvironmentalProtectionAgency::clear () const +{ + char** the_environ = environ; + + for (size_t i = 0; the_environ[i]; ++i) { + + string estring = the_environ[i]; + string::size_type equal = estring.find_first_of ('='); + + if (equal == string::npos) { + /* say what? an environ value without = ? */ + continue; + } + + string before = estring.substr (0, equal); + g_unsetenv(before.c_str()); + } +}