]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsunx.cpp
1. some fixes for the problems reported by BoundsChecker
[wxWidgets.git] / src / unix / utilsunx.cpp
index 2082e6bca195d3e70a89d1743ea1578be81918df..3b09340becb2edae82448469af9a0f83d3973a86 100644 (file)
@@ -25,7 +25,9 @@
 #include "wx/process.h"
 #include "wx/thread.h"
 
-#include "wx/unix/execute.h"
+#if wxUSE_GUI
+    #include "wx/unix/execute.h"
+#endif
 
 #include <stdarg.h>
 #include <dirent.h>
@@ -41,9 +43,7 @@
 #include <fcntl.h>          // for O_WRONLY and friends
 #include <time.h>           // nanosleep() and/or usleep()
 #include <ctype.h>          // isspace()
-
-// JACS: needed for FD_SETSIZE
-#include <sys/time.h>
+#include <sys/time.h>       // needed for FD_SETSIZE
 
 #ifdef HAVE_UNAME
     #include <sys/utsname.h> // for uname()
@@ -97,14 +97,14 @@ void wxSleep(int nSecs)
 
 void wxUsleep(unsigned long milliseconds)
 {
-#ifdef HAVE_NANOSLEEP
+#if defined(HAVE_NANOSLEEP)
     timespec tmReq;
-    tmReq.tv_sec = milliseconds / 1000;
+    tmReq.tv_sec = (time_t)(milliseconds / 1000);
     tmReq.tv_nsec = (milliseconds % 1000) * 1000 * 1000;
 
     // we're not interested in remaining time nor in return value
     (void)nanosleep(&tmReq, (timespec *)NULL);
-#elif defined( HAVE_USLEEP )
+#elif defined(HAVE_USLEEP)
     // uncomment this if you feel brave or if you are sure that your version
     // of Solaris has a safe usleep() function but please notice that usleep()
     // is known to lead to crashes in MT programs in Solaris 2.[67] and is not
@@ -114,6 +114,9 @@ void wxUsleep(unsigned long milliseconds)
     #endif // Sun
 
     usleep(milliseconds * 1000); // usleep(3) wants microseconds
+#elif defined(HAVE_SLEEP)
+    // under BeOS sleep() takes seconds (what about other platforms, if any?)
+    sleep(milliseconds * 1000);
 #else // !sleep function
     #error "usleep() or nanosleep() function required for wxUsleep"
 #endif // sleep function
@@ -125,7 +128,7 @@ void wxUsleep(unsigned long milliseconds)
 
 int wxKill(long pid, wxSignal sig)
 {
-    return kill(pid, (int)sig);
+    return kill((pid_t)pid, (int)sig);
 }
 
 #define WXEXECUTE_NARGS   127
@@ -211,6 +214,8 @@ bool wxShell(const wxString& command)
     return wxExecute(cmd) != 0;
 }
 
+#if wxUSE_GUI
+
 void wxHandleProcessTermination(wxEndProcessData *proc_data)
 {
     int pid = (proc_data->pid > 0) ? proc_data->pid : -(proc_data->pid);
@@ -261,7 +266,17 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data)
     }
 }
 
-long wxExecute( wxChar **argv, bool sync, wxProcess *process )
+#endif // wxUSE_GUI
+
+#if wxUSE_GUI
+    #define WXUNUSED_UNLESS_GUI(p)  p
+#else
+    #define WXUNUSED_UNLESS_GUI(p)
+#endif
+
+long wxExecute(wxChar **argv,
+               bool sync,
+               wxProcess * WXUNUSED_UNLESS_GUI(process))
 {
     wxCHECK_MSG( *argv, 0, wxT("can't exec empty command") );
 
@@ -363,7 +378,6 @@ long wxExecute( wxChar **argv, bool sync, wxProcess *process )
 #if wxUSE_GUI
         wxEndProcessData *data = new wxEndProcessData;
 
-
         ARGS_CLEANUP;
 
         if ( sync )
@@ -566,18 +580,19 @@ bool wxGetUserId(wxChar *buf, int sz)
 bool wxGetUserName(wxChar *buf, int sz)
 {
     struct passwd *who;
-    char *comma;
 
     *buf = wxT('\0');
-    if ((who = getpwuid (getuid ())) != NULL) {
-#ifndef __VMS__
-       comma = strchr(who->pw_gecos, ',');
+    if ((who = getpwuid (getuid ())) != NULL)
+    {
+        // pw_gecos field in struct passwd is not standard
+#if HAVE_PW_GECOS
+       char *comma = strchr(who->pw_gecos, ',');
        if (comma)
            *comma = '\0'; // cut off non-name comment fields
        wxStrncpy (buf, wxConvertMB2WX(who->pw_gecos), sz - 1);
-#else
+#else // !HAVE_PW_GECOS
        wxStrncpy (buf, wxConvertMB2WX(who->pw_name), sz - 1);
-#endif
+#endif // HAVE_PW_GECOS/!HAVE_PW_GECOS
        return TRUE;
     }