summaryrefslogtreecommitdiffstats
path: root/x11-wm/icewm/files/patch-am
blob: da482f7634b85f283d5ddd2b77b03a3aa41073db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
--- src/apppstatus.cc.orig	Sat Mar 17 00:17:37 2001
+++ src/apppstatus.cc	Thu Apr  5 22:45:29 2001
@@ -270,6 +270,7 @@
       return isUpIsdn();
 #endif
 
+#ifndef __FreeBSD__
     char buffer[32 * sizeof(struct ifreq)];
     struct ifconf ifc;
     struct ifreq *ifr;
@@ -301,6 +302,38 @@
     }
 
     close(s);
+
+#else // __FreeBSD__
+    // FreeBSD code by Ronald Klop <ronald@cs.vu.nl>
+    struct ifmibdata ifmd;
+    size_t ifmd_size=sizeof(ifmibdata);
+    int nr_network_devs;
+    size_t int_size=sizeof(int);
+    int name[6];
+    name[0] = CTL_NET;
+    name[1] = PF_LINK;
+    name[2] = NETLINK_GENERIC;
+    name[3] = IFMIB_IFDATA;
+    name[5] = IFDATA_GENERAL;
+
+    if(sysctlbyname("net.link.generic.system.ifcount",&nr_network_devs,
+                                       &int_size,(void*)0,0) == -1) {
+               printf("%s@%d: %s\n",__FILE__,__LINE__,strerror(errno));
+       } else {
+               for(int i=1;i<=nr_network_devs;i++) {
+                       name[4] = i; /* row of the ifmib table */
+
+               if(sysctl(name, 6, &ifmd, &ifmd_size, (void *)0, 0) == -1) {
+                               printf(_("%s@%d: %s\n"),__FILE__,__LINE__,strerror(errno));
+                               continue;
+                       }
+
+               if (strcmp(ifmd.ifmd_name, netDevice) == 0 && (ifmd.ifmd_flags & IFF_RUNNING)) {
+                               return true;
+                       }
+               }
+       }
+#endif // __FreeBSD__
     return false;
 #endif // if 0
 }
OpenPOWER on IntegriCloud