patches/wine-01-SIOCGIFHWADDR.diff
author jurikm
Sun, 12 Feb 2012 14:04:10 +0000
changeset 8245 383896da4129
parent 2357 5f3f10da79c6
permissions -rw-r--r--
SFEsauerbraten.spec: add IPS package name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2357
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     1
--- dlls/iphlpapi/ifenum.c.orig	2010-03-03 03:09:08.782656836 -0800
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     2
+++ dlls/iphlpapi/ifenum.c	2010-03-03 03:10:13.961076590 -0800
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     3
@@ -298,7 +298,66 @@
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     4
   return ret;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     5
 }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     6
 
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     7
-#if defined (SIOCGIFHWADDR)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     8
+#if defined (SIOCGARP)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
     9
+static DWORD getInterfacePhysicalByName(const char *name, PDWORD len, PBYTE addr,
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    10
+ PDWORD type)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    11
+{
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    12
+  DWORD ret;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    13
+  int fd;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    14
+
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    15
+  if (!name || !len || !addr || !type)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    16
+    return ERROR_INVALID_PARAMETER;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    17
+
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    18
+  fd = socket(PF_INET, SOCK_DGRAM, 0);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    19
+  if (fd != -1) {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    20
+    if (isLoopbackInterface(fd, name)) {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    21
+      *type = MIB_IF_TYPE_LOOPBACK;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    22
+      memset(addr, 0, *len);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    23
+      *len = 0;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    24
+      ret=NOERROR;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    25
+    }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    26
+    else {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    27
+      struct arpreq arp;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    28
+      struct sockaddr_in *saddr;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    29
+      struct ifreq ifr;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    30
+
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    31
+      /* get IP addr */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    32
+      lstrcpynA(ifr.ifr_name, name, IFNAMSIZ);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    33
+      ioctl(fd, SIOCGIFADDR, &ifr);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    34
+      memset(&arp, 0, sizeof(struct arpreq));
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    35
+      arp.arp_pa.sa_family = AF_INET;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    36
+      saddr = (struct sockaddr_in *)&arp; /* proto addr is first member */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    37
+      saddr->sin_family = AF_INET;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    38
+      memcpy(&saddr->sin_addr.s_addr, ifr.ifr_addr.sa_data + 2, sizeof(DWORD));
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    39
+      if ((ioctl(fd, SIOCGARP, &arp)))
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    40
+        ret = ERROR_INVALID_DATA;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    41
+      else {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    42
+        /* FIXME:  heh:  who said it was ethernet? */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    43
+        int addrLen = ETH_ALEN;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    44
+
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    45
+        if (addrLen > *len) {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    46
+          ret = ERROR_INSUFFICIENT_BUFFER;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    47
+          *len = addrLen;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    48
+        }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    49
+        else {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    50
+          if (addrLen > 0)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    51
+            memcpy(addr, &arp.arp_ha.sa_data[0], addrLen);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    52
+          /* zero out remaining bytes for broken implementations */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    53
+          memset(addr + addrLen, 0, *len - addrLen);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    54
+          *len = addrLen;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    55
+          *type = MIB_IF_TYPE_ETHERNET;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    56
+          ret = NO_ERROR;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    57
+        }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    58
+      }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    59
+    }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    60
+    close(fd);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    61
+  }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    62
+    else
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    63
+      ret = ERROR_NO_MORE_FILES;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    64
+
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    65
+  return ret;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    66
+}
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    67
+#elif defined (SIOCGIFHWADDR)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    68
 static DWORD getInterfacePhysicalByName(const char *name, PDWORD len, PBYTE addr,
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    69
  PDWORD type)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    70
 {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    71
@@ -386,65 +445,6 @@
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    72
     ret = ERROR_NO_MORE_FILES;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    73
   return ret;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    74
 }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    75
-#elif defined (SIOCGARP)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    76
-static DWORD getInterfacePhysicalByName(const char *name, PDWORD len, PBYTE addr,
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    77
- PDWORD type)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    78
-{
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    79
-  DWORD ret;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    80
-  int fd;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    81
-
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    82
-  if (!name || !len || !addr || !type)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    83
-    return ERROR_INVALID_PARAMETER;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    84
-
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    85
-  fd = socket(PF_INET, SOCK_DGRAM, 0);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    86
-  if (fd != -1) {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    87
-    if (isLoopbackInterface(fd, name)) {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    88
-      *type = MIB_IF_TYPE_LOOPBACK;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    89
-      memset(addr, 0, *len);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    90
-      *len = 0;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    91
-      ret=NOERROR;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    92
-    }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    93
-    else {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    94
-      struct arpreq arp;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    95
-      struct sockaddr_in *saddr;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    96
-      struct ifreq ifr;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    97
-
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    98
-      /* get IP addr */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
    99
-      lstrcpynA(ifr.ifr_name, name, IFNAMSIZ);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   100
-      ioctl(fd, SIOCGIFADDR, &ifr);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   101
-      memset(&arp, 0, sizeof(struct arpreq));
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   102
-      arp.arp_pa.sa_family = AF_INET;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   103
-      saddr = (struct sockaddr_in *)&arp; /* proto addr is first member */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   104
-      saddr->sin_family = AF_INET;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   105
-      memcpy(&saddr->sin_addr.s_addr, ifr.ifr_addr.sa_data + 2, sizeof(DWORD));
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   106
-      if ((ioctl(fd, SIOCGARP, &arp)))
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   107
-        ret = ERROR_INVALID_DATA;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   108
-      else {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   109
-        /* FIXME:  heh:  who said it was ethernet? */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   110
-        int addrLen = ETH_ALEN;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   111
-
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   112
-        if (addrLen > *len) {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   113
-          ret = ERROR_INSUFFICIENT_BUFFER;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   114
-          *len = addrLen;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   115
-        }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   116
-        else {
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   117
-          if (addrLen > 0)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   118
-            memcpy(addr, &arp.arp_ha.sa_data[0], addrLen);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   119
-          /* zero out remaining bytes for broken implementations */
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   120
-          memset(addr + addrLen, 0, *len - addrLen);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   121
-          *len = addrLen;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   122
-          *type = MIB_IF_TYPE_ETHERNET;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   123
-          ret = NO_ERROR;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   124
-        }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   125
-      }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   126
-    }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   127
-    close(fd);
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   128
-  }
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   129
-    else
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   130
-      ret = ERROR_NO_MORE_FILES;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   131
-
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   132
-  return ret;
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   133
-}
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   134
 #elif defined (HAVE_SYS_SYSCTL_H) && defined (HAVE_NET_IF_DL_H)
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   135
 static DWORD getInterfacePhysicalByName(const char *name, PDWORD len, PBYTE addr,
5f3f10da79c6 2010-03-03 Matt Lewandowsky <[email protected]>
lewellyn
parents:
diff changeset
   136
  PDWORD type)