From c4222c2ea2fb9e9d72a7f0badd88207f7998e035 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sat, 21 May 2022 00:13:15 +0200 Subject: [PATCH] applets/network: really fix the build on FreeBSD This previously built on FreeBSD 12.3 for lack of SIOCGIFDATA; this should now build on FreeBSD 13.1. --- src/applets/network.c | 46 +++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/applets/network.c b/src/applets/network.c index 9ff8a01..942abcb 100644 --- a/src/applets/network.c +++ b/src/applets/network.c @@ -24,11 +24,11 @@ #endif #include #include +#include +#include #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) # include #endif -#include -#include #include #include "Panel/applet.h" #define _(string) gettext(string) @@ -298,8 +298,11 @@ static void _refresh_interface_flags(Network * network, NetworkInterface * ni, #ifdef SIOCGIFDATA # if defined(__NetBSD__) struct ifdatareq ifdr; + struct if_data * pifdr = &ifdr.ifdr_data; # else - struct if_data ifdr; + struct ifreq ifdr; + struct if_data ifd; + struct if_data * pifdr = &ifd; # endif # if GTK_CHECK_VERSION(2, 12, 0) unsigned long ibytes; @@ -317,42 +320,43 @@ static void _refresh_interface_flags(Network * network, NetworkInterface * ni, #ifdef SIOCGIFDATA /* XXX ignore errors */ memset(&ifdr, 0, sizeof(ifdr)); +# if defined(__NetBSD__) strncpy(ifdr.ifdr_name, ni->name, sizeof(ifdr.ifdr_name)); +# else + strncpy(ifdr.ifr_name, ni->name, sizeof(ifdr.ifr_name)); + ifdr.ifr_data = (caddr_t)pifdr; +# endif if(ioctl(network->fd, SIOCGIFDATA, &ifdr) == -1) network->helper->error(NULL, "SIOCGIFDATA", 1); else { - if(ifdr.ifdr_data.ifi_ipackets > ni->ipackets) - icon = (ifdr.ifdr_data.ifi_opackets - > ni->opackets) + if(pifdr->ifi_ipackets > ni->ipackets) + icon = (pifdr->ifi_opackets > ni->opackets) ? "network-transmit-receive" : "network-receive"; - else if(ifdr.ifdr_data.ifi_opackets > ni->opackets) + else if(pifdr->ifi_opackets > ni->opackets) icon = "network-transmit"; # ifdef LINK_STATE_DOWN - else if(ifdr.ifdr_data.ifi_link_state - == LINK_STATE_DOWN) + else if(pifdr->ifi_link_state == LINK_STATE_DOWN) icon = "network-offline"; # endif else icon = "network-idle"; # if GTK_CHECK_VERSION(2, 12, 0) - ibytes = (ifdr.ifdr_data.ifi_ibytes >= ni->ibytes) - ? ifdr.ifdr_data.ifi_ibytes - ni->ibytes - : ULONG_MAX - ni->ibytes - + ifdr.ifdr_data.ifi_ibytes; - obytes = (ifdr.ifdr_data.ifi_obytes >= ni->obytes) - ? ifdr.ifdr_data.ifi_obytes - ni->obytes - : ULONG_MAX - ni->obytes - + ifdr.ifdr_data.ifi_obytes; + ibytes = (pifdr->ifi_ibytes >= ni->ibytes) + ? pifdr->ifi_ibytes - ni->ibytes + : ULONG_MAX - ni->ibytes + pifdr->ifi_ibytes; + obytes = (pifdr->ifi_obytes >= ni->obytes) + ? pifdr->ifi_obytes - ni->obytes + : ULONG_MAX - ni->obytes + pifdr->ifi_obytes; snprintf(tooltip, sizeof(tooltip), _("%s\nIn: %lu kB/s\nOut: %lu kB/s"), ni->name, ibytes / 512, obytes / 512); # endif - ni->ipackets = ifdr.ifdr_data.ifi_ipackets; - ni->opackets = ifdr.ifdr_data.ifi_opackets; - ni->ibytes = ifdr.ifdr_data.ifi_ibytes; - ni->obytes = ifdr.ifdr_data.ifi_obytes; + ni->ipackets = pifdr->ifi_ipackets; + ni->opackets = pifdr->ifi_opackets; + ni->ibytes = pifdr->ifi_ibytes; + ni->obytes = pifdr->ifi_obytes; } #endif }