- string const encoded = to_local8bit(from_utf8(value));
-#if defined (HAVE_SETENV)
- return ::setenv(name.c_str(), encoded.c_str(), true) == 0;
-#endif
-
-#if defined (HAVE_PUTENV)
- static std::map<string, char *> varmap;
-
- string envstr = name + '=' + encoded;
- char * newptr = new char[envstr.size() + 1];
- envstr.copy(newptr, envstr.length());
- newptr[envstr.length()] = '\0';
- int const retval = ::putenv(newptr);
-
- char * oldptr = varmap[name];
- if (oldptr)
- delete oldptr;
- varmap[name] = newptr;
- return retval == 0;
-#endif