// 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>
// 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 )
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__
}
-#if defined(__DARWIN__) && defined(__WXMAC__)
+#if defined(__DARWIN__) && (defined(__WXMAC__) || defined(__WXCOCOA__))
endProcData->tag = wxAddProcessCallbackForPid(endProcData, execData.pid);
#else
endProcData->tag = wxAddProcessCallback
);
execData.pipeEndProcDetect.Close();
-#endif // defined(__DARWIN__) && defined(__WXMAC__)
+#endif // defined(__DARWIN__) && (defined(__WXMAC__) || defined(__WXCOCOA__))
if ( execData.flags & wxEXEC_SYNC )
{
}
#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