]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsunx.cpp
added wxTreeEvent::GetKeyEvent() to allow to retrieve the key event flags from EVT_TR...
[wxWidgets.git] / src / unix / utilsunx.cpp
index ad8a078fabd6c6d96e2bf1a4e514748e168e4634..1f09b3d44830d3272d576f533ff1a3ace6b2e185 100644 (file)
 
 #include "wx/stream.h"
 
+#ifdef HAVE_STATFS
+    #include <sys/vfs.h>
+#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)
     {
-       wxLogSysError(_("Waiting for subprocess termination failed"));
+        // 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 (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)
@@ -586,6 +606,13 @@ long wxExecute(wxChar **argv,
 
         // there is no return after successful exec()
         _exit(-1);
+
+        // some compilers complain about missing return - of course, they
+        // should know that exit() doesn't return but what else can we do if
+        // they don't?
+#if defined(__VMS) || defined(__INTEL_COMPILER)
+        return 0;
+#endif
     }
     else // we're in parent
     {
@@ -661,13 +688,6 @@ long wxExecute(wxChar **argv,
         return exitcode;
 #endif // wxUSE_GUI
     }
-#ifdef __VMS
-   // VMS does not recognise exit as a return and complains about
-   // a missing return
-   // I think VMS is wrong in this
-   //     JJ
-   return 0;
-#endif
 }
 
 #undef ERROR_RETURN_CODE
@@ -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
 // ----------------------------------------------------------------------------