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
This commit is contained in:
Václav Slavík 2004-06-03 20:08:43 +00:00
parent cf8ee08b1b
commit 4772f8e198

View File

@ -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 );
// 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
const char *val = getenv( name );
return getenv(name);
#endif
if (!val) return (wxChar *)NULL;
// printf( "home %s\n", val );
// convert it,
#if wxUSE_UNICODE
data = (wxObject *)new wxString(val, wxConvLocal);
#else
data = (wxObject *)new wxString(val);
#endif
// and store it
env.Put(name, data);
}
// return converted env var
return (wxChar *)((wxString *)data)->c_str();
}
int WXDLLEXPORT wxSystem(const wxChar *psz)