Solaris build patches [repost]
Alan Hargreaves
Alan.Hargreaves at Sun.COM
Mon Jul 7 01:56:15 CDT 2003
Patch redone with diff -u.
alan.
This is to fix a number of build problems under Solaris. There still
appears to be a problem with ptrace in the server code that is
preventing a build. I am looking at this.
I am using defined(__sun) as for the most part thes patches go into code
which is already inside a defined(__sun) || defined(something else) ||
defined(something else again).
alan.
=========
Alan Hargreaves - Alan.Hargreaves at Sun.COM
wine/dlls/ntdll/signal_i386.c
Bug 1569
- Cast needed for FAULT_ADDRESS in Solaris
wine/dlls/iphlpapi/ifenum.c
Bug 1572
- Brace in incorrect place makes an if else clause malformed
- struct ifreq has been deprecated in Solaris and also does
not have an element for ifr_mtu. Inserted a replacement
getInterfaceMtuByName if __sun is defined. This version uses
struct lifreq.
- Solaris does not implement getInterfaceAddrByName. Added this
routine to be used if __sun is defined.
-------------- next part --------------
? wine/server/cscope.out
Index: wine/dlls/iphlpapi/ifenum.c
===================================================================
RCS file: /home/wine/wine/dlls/iphlpapi/ifenum.c,v
retrieving revision 1.3
diff -u -r1.3 ifenum.c
--- wine/dlls/iphlpapi/ifenum.c 21 May 2003 18:26:00 -0000 1.3
+++ wine/dlls/iphlpapi/ifenum.c 7 Jul 2003 06:50:47 -0000
@@ -615,6 +615,34 @@
return ret;
}
#elif defined (SIOCGARP)
+#ifdef __sun
+
+/* Solaris does not define getInterfaceAddrByName */
+
+uint32_t getInterfaceAddrByName(const char * name)
+{
+ int fd;
+ struct ifreq ifr;
+ struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
+ uint32_t ret = (uint32_t)NULL;
+
+ fd = socket(PF_INET, SOCK_DGRAM, 0);
+
+ if (fd < 0) {
+ return ret;
+ }
+
+ memset(&ifr, 0, sizeof(struct ifreq));
+ strncpy(ifr.ifr_name, name, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = '\0';
+ if ((ioctl(fd, SIOCGIFADDR, &ifr))>=0) {
+ ret = ntohl(sin->sin_addr.s_addr);
+ }
+ close(fd);
+ return ret;
+}
+#endif /* __sun */
+
DWORD getInterfacePhysicalByName(const char *name, PDWORD len, PBYTE addr,
PDWORD type)
{
@@ -661,9 +689,9 @@
}
}
}
- else
- ret = ERROR_NO_MORE_FILES;
}
+ else
+ ret = ERROR_NO_MORE_FILES;
return ret;
}
#elif defined (HAVE_SYS_SYSCTL_H) && defined (HAVE_NET_IF_DL_H)
@@ -768,6 +796,38 @@
return ERROR_INVALID_DATA;
}
+#if defined(__sun)
+
+DWORD getInterfaceMtuByName(const char *name, PDWORD mtu)
+{
+ DWORD ret;
+ int fd;
+
+ if (!name)
+ return ERROR_INVALID_PARAMETER;
+ if (!mtu)
+ return ERROR_INVALID_PARAMETER;
+
+ fd = socket(PF_INET, SOCK_DGRAM, 0);
+ if (fd != -1) {
+ struct lifreq ifr;
+
+ strncpy(ifr.lifr_name, name, IFNAMSIZ);
+ ifr.lifr_name[IFNAMSIZ-1] = '\0';
+ if ((ioctl(fd, SIOCGIFMTU, &ifr)))
+ ret = ERROR_INVALID_DATA;
+ else {
+ *mtu = ifr.lifr_mtu;
+ ret = NO_ERROR;
+ }
+ }
+ else
+ ret = ERROR_NO_MORE_FILES;
+ return ret;
+}
+
+#else /* defined(__sun) */
+
DWORD getInterfaceMtuByName(const char *name, PDWORD mtu)
{
DWORD ret;
@@ -795,6 +855,7 @@
ret = ERROR_NO_MORE_FILES;
return ret;
}
+#endif
DWORD getInterfaceMtuByIndex(DWORD index, PDWORD mtu)
{
Index: wine/dlls/ntdll/signal_i386.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/signal_i386.c,v
retrieving revision 1.66
diff -u -r1.66 signal_i386.c
--- wine/dlls/ntdll/signal_i386.c 1 Jul 2003 03:37:41 -0000 1.66
+++ wine/dlls/ntdll/signal_i386.c 7 Jul 2003 06:50:53 -0000
@@ -368,7 +368,11 @@
#define TRAP_sig(context) ((context)->uc_mcontext.gregs[TRAPNO])
#endif
+#ifdef __sun
+#define FAULT_ADDRESS (((k_siginfo_t *)__siginfo)->si_addr)
+#else
#define FAULT_ADDRESS (__siginfo->si_addr)
+#endif
#endif /* svr4 || SCO_DS */
More information about the wine-patches
mailing list