X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fac3b4232c5a2fa84f11897f4851d0a0e8a17755..567f21d2cd0a33e16ee08796e2b0e776b51db1bf:/src/unix/utilsunx.cpp diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index ad8a078fab..77d6e83d38 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 @@ -294,17 +298,33 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data) } while ( rc == -1 && errno == EINTR ); - - if( rc == -1 || ! (WIFEXITED(status) || WIFSIGNALED(status)) ) + if (rc == -1) + { + // JACS: this could happen if the process was terminated and waitpid called, + // so commenting out for now. + //wxLogSysError(_("Waiting for subprocess termination failed (return code = -1)")); + } + else if (! (WIFEXITED(status))) { - wxLogSysError(_("Waiting for subprocess termination failed")); + wxLogSysError(_("Waiting for subprocess termination failed (WIFEXITED returned zero)")); + /* AFAIK, this can only happen if something went wrong within wxGTK, i.e. due to a race condition or some serious bug. After having fixed the order of statements in GTK_EndProcessDetector(). (KB) */ } - else + else if (WIFSIGNALED(status)) + { + wxLogSysError(_("Waiting for subprocess termination failed (signal not caught)")); + + /* AFAIK, this can only happen if something went wrong within + wxGTK, i.e. due to a race condition or some serious bug. + After having fixed the order of statements in + GTK_EndProcessDetector(). (KB) + */ + } + // else { // notify user about termination if required if (proc_data->process) @@ -909,6 +929,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 // ----------------------------------------------------------------------------