X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/50567b69d60faa5a3575a077bb4f98530813c80d..e126b44d229ae637922a0532c3d11222b024c4a9:/src/unix/utilsunx.cpp diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index 23658ace65..3bd19ffbf6 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -28,6 +28,10 @@ #include "wx/stream.h" +#ifdef HAVE_STATFS + #include +#endif // HAVE_STATFS + #if wxUSE_GUI #include "wx/unix/execute.h" #endif @@ -333,6 +337,8 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data) // wxStream classes to support IO redirection in wxExecute // ---------------------------------------------------------------------------- +#if wxUSE_STREAMS + class wxProcessFileInputStream : public wxInputStream { public: @@ -429,6 +435,8 @@ size_t wxProcessFileOutputStream::OnSysWrite(const void *buffer, size_t bufsize) return ret; } +#endif // wxUSE_STREAMS + long wxExecute(wxChar **argv, bool sync, wxProcess *process) @@ -590,19 +598,21 @@ long wxExecute(wxChar **argv, // pipe initialization: construction of the wxStreams if ( process && process->IsRedirected() ) { +#if wxUSE_STREAMS // These two streams are relative to this process. wxOutputStream *outStream = new wxProcessFileOutputStream(pipeIn[1]); wxInputStream *inStream = new wxProcessFileInputStream(pipeOut[0]); wxInputStream *errStream = new wxProcessFileInputStream(pipeErr[0]); + process->SetPipeStreams(inStream, outStream, errStream); +#endif // wxUSE_STREAMS + close(pipeIn[0]); // close reading side close(pipeOut[1]); // close writing side close(pipeErr[1]); // close writing side - - process->SetPipeStreams(inStream, outStream, errStream); } -#if wxUSE_GUI +#if wxUSE_GUI && !defined(__WXMICROWIN__) wxEndProcessData *data = new wxEndProcessData; if ( sync ) @@ -903,6 +913,34 @@ long wxGetFreeMemory() return -1; } +bool wxGetDiskSpace(const wxString& path, wxLongLong *pTotal, wxLongLong *pFree) +{ +#ifdef HAVE_STATFS + + struct statfs fs; + if ( statfs(path, &fs) != 0 ) + { + wxLogSysError("Failed to get file system statistics"); + + return FALSE; + } + + if ( pTotal ) + { + *pTotal = wxLongLong(fs.f_blocks) * fs.f_bsize; + } + + if ( pFree ) + { + *pFree = wxLongLong(fs.f_bavail) * fs.f_bsize; + } + + return TRUE; +#endif // HAVE_STATFS + + return FALSE; +} + // ---------------------------------------------------------------------------- // env vars // ----------------------------------------------------------------------------