X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/90a77e64841dfcaf37103b6411987402739baa0b..fde87a82768ea971a9832e39d87137100e382422:/src/os2/utils.cpp diff --git a/src/os2/utils.cpp b/src/os2/utils.cpp index 00aafc22cb..14d2c6b3e1 100644 --- a/src/os2/utils.cpp +++ b/src/os2/utils.cpp @@ -226,7 +226,7 @@ unsigned long wxGetProcessId() bool wxGetEnv(const wxString& var, wxString *value) { // wxGetenv is defined as getenv() - wxChar *p = wxGetenv(var); + wxChar *p = wxGetenv((const wxChar *)var); if ( !p ) return false; @@ -238,9 +238,17 @@ bool wxGetEnv(const wxString& var, wxString *value) return true; } -bool wxSetEnv(const wxString& variable, const char *value) +static bool wxDoSetEnv(const wxString& variable, const char *value) { #if defined(HAVE_SETENV) + if ( !value ) + { +#ifdef HAVE_UNSETENV + return unsetenv(variable.mb_str()) == 0; +#else + value = _T(""); // mustn't pass NULL to setenv() +#endif + } return setenv(variable.mb_str(), value, 1 /* overwrite */) == 0; #elif defined(HAVE_PUTENV) wxString s = variable; @@ -394,59 +402,45 @@ const wxChar* wxGetHomeDir( return rStrDir.c_str(); } -// Hack for OS/2 -#if wxUSE_UNICODE -const wxMB2WXbuf wxGetUserHome( const wxString &rUser ) -#else // just for binary compatibility -- there is no 'const' here -wxChar* wxGetUserHome ( const wxString &rUser ) -#endif +wxString wxGetUserHome ( const wxString &rUser ) { wxChar* zHome; - wxString sUser1(rUser); + wxString sUser(rUser); + + wxString home; - wxChar *wxBuffer = new wxChar[256]; #ifndef __EMX__ - if (!sUser1.empty()) + if (!sUser.empty()) { - wxChar zTmp[64]; + const wxString currentUser = wxGetUserId(); - if (wxGetUserId( zTmp - ,sizeof(zTmp)/sizeof(char) - )) + // Guests belong in the temp dir + if ( currentUser == "annonymous" ) { - // Guests belong in the temp dir - if (wxStricmp(zTmp, _T("annonymous")) == 0) - { - if ((zHome = wxGetenv(_T("TMP"))) != NULL || - (zHome = wxGetenv(_T("TMPDIR"))) != NULL || - (zHome = wxGetenv(_T("TEMP"))) != NULL) - delete[] wxBuffer; - return *zHome ? zHome : (wxChar*)_T("\\"); - } - if (wxStricmp(zTmp, WXSTRINGCAST sUser1) == 0) - sUser1 = wxEmptyString; + zHome = wxGetenv(_T("TMP")); + if ( !zHome ) + zHome = wxGetenv(_T("TMPDIR")); + if ( !zHome ) + zHome = wxGetenv(_T("TEMP")); + + if ( zHome && *zHome ) + return zHome; } + + if ( sUser == currentUser ) + sUser.clear(); } #endif - if (sUser1.empty()) + if (sUser.empty()) { if ((zHome = wxGetenv(_T("HOME"))) != NULL) { - wxStrcpy(wxBuffer, zHome); - wxUnix2DosFilename(wxBuffer); -#if wxUSE_UNICODE - wxWCharBuffer retBuffer (wxBuffer); - delete[] wxBuffer; - return retBuffer; -#else - wxStrcpy(zHome, wxBuffer); - delete[] wxBuffer; - return zHome; -#endif + home = zHome; + home.Replace("/", "\\"); } } - delete[] wxBuffer; - return (wxChar*)wxEmptyString; // No home known! + + return home; } bool wxGetDiskSpace(const wxString& path, @@ -466,7 +460,7 @@ bool wxGetDiskSpace(const wxString& path, if (wxDirExists(fn.GetFullPath()) == false) return false; - disknum = 1 + wxToupper(fn.GetVolume().GetChar(0)) - _T('A'); + disknum = wxToupper(fn.GetVolume().GetChar(0)) - _T('A') + 1; rc = ::DosQueryFSInfo(disknum, // 1 = A, 2 = B, 3 = C, ... FSIL_ALLOC, // allocation info