]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/gsocket.c
mingw32 compilation fixes
[wxWidgets.git] / src / unix / gsocket.c
index 004f6c38dd935ffa5cc2fe521789502f0e479d25..d22b5bf23fe8ae42bff2c1dc4db62d65e6bc0d76 100644 (file)
 #include <sys/types.h>
 #include <netdb.h>
 #include <sys/ioctl.h>
-#ifdef vms
+#ifdef __VMS__
+#define SOCK_LEN_TYP (unsigned int*)
 #include <socket.h>
+struct sockaddr_un {
+       u_char  sun_len;                /* sockaddr len including null */
+       u_char  sun_family;             /* AF_UNIX */
+       char    sun_path[108];          /* path name (gag) */
+};
 #else
 #include <sys/socket.h>
-#endif
 #include <sys/un.h>
+#define SOCK_LEN_TYP (int*)
+#endif
 #include <sys/time.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
@@ -218,7 +225,7 @@ GAddress *GSocket_GetLocal(GSocket *socket)
 
   size = sizeof(addr);
 
-  if (getsockname(socket->m_fd, &addr, &size) < 0) {
+  if (getsockname(socket->m_fd, &addr, SOCK_LEN_TYP &size) < 0) {
     socket->m_error = GSOCK_IOERR;
     return NULL;
   }
@@ -799,7 +806,8 @@ int _GSocket_Recv_Dgram(GSocket *socket, char *buffer, int size)
   fromlen = sizeof(from);
 
   MASK_SIGNAL();
-  ret = recvfrom(socket->m_fd, buffer, size, 0, &from, &fromlen);
+  ret = recvfrom(socket->m_fd, buffer, size, 0, &from,
+                SOCK_LEN_TYP &fromlen);
   UNMASK_SIGNAL();
 
   if (ret == -1)
@@ -901,7 +909,8 @@ void _GSocket_Detected_Write(GSocket *socket)
     socket->m_establishing = FALSE;
 
     len = sizeof(error);
-    getsockopt(socket->m_fd, SOL_SOCKET, SO_ERROR, (void*) &error, &len);
+    getsockopt(socket->m_fd, SOL_SOCKET, SO_ERROR, (void*) &error,
+              SOCK_LEN_TYP &len);
 
     if (error)
     {
@@ -1080,7 +1089,11 @@ GSocketError _GAddress_Init_INET(GAddress *address)
   address->m_family = GSOCK_INET;
   address->m_realfamily = PF_INET;
   ((struct sockaddr_in *)address->m_addr)->sin_family = AF_INET;
-  ((struct sockaddr_in *)address->m_addr)->sin_addr.s_addr = INADDR_ANY;
+  /*
+     INADDR_BROADCAST is identical to INADDR_NONE which is not defined
+     on all unices. INADDR_BROADCAST should be fine to indicate an error.
+   */
+  ((struct sockaddr_in *)address->m_addr)->sin_addr.s_addr = INADDR_BROADCAST;
 
   return GSOCK_NOERROR;
 }