X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/37ab9399a8f77289e29301bc665cc92b3a617d75..f0a9a84c09e9c8a85617536d62400c469b6cc62c:/src/unix/baseunix.cpp diff --git a/src/unix/baseunix.cpp b/src/unix/baseunix.cpp index f675818f43..c5e3ddcee1 100644 --- a/src/unix/baseunix.cpp +++ b/src/unix/baseunix.cpp @@ -33,6 +33,7 @@ #include "wx/apptrait.h" #include "wx/unix/execute.h" #include "wx/evtloop.h" +#include "wx/gsocket.h" #include "wx/unix/private/timer.h" @@ -44,41 +45,31 @@ // wxConsoleAppTraits implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// wxExecute support -// ---------------------------------------------------------------------------- - -bool wxConsoleAppTraits::CreateEndProcessPipe(wxExecuteData& WXUNUSED(data)) -{ - // nothing to do, so always ok - return true; -} - -bool -wxConsoleAppTraits::IsWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data), - int WXUNUSED(fd)) -{ - // we don't have any pipe - return false; -} - -void -wxConsoleAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data)) -{ - // nothing to do -} - - int wxConsoleAppTraits::WaitForChild(wxExecuteData& execData) { - wxASSERT_MSG( execData.flags & wxEXEC_SYNC, - wxT("async execution not supported yet") ); - int exitcode = 0; - if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) ) + if ( execData.flags & wxEXEC_SYNC ) + { + if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) ) + { + wxLogSysError(_("Waiting for subprocess termination failed")); + } + } + else // asynchronous execution { - wxLogSysError(_("Waiting for subprocess termination failed")); + wxEndProcessData *endProcData = new wxEndProcessData; + endProcData->process = execData.process; + endProcData->pid = execData.pid; + endProcData->tag = wxAddProcessCallback + ( + endProcData, + execData.pipeEndProcDetect.Detach(wxPipe::Read) + ); + + execData.pipeEndProcDetect.Close(); + exitcode = execData.pid; + } return exitcode;