# # # patch "configure.ac" # from [f6ee4972b37ed8b9c2f38c876f6c21dd548d8c3f] # to [269ed560b6514637cbf6e1d8aba802e7bf1ab7cd] # # patch "tester.cc" # from [8f350ea6cc46c5e7d78253028c9ac33e0206bcc5] # to [a7a2a1ecb40d6d77167cd62f8240fd7394fb7bdb] # ============================================================ --- configure.ac f6ee4972b37ed8b9c2f38c876f6c21dd548d8c3f +++ configure.ac 269ed560b6514637cbf6e1d8aba802e7bf1ab7cd @@ -115,8 +115,9 @@ AC_FUNC_LOCALE_WORKS AC_FUNC_STAT AC_FUNC_MMAP AC_FUNC_LOCALE_WORKS -AC_CHECK_FUNCS([atexit memset mkstemp setenv strptime lrint \ - __cxa_current_exception_type __cxa_demangle]) +AC_CHECK_FUNCS([atexit memset mkstemp strptime lrint \ + __cxa_current_exception_type __cxa_demangle \ + putenv setenv unsetenv]) # simple library checks AC_SEARCH_LIBS([deflate], [z], , AC_MSG_FAILURE([zlib is required])) ============================================================ --- tester.cc 8f350ea6cc46c5e7d78253028c9ac33e0206bcc5 +++ tester.cc a7a2a1ecb40d6d77167cd62f8240fd7394fb7bdb @@ -77,39 +77,36 @@ bool make_accessible(string const &name) #include -#if defined(WIN32) && !defined(__MINGW32__) -void setenv(char const * var, char const * val) + +void set_env(char const * var, char const * val) { - _putenv_s(var, val); -} -int unsetenv(char const * var) -{ - _putenv_s(var, ""); -} +#if defined(WIN32) + SetEnvironmentVariable(var, val); +#elif defined(HAVE_SETENV) + setenv(var, val, 1); +#elif defined(HAVE_PUTENV) + // note: this leaks memory, but the tester is short lived so it probably + // doesn't matter much. + string * tempstr = new string(var); + tempstr += '='; + tempstr += val; + putenv(tempstr.c_str()); #else -void setenv(char const * var, char const * val) -{ - string tempstr = string(var) + "=" + string(val); - char const *s = tempstr.c_str(); - size_t len = tempstr.size() + 1; - char *cp = new char[len]; - memcpy(cp, s, len); - putenv(cp); +#error set_env needs to be ported to this platform +#endif } -#if defined(__APPLE__) -void unsetenv(char const * var) + +void unset_env(char const * var) +{ +#if defined(WIN32) + SetEnvironmentVariable(var, 0); +#elif defined(HAVE_UNSETENV) + unsetenv(var); #else -int unsetenv(char const * var) +#error unset_env needs to be ported to this platform #endif -{ - string tempstr = string(var) + "="; - char const *s = tempstr.c_str(); - size_t len = tempstr.size() + 1; - char *cp = new char[len]; - memcpy(cp, s, len); - putenv(cp); } -#endif + map orig_env_vars; @@ -425,7 +422,7 @@ LUAEXT(restore_env, ) { for (map::const_iterator i = orig_env_vars.begin(); i != orig_env_vars.end(); ++i) - setenv(i->first.c_str(), i->second.c_str()); + set_env(i->first.c_str(), i->second.c_str()); orig_env_vars.clear(); return 0; } @@ -441,12 +438,10 @@ LUAEXT(set_env, ) else orig_env_vars.insert(make_pair(string(var), "")); } - setenv(var, val); + set_env(var, val); return 0; } -// #if'd out because unsetenv() doesn't exist everywhere. -#if 0 LUAEXT(unset_env, ) { char const * var = luaL_checkstring(L, -1); @@ -457,10 +452,9 @@ LUAEXT(unset_env, ) else orig_env_vars.insert(make_pair(string(var), "")); } - unsetenv(var); + unset_env(var); return 0; } -#endif LUAEXT(timed_wait, ) {