]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsunx.cpp
fixed wxSetEnv to correctly set variable in Unicode build
[wxWidgets.git] / src / unix / utilsunx.cpp
index 8709321cf182e41318b085dbf1d1e30336b5746a..bf7dc8d178f09c91650d805fa394875487f10469 100644 (file)
@@ -47,6 +47,7 @@
 #if defined( __MWERKS__ ) && defined(__MACH__)
 #define WXWIN_OS_DESCRIPTION "MacOS X"
 #define HAVE_NANOSLEEP
 #if defined( __MWERKS__ ) && defined(__MACH__)
 #define WXWIN_OS_DESCRIPTION "MacOS X"
 #define HAVE_NANOSLEEP
+#define HAVE_UNAME
 #endif
 
 // not only the statfs syscall is called differently depending on platform, but
 #endif
 
 // not only the statfs syscall is called differently depending on platform, but
@@ -507,7 +508,9 @@ long wxExecute(wxChar **argv,
         // start an xterm executing it.
         if ( !(flags & wxEXEC_SYNC) )
         {
         // start an xterm executing it.
         if ( !(flags & wxEXEC_SYNC) )
         {
-            for ( int fd = 0; fd < FD_SETSIZE; fd++ )
+            // 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]
             {
                 if ( fd == pipeIn[wxPipe::Read]
                         || fd == pipeOut[wxPipe::Write]
@@ -925,7 +928,7 @@ bool wxSetEnv(const wxString& variable, const wxChar *value)
         s << _T('=') << value;
 
     // transform to ANSI
         s << _T('=') << value;
 
     // transform to ANSI
-    const char *p = s.mb_str();
+    const wxWX2MBbuf p = s.mb_str();
 
     // the string will be free()d by libc
     char *buf = (char *)malloc(strlen(p) + 1);
 
     // the string will be free()d by libc
     char *buf = (char *)malloc(strlen(p) + 1);
@@ -933,7 +936,7 @@ bool wxSetEnv(const wxString& variable, const wxChar *value)
 
     return putenv(buf) == 0;
 #else // no way to set an env var
 
     return putenv(buf) == 0;
 #else // no way to set an env var
-    return FALSE;
+    return false;
 #endif
 }
 
 #endif
 }
 
@@ -1141,14 +1144,27 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
         // process terminates
         while ( endProcData->pid != 0 )
         {
         // process terminates
         while ( endProcData->pid != 0 )
         {
+            bool idle = true;
+
 #if wxUSE_STREAMS
             if ( execData.bufOut )
 #if wxUSE_STREAMS
             if ( execData.bufOut )
+            {
                 execData.bufOut->Update();
                 execData.bufOut->Update();
+                idle = false;
+            }
 
             if ( execData.bufErr )
 
             if ( execData.bufErr )
+            {
                 execData.bufErr->Update();
                 execData.bufErr->Update();
+                idle = false;
+            }
 #endif // wxUSE_STREAMS
 
 #endif // wxUSE_STREAMS
 
+            // don't consume 100% of the CPU while we're sitting this in this
+            // loop
+            if ( idle )
+                wxUsleep(1);
+
             // give GTK+ a chance to call GTK_EndProcessDetector here and
             // also repaint the GUI
             wxYield();
             // give GTK+ a chance to call GTK_EndProcessDetector here and
             // also repaint the GUI
             wxYield();
@@ -1189,5 +1205,4 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data)
     }
 }
 
     }
 }
 
-
 #endif // wxUSE_BASE
 #endif // wxUSE_BASE