]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsunx.cpp
Declare namespace std {} before using namespace std; for MetroWerks
[wxWidgets.git] / src / unix / utilsunx.cpp
index 5a3a772e1aaee2923c462847cf7df17ebc2df229..6169570d98c6a47701e4dc55a329c4bf56373e57 100644 (file)
@@ -15,6 +15,8 @@
 // headers
 // ----------------------------------------------------------------------------
 
+#include <pwd.h>
+
 // for compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 
 #if wxUSE_BASE
 
-#if defined( __MWERKS__ ) && defined(__MACH__)
-#define WXWIN_OS_DESCRIPTION "MacOS X"
-#define HAVE_NANOSLEEP
-#define HAVE_UNAME
+#if defined(__MWERKS__) && defined(__MACH__)
+    #ifndef WXWIN_OS_DESCRIPTION
+        #define WXWIN_OS_DESCRIPTION "MacOS X"
+    #endif
+    #ifndef HAVE_NANOSLEEP
+        #define HAVE_NANOSLEEP
+    #endif
+    #ifndef HAVE_UNAME
+        #define HAVE_UNAME
+    #endif
+
+    // our configure test believes we can use sigaction() if the function is
+    // available but Metrowekrs with MSL run-time does have the function but
+    // doesn't have sigaction struct so finally we can't use it...
+    #ifdef __MSL__
+        #undef wxUSE_ON_FATAL_EXCEPTION
+        #define wxUSE_ON_FATAL_EXCEPTION 0
+    #endif
 #endif
 
 // not only the statfs syscall is called differently depending on platform, but
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
-#include <pwd.h>
 #include <errno.h>
 #include <netdb.h>
 #include <signal.h>
@@ -149,12 +164,12 @@ void wxSleep(int nSecs)
     sleep(nSecs);
 }
 
-void wxUsleep(unsigned long milliseconds)
+void wxMicroSleep(unsigned long microseconds)
 {
 #if defined(HAVE_NANOSLEEP)
     timespec tmReq;
-    tmReq.tv_sec = (time_t)(milliseconds / 1000);
-    tmReq.tv_nsec = (milliseconds % 1000) * 1000 * 1000;
+    tmReq.tv_sec = (time_t)(microseconds / 1000000);
+    tmReq.tv_nsec = (microseconds % 1000000) * 1000;
 
     // we're not interested in remaining time nor in return value
     (void)nanosleep(&tmReq, (timespec *)NULL);
@@ -167,15 +182,20 @@ void wxUsleep(unsigned long milliseconds)
         #error "usleep() cannot be used in MT programs under Solaris."
     #endif // Sun
 
-    usleep(milliseconds * 1000); // usleep(3) wants microseconds
+    usleep(microseconds);
 #elif defined(HAVE_SLEEP)
     // under BeOS sleep() takes seconds (what about other platforms, if any?)
-    sleep(milliseconds * 1000);
+    sleep(microseconds * 1000000);
 #else // !sleep function
-    #error "usleep() or nanosleep() function required for wxUsleep"
+    #error "usleep() or nanosleep() function required for wxMicroSleep"
 #endif // sleep function
 }
 
+void wxMilliSleep(unsigned long milliseconds)
+{
+    wxMicroSleep(milliseconds*1000);
+}
+
 // ----------------------------------------------------------------------------
 // process management
 // ----------------------------------------------------------------------------
@@ -928,7 +948,7 @@ bool wxSetEnv(const wxString& variable, const wxChar *value)
         s << _T('=') << value;
 
     // transform to ANSI
-    const char *p = s.mb_str();
+    const wxWX2MBbuf p = s.mb_str();
 
     // the string will be free()d by libc
     char *buf = (char *)malloc(strlen(p) + 1);
@@ -936,7 +956,7 @@ bool wxSetEnv(const wxString& variable, const wxChar *value)
 
     return putenv(buf) == 0;
 #else // no way to set an env var
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -1123,7 +1143,7 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
     }
 
 
-#if defined(__DARWIN__) && defined(__WXMAC__)
+#if defined(__DARWIN__) && (defined(__WXMAC__) || defined(__WXCOCOA__))
     endProcData->tag = wxAddProcessCallbackForPid(endProcData, execData.pid);
 #else
     endProcData->tag = wxAddProcessCallback
@@ -1133,7 +1153,7 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
                 );
 
     execData.pipeEndProcDetect.Close();
-#endif // defined(__DARWIN__) && defined(__WXMAC__)
+#endif // defined(__DARWIN__) && (defined(__WXMAC__) || defined(__WXCOCOA__))
 
     if ( execData.flags & wxEXEC_SYNC )
     {
@@ -1160,10 +1180,10 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
             }
 #endif // wxUSE_STREAMS
 
-            // don't consume 100% of the CPU while we're sitting this in this
+            // don't consume 100% of the CPU while we're sitting in this
             // loop
             if ( idle )
-                wxUsleep(1);
+                wxMilliSleep(1);
 
             // give GTK+ a chance to call GTK_EndProcessDetector here and
             // also repaint the GUI