1 ///////////////////////////////////////////////////////////////////////////////
2 // Name:        src/unix/baseunix.cpp
3 // Purpose:     misc stuff only used in console applications under Unix
4 // Author:      Vadim Zeitlin
5 // Modified by:
6 // Created:     23.06.2003
7 // RCS-ID:      $Id: baseunix.cpp 40599 2006-08-13 21:00:32Z VZ $
8 // Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
9 // License:     wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11 
12 // ============================================================================
13 // declarations
14 // ============================================================================
15 
16 // ----------------------------------------------------------------------------
17 // headers
18 // ----------------------------------------------------------------------------
19 
20 // for compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
22 
23 #ifdef __BORLANDC__
24     #pragma hdrstop
25 #endif
26 
27 #ifndef WX_PRECOMP
28     #include "wx/log.h"
29     #include "wx/intl.h"
30     #include "wx/utils.h"
31 #endif //WX_PRECOMP
32 
33 #include "wx/apptrait.h"
34 #include "wx/unix/execute.h"
35 
36 // for waitpid()
37 #include <sys/types.h>
38 #include <sys/wait.h>
39 
40 // ============================================================================
41 // wxConsoleAppTraits implementation
42 // ============================================================================
43 
44 // ----------------------------------------------------------------------------
45 // wxExecute support
46 // ----------------------------------------------------------------------------
47 
CreateEndProcessPipe(wxExecuteData & WXUNUSED (data))48 bool wxConsoleAppTraits::CreateEndProcessPipe(wxExecuteData& WXUNUSED(data))
49 {
50     // nothing to do, so always ok
51     return true;
52 }
53 
54 bool
IsWriteFDOfEndProcessPipe(wxExecuteData & WXUNUSED (data),int WXUNUSED (fd))55 wxConsoleAppTraits::IsWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data),
56                                               int WXUNUSED(fd))
57 {
58     // we don't have any pipe
59     return false;
60 }
61 
62 void
DetachWriteFDOfEndProcessPipe(wxExecuteData & WXUNUSED (data))63 wxConsoleAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data))
64 {
65     // nothing to do
66 }
67 
68 
69 int
WaitForChild(wxExecuteData & execData)70 wxConsoleAppTraits::WaitForChild(wxExecuteData& execData)
71 {
72     wxASSERT_MSG( execData.flags & wxEXEC_SYNC,
73                   wxT("async execution not supported yet") );
74 
75     int exitcode = 0;
76     if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) )
77     {
78         wxLogSysError(_("Waiting for subprocess termination failed"));
79     }
80 
81     return exitcode;
82 }
83 
84