summaryrefslogtreecommitdiff
path: root/libs/pbd/epa.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pbd/epa.cc')
-rw-r--r--libs/pbd/epa.cc24
1 files changed, 23 insertions, 1 deletions
diff --git a/libs/pbd/epa.cc b/libs/pbd/epa.cc
index 3d3f7477d7..2d5ec29506 100644
--- a/libs/pbd/epa.cc
+++ b/libs/pbd/epa.cc
@@ -115,7 +115,29 @@ EnvironmentalProtectionAgency::save ()
void
EnvironmentalProtectionAgency::restore () const
{
+ clear ();
+
for (map<string,string>::const_iterator i = e.begin(); i != e.end(); ++i) {
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);
+ unsetenv(before.c_str());
+ }
+}