*/
+#include <glib.h>
+
#include <cstdlib>
-#include <iostream>
#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;
/* 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;
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);
+ 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());
+ }
+}