]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/gsocket.c
Fixed a crash when GetMonthControl returns NULL
[wxWidgets.git] / src / unix / gsocket.c
index 81d56e818fd4f1cdce4a11f4b535c6d77cf78f11..335fa5897a41d0cc38b1c526711fed09c8ccec49 100644 (file)
@@ -25,7 +25,8 @@
 
 #ifdef __VMS__
 #include <socket.h>
-struct sockaddr_un {
+struct sockaddr_un
+{
     u_char  sun_len;        /* sockaddr len including null */
     u_char  sun_family;     /* AF_UNIX */
     char    sun_path[108];  /* path name (gag) */
@@ -122,9 +123,9 @@ struct sockaddr_un {
 
 /* Global initialisers */
 
-bool GSocket_Init(void)
+int GSocket_Init(void)
 {
-  return TRUE;
+  return 1;
 }
 
 void GSocket_Cleanup(void)
@@ -350,7 +351,6 @@ GAddress *GSocket_GetPeer(GSocket *socket)
  */
 GSocketError GSocket_SetServer(GSocket *sck)
 {
-  int type;
   int arg = 1;
 
   assert(sck != NULL);
@@ -895,7 +895,7 @@ GSocketEventFlags GSocket_Select(GSocket *socket, GSocketEventFlags flags)
  *  Sets the socket to non-blocking mode. All IO calls will return
  *  immediately.
  */
-void GSocket_SetNonBlocking(GSocket *socket, bool non_block)
+void GSocket_SetNonBlocking(GSocket *socket, int non_block)
 {
   assert(socket != NULL);
 
@@ -1042,10 +1042,10 @@ GSocketError _GSocket_Input_Timeout(GSocket *socket)
     if (ret == -1)
     {
       GSocket_Debug(( "GSocket_Input_Timeout, select returned -1\n" ));
-      if (errno == EBADF) GSocket_Debug(( "Invalid file descriptor\n" ));
-      if (errno == EINTR) GSocket_Debug(( "A non blocked signal was caught\n" ));
-      if (errno == EINVAL) GSocket_Debug(( "The highest number descriptor is negative\n" ));
-      if (errno == ENOMEM) GSocket_Debug(( "Not enough memory\n" ));
+      if (errno == EBADF) { GSocket_Debug(( "Invalid file descriptor\n" )); }
+      if (errno == EINTR) { GSocket_Debug(( "A non blocked signal was caught\n" )); }
+      if (errno == EINVAL) { GSocket_Debug(( "The highest number descriptor is negative\n" )); }
+      if (errno == ENOMEM) { GSocket_Debug(( "Not enough memory\n" )); }
       socket->m_error = GSOCK_TIMEDOUT;
       return GSOCK_TIMEDOUT;
     }
@@ -1083,17 +1083,19 @@ GSocketError _GSocket_Output_Timeout(GSocket *socket)
     if (ret == -1)
     {
       GSocket_Debug(( "GSocket_Output_Timeout, select returned -1\n" ));
-      if (errno == EBADF) GSocket_Debug(( "Invalid file descriptor\n" ));
-      if (errno == EINTR) GSocket_Debug(( "A non blocked signal was caught\n" ));
-      if (errno == EINVAL) GSocket_Debug(( "The highest number descriptor is negative\n" ));
-      if (errno == ENOMEM) GSocket_Debug(( "Not enough memory\n" ));
+      if (errno == EBADF) { GSocket_Debug(( "Invalid file descriptor\n" )); }
+      if (errno == EINTR) { GSocket_Debug(( "A non blocked signal was caught\n" )); }
+      if (errno == EINVAL) { GSocket_Debug(( "The highest number descriptor is negative\n" )); }
+      if (errno == ENOMEM) { GSocket_Debug(( "Not enough memory\n" )); }
       socket->m_error = GSOCK_TIMEDOUT;
       return GSOCK_TIMEDOUT;
     }
-    if ( ! FD_ISSET(socket->m_fd, &writefds) )
-      GSocket_Debug(( "GSocket_Output_Timeout is buggy!\n" ));
-    else
-      GSocket_Debug(( "GSocket_Output_Timeout seems correct\n" ));
+    if ( ! FD_ISSET(socket->m_fd, &writefds) ) {
+        GSocket_Debug(( "GSocket_Output_Timeout is buggy!\n" ));
+    }
+    else {
+        GSocket_Debug(( "GSocket_Output_Timeout seems correct\n" ));
+    }
   }
   else
   {
@@ -1499,7 +1501,9 @@ GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port,
   se = getservbyname(port, protocol);
   if (!se)
   {
-    if (isdigit(port[0]))
+    /* the cast to int suppresses compiler warnings about subscript having the
+       type char */
+    if (isdigit((int)port[0]))
     {
       int port_int;
 
@@ -1603,6 +1607,8 @@ GSocketError _GAddress_Init_UNIX(GAddress *address)
   return GSOCK_NOERROR;
 }
 
+#define UNIX_SOCK_PATHLEN (sizeof(addr->sun_path)/sizeof(addr->sun_path[0]))
+
 GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path)
 {
   struct sockaddr_un *addr;
@@ -1612,7 +1618,8 @@ GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path)
   CHECK_ADDRESS(address, UNIX); 
 
   addr = ((struct sockaddr_un *)address->m_addr);
-  memcpy(addr->sun_path, path, strlen(path));
+  strncpy(addr->sun_path, path, UNIX_SOCK_PATHLEN);
+  addr->sun_path[UNIX_SOCK_PATHLEN - 1] = '\0';
 
   return GSOCK_NOERROR;
 }