Index: dlls/wsock32/socket.c
===================================================================
RCS file: /home/wine/wine/dlls/wsock32/socket.c,v
retrieving revision 1.2
diff -u -r1.2 socket.c
--- dlls/wsock32/socket.c	2000/07/23 19:28:24	1.2
+++ dlls/wsock32/socket.c	2000/07/25 20:47:55
@@ -17,6 +17,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
+#ifdef HAVE_SYS_SOCKIO_H
+# include <sys/sockio.h>
+#endif
 #ifdef HAVE_NET_IF_H
 # include <net/if.h>
 #endif
@@ -176,20 +179,39 @@
                      /* Interface ID */
                      IntInfo->if_index = pcommand->toi_entity.tei_instance;
                      
-                     /* MAC Address */
-                     strcpy(ifInfo.ifr_name, ifName);
-                     if (ioctl(sock, SIOCGIFHWADDR, &ifInfo) < 0)
-                     {
-                        ERR ("Error obtaining MAC Address!\n");
-                        close(sock);
-                        return (-1);
-                     }
-                     else
-                     {
-                        /* FIXME: Is it correct to assume size of 6? */
-                        memcpy(IntInfo->if_physaddr, ifInfo.ifr_hwaddr.sa_data, 6);
-                        IntInfo->if_physaddrlen=6;
-                     }
+                     /* MAC Address - Let's try to do this in a cross-platform way... */
+                     #if defined(SIOCGIFHWADDR) /* Linux */
+                        strcpy(ifInfo.ifr_name, ifName);
+                        if (ioctl(sock, SIOCGIFHWADDR, &ifInfo) < 0)
+                        {
+                           ERR ("Error obtaining MAC Address!\n");
+                           close(sock);
+                           return (-1);
+                        }
+                        else
+                        {
+                           /* FIXME: Is it correct to assume size of 6? */
+                           memcpy(IntInfo->if_physaddr, ifInfo.ifr_hwaddr.sa_data, 6);
+                           IntInfo->if_physaddrlen=6;
+                        }
+                     #elif defined(SIOCGENADDR) /* Solaris */
+                        if (ioctl(sock, SIOCGENADDR, &ifInfo) < 0)
+                        {
+                           ERR ("Error obtaining MAC Address!\n");
+                           close(sock);
+                           return (-1);
+                        }
+                        else
+                        {
+                           /* FIXME: Is it correct to assume size of 6? */
+		           memcpy(IntInfo->if_physaddr, ifInfo.ifr_enaddr, 6);
+                           IntInfo->if_physaddrlen=6;
+                        }
+                     #else
+                        memset (IntInfo->if_physaddr, 0, 6);
+                        ERR ("Unable to determine MAC Address on your platform!\n");
+                     #endif
+
                      
                      /* Interface name and length */
                      strcpy (IntInfo->if_descr, ifName);
@@ -349,8 +371,20 @@
 	       }
                else
 	       {
-                  struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_netmask;
-                  baseIPInfo->iae_mask = ipTemp->sin_addr.S_un.S_addr; 
+                  /* Trying to avoid some compile problems across platforms.
+                     (Linux, FreeBSD, Solaris...) */
+                  #ifndef ifr_netmask
+                     #ifndef ifr_addr
+                        baseIPInfo->iae_mask = 0;
+                        ERR ("Unable to determine Netmask on your platform!\n");
+                     #else
+                        struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_addr;
+                        baseIPInfo->iae_mask = ipTemp->sin_addr.S_un.S_addr; 
+                     #endif
+                  #else  
+                     struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_netmask;
+                     baseIPInfo->iae_mask = ipTemp->sin_addr.S_un.S_addr; 
+                  #endif
                }
 
                /* FIXME: How should the below be properly calculated? ******************/
@@ -536,7 +570,7 @@
    Helper function for WsControl - This function returns the bytes (octets) transmitted
    and received for the supplied interface number from the /proc fs. 
 */
-int WSCNTL_GetTransRecvStat(int intNumber, ulong *transBytes, ulong *recvBytes)
+int WSCNTL_GetTransRecvStat(int intNumber, unsigned long *transBytes, unsigned long *recvBytes)
 {
    FILE *procfs;
    char buf[512], result[512]; /* Size doesn't matter, something big */
@@ -616,7 +650,7 @@
       result[resultPos+1]='\0';
       resultPos++; bufPos++;
    }
-   *recvBytes = strtoul (result, NULL, 10); /* convert string to ulong, using base 10 */
+   *recvBytes = strtoul (result, NULL, 10); /* convert string to unsigned long, using base 10 */
 
    
    /* Skip columns #3 to #9 (Don't need them) */
@@ -640,7 +674,7 @@
       result[resultPos+1]='\0';
       resultPos++; bufPos++;
    }
-   *transBytes = strtoul (result, NULL, 10); /* convert string to ulong, using base 10 */
+   *transBytes = strtoul (result, NULL, 10); /* convert string to unsigned long, using base 10 */
 
 
    fclose(procfs);
Index: dlls/wsock32/wscontrol.h
===================================================================
RCS file: /home/wine/wine/dlls/wsock32/wscontrol.h,v
retrieving revision 1.1
diff -u -r1.1 wscontrol.h
--- dlls/wsock32/wscontrol.h	2000/07/23 19:28:24	1.1
+++ dlls/wsock32/wscontrol.h	2000/07/25 20:47:55
@@ -22,7 +22,7 @@
 /* WsControl Helper Functions */
 int WSCNTL_GetInterfaceCount(void); /* Obtains the number of network interfaces */
 int WSCNTL_GetInterfaceName(int, char *); /* Obtains the name of an interface */
-int WSCNTL_GetTransRecvStat(int intNumber, ulong *transBytes, ulong *recvBytes); /* Obtains bytes
+int WSCNTL_GetTransRecvStat(int intNumber, unsigned long *transBytes, unsigned long *recvBytes); /* Obtains bytes
                                                                          recv'd/trans by interface */
 
 /*
@@ -37,55 +37,55 @@
 /* Structure of an entity ID */
 typedef struct TDIEntityID 
 {
-   ulong tei_entity;
-   ulong tei_instance;
+   unsigned long tei_entity;
+   unsigned long tei_instance;
 } TDIEntityID;
 
 /* Structure of an object ID */
 typedef struct TDIObjectID 
 {
-   TDIEntityID  toi_entity;
-   ulong        toi_class;
-   ulong        toi_type;
-   ulong        toi_id;
+   TDIEntityID   toi_entity;
+   unsigned long toi_class;
+   unsigned long toi_type;
+   unsigned long toi_id;
 } TDIObjectID;
 
 typedef struct IPSNMPInfo 
 {
-   ulong  ipsi_forwarding;
-   ulong  ipsi_defaultttl;
-   ulong  ipsi_inreceives;
-   ulong  ipsi_inhdrerrors;
-   ulong  ipsi_inaddrerrors;
-   ulong  ipsi_forwdatagrams;
-   ulong  ipsi_inunknownprotos;
-   ulong  ipsi_indiscards;
-   ulong  ipsi_indelivers;
-   ulong  ipsi_outrequests;
-   ulong  ipsi_routingdiscards;
-   ulong  ipsi_outdiscards;
-   ulong  ipsi_outnoroutes;
-   ulong  ipsi_reasmtimeout;
-   ulong  ipsi_reasmreqds;
-   ulong  ipsi_reasmoks;
-   ulong  ipsi_reasmfails;
-   ulong  ipsi_fragoks;
-   ulong  ipsi_fragfails;
-   ulong  ipsi_fragcreates;
-   ulong  ipsi_numif;
-   ulong  ipsi_numaddr;
-   ulong  ipsi_numroutes;
+   unsigned long  ipsi_forwarding;
+   unsigned long  ipsi_defaultttl;
+   unsigned long  ipsi_inreceives;
+   unsigned long  ipsi_inhdrerrors;
+   unsigned long  ipsi_inaddrerrors;
+   unsigned long  ipsi_forwdatagrams;
+   unsigned long  ipsi_inunknownprotos;
+   unsigned long  ipsi_indiscards;
+   unsigned long  ipsi_indelivers;
+   unsigned long  ipsi_outrequests;
+   unsigned long  ipsi_routingdiscards;
+   unsigned long  ipsi_outdiscards;
+   unsigned long  ipsi_outnoroutes;
+   unsigned long  ipsi_reasmtimeout;
+   unsigned long  ipsi_reasmreqds;
+   unsigned long  ipsi_reasmoks;
+   unsigned long  ipsi_reasmfails;
+   unsigned long  ipsi_fragoks;
+   unsigned long  ipsi_fragfails;
+   unsigned long  ipsi_fragcreates;
+   unsigned long  ipsi_numif;
+   unsigned long  ipsi_numaddr;
+   unsigned long  ipsi_numroutes;
 } IPSNMPInfo;
 
 typedef struct IPAddrEntry 
 {
-   ulong  iae_addr;
-   ulong  iae_index;
-   ulong  iae_mask;
-   ulong  iae_bcastaddr;
-   ulong  iae_reasmsize;
-   ushort iae_context;
-   ushort iae_pad;
+   unsigned long  iae_addr;
+   unsigned long  iae_index;
+   unsigned long  iae_mask;
+   unsigned long  iae_bcastaddr;
+   unsigned long  iae_reasmsize;
+   ushort         iae_context;
+   ushort         iae_pad;
 } IPAddrEntry;
 
 
@@ -93,29 +93,29 @@
 #define	MAX_IFDESCR_LEN      256
 typedef struct IFEntry 
 {
-   ulong if_index;
-   ulong if_type;
-   ulong if_mtu;
-   ulong if_speed;
-   ulong if_physaddrlen;
-   uchar if_physaddr[MAX_PHYSADDR_SIZE];
-   ulong if_adminstatus;
-   ulong if_operstatus;
-   ulong if_lastchange;
-   ulong if_inoctets;
-   ulong if_inucastpkts;
-   ulong if_innucastpkts;
-   ulong if_indiscards;
-   ulong if_inerrors;
-   ulong if_inunknownprotos;
-   ulong if_outoctets;
-   ulong if_outucastpkts;
-   ulong if_outnucastpkts;
-   ulong if_outdiscards;
-   ulong if_outerrors;
-   ulong if_outqlen;
-   ulong if_descrlen;
-   uchar if_descr[1];
+   unsigned long if_index;
+   unsigned long if_type;
+   unsigned long if_mtu;
+   unsigned long if_speed;
+   unsigned long if_physaddrlen;
+   uchar         if_physaddr[MAX_PHYSADDR_SIZE];
+   unsigned long if_adminstatus;
+   unsigned long if_operstatus;
+   unsigned long if_lastchange;
+   unsigned long if_inoctets;
+   unsigned long if_inucastpkts;
+   unsigned long if_innucastpkts;
+   unsigned long if_indiscards;
+   unsigned long if_inerrors;
+   unsigned long if_inunknownprotos;
+   unsigned long if_outoctets;
+   unsigned long if_outucastpkts;
+   unsigned long if_outnucastpkts;
+   unsigned long if_outdiscards;
+   unsigned long if_outerrors;
+   unsigned long if_outqlen;
+   unsigned long if_descrlen;
+   uchar         if_descr[1];
 } IFEntry;
 
 
Index: dlls/winsock/socket.c
===================================================================
RCS file: /home/wine/wine/dlls/winsock/socket.c,v
retrieving revision 1.21
diff -u -r1.21 socket.c
--- dlls/winsock/socket.c	2000/07/23 19:28:24	1.21
+++ dlls/winsock/socket.c	2000/07/25 20:47:56
@@ -21,12 +21,9 @@
 #ifdef HAVE_SYS_FILIO_H
 # include <sys/filio.h>
 #endif
-#if defined(__svr4__) || defined(__sun)
-#include <sys/ioccom.h>
 #ifdef HAVE_SYS_SOCKIO_H
 # include <sys/sockio.h>
 #endif
-#endif
 
 #if defined(__EMX__)
 # include <sys/so_ioctl.h>
@@ -1384,11 +1381,28 @@
                }
                else
                {
-                  struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_netmask;
+                  /* Trying to avoid some compile problems across platforms.
+                     (Linux, FreeBSD, Solaris...) */
+                  #ifndef ifr_netmask
+                    #ifndef ifr_addr
+                       intArray->iiNetmask.AddressIn.sin_family = AF_INET; 
+                       intArray->iiNetmask.AddressIn.sin_port = 0;
+                       intArray->iiNetmask.AddressIn.sin_addr.ws_addr = 0; 
+                       ERR ("Unable to determine Netmask on your platform!\n");
+                    #else
+                       struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_addr;
+            
+                       intArray->iiNetmask.AddressIn.sin_family = AF_INET; 
+                       intArray->iiNetmask.AddressIn.sin_port = ipTemp->sin_port;
+                       intArray->iiNetmask.AddressIn.sin_addr.ws_addr = ipTemp->sin_addr.S_un.S_addr; 
+                    #endif
+                  #else
+                     struct ws_sockaddr_in *ipTemp = (struct ws_sockaddr_in *)&ifInfo.ifr_netmask;
             
-                  intArray->iiNetmask.AddressIn.sin_family = AF_INET; 
-                  intArray->iiNetmask.AddressIn.sin_port = ipTemp->sin_port;
-                  intArray->iiNetmask.AddressIn.sin_addr.ws_addr = ipTemp->sin_addr.S_un.S_addr; 
+                     intArray->iiNetmask.AddressIn.sin_family = AF_INET; 
+                     intArray->iiNetmask.AddressIn.sin_port = ipTemp->sin_port;
+                     intArray->iiNetmask.AddressIn.sin_addr.ws_addr = ipTemp->sin_addr.S_un.S_addr; 
+                  #endif
                }
                
                /* Socket Status Flags */
