X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/930a9efaf11688070b4f92bcd65743815616bcfc..1722a3f626f7b29b42a22fc6329ce12fb5e8ed90:/src/os2/utils.cpp diff --git a/src/os2/utils.cpp b/src/os2/utils.cpp index 33d262725b..00aafc22cb 100644 --- a/src/os2/utils.cpp +++ b/src/os2/utils.cpp @@ -21,6 +21,7 @@ #include "wx/os2/private.h" #include "wx/apptrait.h" +#include "wx/filename.h" #include #ifdef __EMX__ @@ -82,7 +83,8 @@ bool wxGetHostName( wxChar* zBuf, int nMaxSize ) wxChar* zSysname; const wxChar* zDefaultHost = _T("noname"); - if ((zSysname = wxGetenv(_T("SYSTEM_NAME"))) == NULL) + if ((zSysname = wxGetenv(_T("SYSTEM_NAME"))) == NULL && + (zSysname = wxGetenv(_T("HOSTNAME"))) == NULL) { ::PrfQueryProfileString( HINI_PROFILE ,(PSZ)WX_SECTION @@ -155,7 +157,7 @@ bool wxShell( const wxString& rCommand ) SData.PgmName = (char*)zShell; sInputs = _T("/C ") + rCommand; - SData.PgmInputs = (BYTE*)sInputs.c_str(); + SData.PgmInputs = (BYTE*)sInputs.wx_str(); SData.TermQ = 0; SData.Environment = 0; SData.InheritOpt = SSF_INHERTOPT_SHELL; @@ -236,11 +238,10 @@ bool wxGetEnv(const wxString& var, wxString *value) return true; } -bool wxSetEnv(const wxString& variable, const wxChar *value) +bool wxSetEnv(const wxString& variable, const char *value) { #if defined(HAVE_SETENV) - return setenv(variable.mb_str(), value ? wxString(value).mb_str().data() - : NULL, 1 /* overwrite */) == 0; + return setenv(variable.mb_str(), value, 1 /* overwrite */) == 0; #elif defined(HAVE_PUTENV) wxString s = variable; if ( value ) @@ -261,6 +262,16 @@ bool wxSetEnv(const wxString& variable, const wxChar *value) #endif } +bool wxSetEnv(const wxString& variable, const wxString& value) +{ + return wxDoSetEnv(variable, value.mb_str()); +} + +bool wxUnsetEnv(const wxString& variable) +{ + return wxDoSetEnv(variable, NULL); +} + void wxMilliSleep( unsigned long ulMilliseconds ) @@ -438,6 +449,51 @@ wxChar* wxGetUserHome ( const wxString &rUser ) return (wxChar*)wxEmptyString; // No home known! } +bool wxGetDiskSpace(const wxString& path, + wxDiskspaceSize_t *pTotal, + wxDiskspaceSize_t *pFree) +{ + if (path.empty()) + return false; + + wxFileName fn(path); + FSALLOCATE fsaBuf = {0}; + APIRET rc = NO_ERROR; + ULONG disknum = 0; + + fn.MakeAbsolute(); + + if (wxDirExists(fn.GetFullPath()) == false) + return false; + + disknum = 1 + wxToupper(fn.GetVolume().GetChar(0)) - _T('A'); + + rc = ::DosQueryFSInfo(disknum, // 1 = A, 2 = B, 3 = C, ... + FSIL_ALLOC, // allocation info + (PVOID)&fsaBuf, + sizeof(FSALLOCATE)); + + if (rc != NO_ERROR) + return false; + else + { + if(pTotal) + { + // to try to avoid 32-bit overflow, let's not multiply right away + // (num of alloc units) + *pTotal = fsaBuf.cUnit; + // * (num of sectors per alloc unit) * (num of bytes per sector) + (*pTotal) *= fsaBuf.cSectorUnit * fsaBuf.cbSector; + } + if(pFree) + { + *pFree = fsaBuf.cUnitAvail; + (*pFree) *= fsaBuf.cSectorUnit * fsaBuf.cbSector; + } + return true; + } +} + wxString wxPMErrorToStr(ERRORID vError) { wxString sError;