X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/82db3c3d9d42c3a30fb023df5d9659cb773cdf87..74be3634b94f3febb0147cde99580e0344b8e74d:/src/unix/utilsunx.cpp?ds=sidebyside diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index 9a1243beb7..a5c3221bb2 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: src/unix/utilsunx.cpp -// Purpose: generic Unix implementation of many wx functions +// Purpose: generic Unix implementation of many wx functions (for wxBase) // Author: Vadim Zeitlin // Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Vadim Zeitlin @@ -542,30 +542,10 @@ long wxExecute(char **argv, int flags, wxProcess *process) } else if ( pid == 0 ) // we're in child { - // These lines close the open file descriptors to to avoid any - // input/output which might block the process or irritate the user. If - // one wants proper IO for the subprocess, the right thing to do is to - // start an xterm executing it. - if ( !(flags & wxEXEC_SYNC) ) - { - // 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] - || fd == pipeErr[wxPipe::Write] - || fd == (execData.pipeEndProcDetect)[wxPipe::Write] ) - { - // don't close this one, we still need it - continue; - } - - // leave stderr opened too, it won't do any harm - if ( fd != STDERR_FILENO ) - close(fd); - } - } + // NB: we used to close all the unused descriptors of the child here + // but this broke some programs which relied on e.g. FD 1 being + // always opened so don't do it any more, after all there doesn't + // seem to be any real problem with keeping them opened #if !defined(__VMS) && !defined(__EMX__) if ( flags & wxEXEC_MAKE_GROUP_LEADER ) @@ -777,16 +757,14 @@ static bool wxGetHostNameInternal(wxChar *buf, int sz) bool ok = uname(&uts) != -1; if ( ok ) { - wxStrncpy(buf, wxSafeConvertMB2WX(uts.nodename), sz - 1); - buf[sz] = wxT('\0'); + wxStrlcpy(buf, wxSafeConvertMB2WX(uts.nodename), sz); } #elif defined(HAVE_GETHOSTNAME) char cbuf[sz]; bool ok = gethostname(cbuf, sz) != -1; if ( ok ) { - wxStrncpy(buf, wxSafeConvertMB2WX(cbuf), sz - 1); - buf[sz] = wxT('\0'); + wxStrlcpy(buf, wxSafeConvertMB2WX(cbuf), sz); } #else // no uname, no gethostname wxFAIL_MSG(wxT("don't know host name for this machine")); @@ -839,7 +817,7 @@ bool wxGetFullHostName(wxChar *buf, int sz) else { // the canonical name - wxStrncpy(buf, wxSafeConvertMB2WX(host->h_name), sz); + wxStrlcpy(buf, wxSafeConvertMB2WX(host->h_name), sz); } } //else: it's already a FQDN (BSD behaves this way) @@ -855,7 +833,7 @@ bool wxGetUserId(wxChar *buf, int sz) *buf = wxT('\0'); if ((who = getpwuid(getuid ())) != NULL) { - wxStrncpy (buf, wxSafeConvertMB2WX(who->pw_name), sz - 1); + wxStrlcpy (buf, wxSafeConvertMB2WX(who->pw_name), sz); return true; } @@ -873,7 +851,7 @@ bool wxGetUserName(wxChar *buf, int sz) char *comma = strchr(who->pw_gecos, ','); if (comma) *comma = '\0'; // cut off non-name comment fields - wxStrncpy (buf, wxSafeConvertMB2WX(who->pw_gecos), sz - 1); + wxStrlcpy(buf, wxSafeConvertMB2WX(who->pw_gecos), sz); return true; } @@ -893,7 +871,7 @@ bool wxIsPlatform64Bit() machine.Contains(wxT("alpha")); } -// these functions are in mac/utils.cpp for wxMac +// these functions are in src/osx/utilsexc_base.cpp for wxMac #ifndef __WXMAC__ wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin)