X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1012c2ceb610f2ee9339bb95193596038ea5c443..5f3565a2fb3d678b03cf8547f37e56b1efe786f5:/src/unix/utilsunx.cpp diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index 9d7034dda6..6115ef3330 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,10 +46,24 @@ #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 @@ -90,7 +106,6 @@ #include #include #include -#include #include #include #include @@ -185,9 +200,12 @@ void wxMilliSleep(unsigned long milliseconds) // process management // ---------------------------------------------------------------------------- -int wxKill(long pid, wxSignal sig, wxKillError *rc) +int wxKill(long pid, wxSignal sig, wxKillError *rc, int flags) { - int err = kill((pid_t)pid, (int)sig); + int err = kill((pid_t) (flags & wxKILL_CHILDREN) ? -pid : pid, (int)sig); + if ( !err ) + *rc = wxKILL_OK; + else if ( rc ) { switch ( errno ) @@ -822,11 +840,20 @@ bool wxGetUserName(wxChar *buf, int sz) wxString wxGetOsDescription() { -#ifndef WXWIN_OS_DESCRIPTION - #error WXWIN_OS_DESCRIPTION should be defined in config.h by configure -#else - return wxString::FromAscii( WXWIN_OS_DESCRIPTION ); -#endif + FILE *f = popen("uname -s -r -m", "r"); + if (f) + { + char buf[256]; + size_t c = fread(buf, 1, sizeof(buf) - 1, f); + pclose(f); + // Trim newline from output. + if (c && buf[c - 1] == '\n') + --c; + buf[c] = '\0'; + return wxString::FromAscii( buf ); + } + wxFAIL_MSG( _T("uname failed") ); + return _T(""); } #endif // !__WXMAC__ @@ -1128,7 +1155,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 @@ -1138,7 +1165,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 ) {