X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..3c86150dd768b4e490b603227de28aa57275ee4b:/src/common/wxchar.cpp diff --git a/src/common/wxchar.cpp b/src/common/wxchar.cpp index 368d4bf9fb..b7e5c75272 100644 --- a/src/common/wxchar.cpp +++ b/src/common/wxchar.cpp @@ -604,23 +604,23 @@ int WXDLLEXPORT wxSnprintf_(wxChar *buf, size_t len, const wxChar *format, ...) // implement the standard IO functions for wide char if libc doesn't have them // ---------------------------------------------------------------------------- -#ifdef wxNEED_FPUTWC - +#ifdef wxNEED_FPUTS int wxFputs(const wchar_t *ws, FILE *stream) { // counting the number of wide characters written isn't worth the trouble, // simply distinguish between ok and error return fputs(wxConvLibc.cWC2MB(ws), stream) == -1 ? -1 : 0; } +#endif // wxNEED_FPUTS +#ifdef wxNEED_PUTC int /* not wint_t */ wxPutc(wchar_t wc, FILE *stream) { wchar_t ws[2] = { wc, L'\0' }; return wxFputs(ws, stream); } - -#endif // wxNEED_FPUTWC +#endif // wxNEED_PUTC // NB: we only implement va_list functions here, the ones taking ... are // defined below for wxNEED_PRINTF_CONVERSION case anyhow and we reuse @@ -1329,36 +1329,16 @@ long WXDLLEXPORT wxAtol(const wxChar *psz) wxChar * WXDLLEXPORT wxGetenv(const wxChar *name) { - static wxHashTable env; - - // 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)