]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsunx.cpp
Added clipboard sample
[wxWidgets.git] / src / unix / utilsunx.cpp
index 9a1243beb74981db64b985162731528d8f357da5..426da9a340552eb0edf3a7d5fa40620f457ecdaf 100644 (file)
@@ -542,30 +542,10 @@ long wxExecute(char **argv, int flags, wxProcess *process)
     }
     else if ( pid == 0 )  // we're in child
     {
     }
     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 )
 
 #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 )
     {
     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 )
     {
     }
 #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"));
     }
 #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
             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)
             }
         }
         //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)
     {
     *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;
     }
 
         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
        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;
     }
 
        return true;
     }