X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/05df0f1bc76be62a464a6b7dec10a35c2019b990..8a9c20b016d88b85db8a1f564a2249057db0ca77:/src/unix/utilsunx.cpp diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index 2447a559fd..2c375b2edb 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -15,6 +15,8 @@ // headers // ---------------------------------------------------------------------------- +#include + // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -44,9 +46,24 @@ #if wxUSE_BASE -#if defined( __MWERKS__ ) && defined(__MACH__) -#define WXWIN_OS_DESCRIPTION "MacOS X" -#define HAVE_NANOSLEEP +#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 @@ -89,7 +106,6 @@ #include #include #include -#include #include #include #include @@ -148,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); @@ -166,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 // ---------------------------------------------------------------------------- @@ -507,7 +528,9 @@ long wxExecute(wxChar **argv, // start an xterm executing it. if ( !(flags & wxEXEC_SYNC) ) { - for ( int fd = 0; fd < FD_SETSIZE; fd++ ) + // FD_SETSIZE is unsigned under BSD, signed under other platforms + // so we need a cast to avoid warnings on all platforms + for ( int fd = 0; fd < (int)FD_SETSIZE; fd++ ) { if ( fd == pipeIn[wxPipe::Read] || fd == pipeOut[wxPipe::Write] @@ -925,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); @@ -933,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 } @@ -1157,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