From: Václav Slavík Date: Thu, 3 Jun 2004 20:08:43 +0000 (+0000) Subject: wxGetenv was incorrectly implemented, caching prevented it from reflecting environmen... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4772f8e1981241da445a44e589be7525fce3798c wxGetenv was incorrectly implemented, caching prevented it from reflecting environment changes -- now fixed git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27605 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/wxchar.cpp b/src/common/wxchar.cpp index e3095935c3..7184706d32 100644 --- a/src/common/wxchar.cpp +++ b/src/common/wxchar.cpp @@ -1329,36 +1329,16 @@ long WXDLLEXPORT wxAtol(const wxChar *psz) wxChar * WXDLLEXPORT wxGetenv(const wxChar *name) { - static wxHashTable env(wxKEY_STRING); - - // check if we already have stored the converted env var - wxObject *data = env.Get(name); - if (!data) - { - // nope, retrieve it, -#if wxUSE_UNICODE - wxCharBuffer buffer = wxConvLocal.cWX2MB(name); - // printf( "buffer %s\n", (const char*) buffer ); - const char *val = getenv( (const char *)buffer ); -#else - const char *val = getenv( name ); -#endif - - if (!val) return (wxChar *)NULL; - // printf( "home %s\n", val ); - - // convert it, #if wxUSE_UNICODE - data = (wxObject *)new wxString(val, wxConvLocal); + // NB: buffer returned by getenv() is allowed to be overwritten next + // time getenv() is called, so it is OK to use static string + // buffer to hold the data. + static wxWCharBuffer value((wxChar*)NULL); + value = wxConvLocal.cMB2WX(getenv(wxConvLocal.cWX2MB(name))); + return value.data(); #else - data = (wxObject *)new wxString(val); + return getenv(name); #endif - - // and store it - env.Put(name, data); - } - // return converted env var - return (wxChar *)((wxString *)data)->c_str(); } int WXDLLEXPORT wxSystem(const wxChar *psz)