#! /bin/sh /usr/share/dpatch/dpatch-run ## ifstate_exact_check.dpatch by Eduard Bloch ## ## DP: Check the state of the interface with SIOCGIFFLAGS instead of traversing the SIOCGIFCONF output, also checking the link state more exactly (Debian bug #563371) @DPATCH@ Index: icewm-1.3.7~pre2/src/apppstatus.cc =================================================================== --- icewm-1.3.7~pre2.orig/src/apppstatus.cc 2010-04-28 21:00:30.000000000 +0200 +++ icewm-1.3.7~pre2/src/apppstatus.cc 2010-04-29 22:11:16.961086255 +0200 @@ -429,19 +429,18 @@ } return false; #else - char buffer[32 * sizeof(struct ifreq)]; - struct ifconf ifc; - struct ifreq *ifr; - long long len; - if (fNetDev == null) return false; - - int s = socket(PF_INET, SOCK_STREAM, 0); + int s = socket(PF_INET, SOCK_STREAM, 0); if (s == -1) return false; +#if BROWSE_SIOCGIFCONF_LIST + char buffer[32 * sizeof(struct ifreq)]; + struct ifconf ifc; + struct ifreq *ifr; + long long len; ifc.ifc_len = sizeof(buffer); ifc.ifc_buf = buffer; if (ioctl(s, SIOCGIFCONF, &ifc) < 0) { @@ -459,6 +458,14 @@ ifr++; } +#else + struct ifreq ifr; + fNetDev.copy(ifr.ifr_name, IFNAMSIZ-1); + bool bUp = (ioctl(s, SIOCGIFFLAGS, &ifr) >= 0 && (ifr.ifr_flags & IFF_UP)); + close(s); + return bUp; +#endif + close(s); return false; #endif