Date: Thu, 14 Dec 2017 15:01:21 +0000 (UTC) From: Guido Falsi <madpilot@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org Subject: svn commit: r456302 - in branches/2017Q4/sysutils/xfce4-wavelan-plugin: . files Message-ID: <201712141501.vBEF1LLE025560@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: madpilot Date: Thu Dec 14 15:01:21 2017 New Revision: 456302 URL: https://svnweb.freebsd.org/changeset/ports/456302 Log: MFH: r455225 - Import upstream patch to fix a memory leak [1] - While here rename and regenerate patches PR: 223937 [1] Submitted by: J.R. Oldroyd <fbsd@opal.com> Obtained from: https://git.xfce.org/panel-plugins/xfce4-wavelan-plugin/commit/?id=d4c76389d63199636c52e8a7a0ce80d5f2fde591 Approved by: ports-secteam (swills) Added: branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c - copied unchanged from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c - copied unchanged from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c Deleted: branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wavelan.c branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wi_bsd.c Modified: branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile Directory Properties: branches/2017Q4/ (props changed) Modified: branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile ============================================================================== --- branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile Thu Dec 14 14:52:58 2017 (r456301) +++ branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile Thu Dec 14 15:01:21 2017 (r456302) @@ -3,6 +3,7 @@ PORTNAME= xfce4-wavelan-plugin PORTVERSION= 0.6.0 +PORTREVISION= 1 CATEGORIES= sysutils xfce MASTER_SITES= XFCE/src/panel-plugins/${PORTNAME}/${PORTVERSION:R} DIST_SUBDIR= xfce4 Copied: branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c (from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c Thu Dec 14 15:01:21 2017 (r456302, copy of r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c) @@ -0,0 +1,80 @@ +--- panel-plugin/wavelan.c.orig 2016-10-29 06:46:02 UTC ++++ panel-plugin/wavelan.c +@@ -64,6 +64,9 @@ typedef struct + GtkWidget *image; + GtkWidget *signal; + GtkWidget *tooltip_text; ++#if GTK_CHECK_VERSION (3, 16, 0) ++ GtkCssProvider *css_provider; ++#endif + + XfcePanelPlugin *plugin; + +@@ -77,7 +80,6 @@ wavelan_set_state(t_wavelan *wavelan, gint state) + { + GdkRGBA color; + #if GTK_CHECK_VERSION (3, 16, 0) +- GtkCssProvider *css_provider; + gchar *css; + #endif + +@@ -99,11 +101,11 @@ wavelan_set_state(t_wavelan *wavelan, gint state) + + if (wavelan->signal_colors) { + /* set color */ +- if (state > 70) ++ if (state > 75) + gdk_rgba_parse(&color, signal_color_strong); +- else if (state > 55) ++ else if (state > 50) + gdk_rgba_parse(&color, signal_color_good); +- else if (state > 40) ++ else if (state > 25) + gdk_rgba_parse(&color, signal_color_weak); + else + gdk_rgba_parse(&color, signal_color_bad); +@@ -118,12 +120,7 @@ wavelan_set_state(t_wavelan *wavelan, gint state) + #endif + gdk_rgba_to_string(&color)); + /* Setup Gtk style */ +- css_provider = gtk_css_provider_new (); +- gtk_css_provider_load_from_data (css_provider, css, strlen(css), NULL); +- gtk_style_context_add_provider ( +- GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (wavelan->signal))), +- GTK_STYLE_PROVIDER (css_provider), +- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); ++ gtk_css_provider_load_from_data (wavelan->css_provider, css, strlen(css), NULL); + g_free(css); + #else + gtk_widget_override_background_color(GTK_WIDGET(wavelan->signal), +@@ -183,7 +180,15 @@ wavelan_timer(gpointer data) + } + } + else { +- wavelan_set_state(wavelan, stats.ws_quality); ++ /* ++ * Usual formula is: qual = 4 * (signal - noise) ++ * where noise is typically about -96dBm, but we don't have ++ * the actual noise value here, so approximate one. ++ */ ++ if (strcmp(stats.ws_qunit, "dBm") == 0) ++ wavelan_set_state(wavelan, 4 * (stats.ws_quality - (-96))); ++ else ++ wavelan_set_state(wavelan, stats.ws_quality); + + if (strlen(stats.ws_netname) > 0) + /* Translators: net_name: quality quality_unit at rate Mb/s*/ +@@ -338,6 +343,13 @@ wavelan_new(XfcePanelPlugin *plugin) + + /* setup progressbar */ + wavelan->signal = gtk_progress_bar_new(); ++#if GTK_CHECK_VERSION (3, 16, 0) ++ wavelan->css_provider = gtk_css_provider_new (); ++ gtk_style_context_add_provider ( ++ GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (wavelan->signal))), ++ GTK_STYLE_PROVIDER (wavelan->css_provider), ++ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); ++#endif + wavelan->image = GTK_WIDGET(xfce_panel_image_new_from_source("network-wireless")); + + gtk_box_pack_start(GTK_BOX(wavelan->box), GTK_WIDGET(wavelan->image), FALSE, FALSE, 0); Copied: branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c (from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c Thu Dec 14 15:01:21 2017 (r456302, copy of r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c) @@ -0,0 +1,251 @@ +--- panel-plugin/wi_bsd.c.orig 2016-05-01 15:53:40 UTC ++++ panel-plugin/wi_bsd.c +@@ -3,6 +3,8 @@ + * (OpenBSD support) + * 2008 Pietro Cerutti <gahr@gahr.ch> + * (FreeBSD > 700000 adaptation) ++ * 2014 J.R. Oldroyd <fbsd@opal.com> ++ * (Enhance FreeBSD support) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions +@@ -26,14 +28,9 @@ + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +-#if !defined(__FreeBSD_kernel__) && defined(__FreeBSD__) +-#define __FreeBSD_kernel__ __FreeBSD__ +-#endif +-#if !defined(__FreeBSD_kernel_version) && defined(__FreeBSD_version) +-#define __FreeBSD_kernel_version __FreeBSD_version +-#endif ++#include <sys/param.h> + +-#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) || defined(__FreeBSD_kernel_kernel__) || defined(__OpenBSD__) ++#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) + + #include <sys/types.h> + #include <sys/cdefs.h> +@@ -44,20 +41,14 @@ + + #include <net/if.h> + #include <net/if_media.h> +-#ifdef __FreeBSD_kernel__ ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + #include <netinet/in.h> + #include <netinet/if_ether.h> + #include <sys/endian.h> +-#if __FreeBSD_kernel_version >= 700000 + #include <sys/types.h> + #include <sys/sysctl.h> + #include <net80211/ieee80211_ioctl.h> + #else +-#include <net/if_var.h> +-#include <net/ethernet.h> +-#include <dev/wi/if_wavelan_ieee.h> +-#endif +-#else + #ifdef __NetBSD__ + #include <net80211/ieee80211.h> + #include <net80211/ieee80211_ioctl.h> +@@ -107,14 +98,10 @@ struct wi_device + }; + + static int _wi_carrier(const struct wi_device *); +-#if defined(__FreeBSD_kernel__) ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + static int _wi_vendor(const struct wi_device *, char *, size_t); +-#if __FreeBSD_kernel_version > 700000 + static int _wi_getval(const struct wi_device *, struct ieee80211req_scan_result *); +-#else +-static int _wi_getval(const struct wi_device *, struct wi_req *); + #endif +-#endif + static int _wi_netname(const struct wi_device *, char *, size_t); + static int _wi_quality(const struct wi_device *, int *); + static int _wi_rate(const struct wi_device *, int *); +@@ -164,7 +151,7 @@ wi_query(struct wi_device *device, struct wi_stats *st + strlcpy(stats->ws_qunit, "dBm", 4); + #endif + /* check vendor (independent of carrier state) */ +-#if defined(__FreeBSD_kernel__) ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + if ((result = _wi_vendor(device, stats->ws_vendor, WI_MAXSTRLEN)) != WI_OK) + return(result); + #endif +@@ -305,12 +292,10 @@ _wi_rate(const struct wi_device *device, int *rate) + } + #endif + +-/* seems only FreeBSD supports this operation */ +-#if defined(__FreeBSD_kernel__) ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + static int + _wi_vendor(const struct wi_device *device, char *buffer, size_t len) + { +-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000 + /* + * We use sysctl to get a device description + */ +@@ -327,59 +312,30 @@ _wi_vendor(const struct wi_device *device, char *buffe + dev_number = (int)strtol(c, NULL, 10); + *c = '\0'; + ++ /* ++ * Also, wlan doesn't present dev.wlan.N.%desc, need to use ++ * underlying driver name, instead: dev.ath.0.%desc, so we ++ * need to get the parent's name. ++ */ ++ if(strcmp(dev_name, "wlan") == 0) { ++ snprintf(mib, sizeof(mib), "net.%s.%d.%%parent", dev_name, dev_number); ++ if(sysctlbyname(mib, dev_name, &len, NULL, 0) == -1) ++ return (WI_NOSUCHDEV); ++ ++ c = dev_name; ++ while(!isdigit(*c)) c++; ++ dev_number = (int)strtol(c, NULL, 10); ++ *c = '\0'; ++ len = WI_MAXSTRLEN; ++ } ++ + snprintf(mib, sizeof(mib), "dev.%s.%d.%%desc", dev_name, dev_number); + if(sysctlbyname(mib, buffer, &len, NULL, 0) == -1) + return (WI_NOSUCHDEV); +-#else +-#define WI_RID_STA_IDENTITY_LUCENT 0x1 +-#define WI_RID_STA_IDENTITY_PRISMII 0x2 +-#define WI_RID_STA_IDENTITY_SAMSUNG 0x3 +-#define WI_RID_STA_IDENTITY_DLINK 0x6 +- const char* vendor = "Unknown"; +- struct wi_req wr; +- int result; + +- bzero((void*)&wr, sizeof(wr)); +- wr.wi_len = WI_MAX_DATALEN; +- wr.wi_type = WI_RID_STA_IDENTITY; +- +- if ((result = _wi_getval(device, &wr)) != WI_OK){ +- /* For the Atheros, IDENTITY does not work. */ +- if (strcmp(device->interface, "ath") != 0) +- return(result); +- } +- else if (wr.wi_len < 4) +- return(WI_NOSUCHDEV); +- +- switch (wr.wi_val[1]) { +- case WI_RID_STA_IDENTITY_LUCENT: +- vendor = "Lucent"; +- break; +- +- case WI_RID_STA_IDENTITY_PRISMII: +- vendor = "generic PRISM II"; +- break; +- +- case WI_RID_STA_IDENTITY_SAMSUNG: +- vendor = "Samsung"; +- break; +- case WI_RID_STA_IDENTITY_DLINK: +- vendor = "D-Link"; +- break; +- } +- +- snprintf(buffer, len, "%s (ID %d, version %d.%d)", vendor, +- wr.wi_val[0], wr.wi_val[2], wr.wi_val[3]); +-#endif +- + return(WI_OK); + } +-#endif /* wi_vendor */ + +-/* NetBSD and FreeBSD 6.x uses old wi_* API */ +-#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) +-/* FreeBSD 7.x use its own new iee80211 API */ +-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000 + static int + _wi_getval(const struct wi_device *device, struct ieee80211req_scan_result *scan) + { +@@ -404,7 +360,9 @@ _wi_getval(const struct wi_device *device, struct ieee + + return(WI_OK); + } +-#else ++#endif ++ ++#if defined(__NetBSD__) + static int + _wi_getval(const struct wi_device *device, struct wi_req *wr) + { +@@ -420,10 +378,11 @@ _wi_getval(const struct wi_device *device, struct wi_r + return(WI_OK); + } + #endif ++ + static int + _wi_netname(const struct wi_device *device, char *buffer, size_t len) + { +-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000 ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + struct ieee80211req ireq; + + memset(&ireq, 0, sizeof(ireq)); +@@ -434,7 +393,7 @@ _wi_netname(const struct wi_device *device, char *buff + ireq.i_len = len; + if (ioctl(device->socket, SIOCG80211, &ireq) < 0) + return WI_NOSUCHDEV; +-#else ++#elif defined(__NetBSD__) + struct wi_req wr; + int result; + +@@ -454,7 +413,7 @@ _wi_netname(const struct wi_device *device, char *buff + static int + _wi_quality(const struct wi_device *device, int *quality) + { +-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000 ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + struct ieee80211req_scan_result req; + int result; + bzero(&req, sizeof(req)); +@@ -462,8 +421,16 @@ _wi_quality(const struct wi_device *device, int *quali + if((result = _wi_getval(device, &req)) != WI_OK) + return (result); + +- *quality = req.isr_rssi; +-#else ++ /* ++ * FreeBSD's wlan stats: ++ * signal (in dBm) = rssi * 2 + noise; ++ * quality_bars = 4 * (signal - noise); ++ * or ++ * quality_bars = rssi * 8; ++ * but, per wi_query(), above, we need to return strength in dBm, so... ++ */ ++ *quality = req.isr_rssi * 2 + req.isr_noise; ++#elif defined(__NetBSD__) + struct wi_req wr; + int result; + +@@ -486,7 +453,7 @@ _wi_quality(const struct wi_device *device, int *quali + static int + _wi_rate(const struct wi_device *device, int *rate) + { +-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000 ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + struct ieee80211req_scan_result req; + int result, i, high; + bzero(&req, sizeof(req)); +@@ -499,7 +466,7 @@ _wi_rate(const struct wi_device *device, int *rate) + high = req.isr_rates[i] & IEEE80211_RATE_VAL; + + *rate = high / 2; +-#else ++#elif defined(__NetBSD__) + struct wi_req wr; + int result; + +@@ -516,5 +483,4 @@ _wi_rate(const struct wi_device *device, int *rate) + return(WI_OK); + } + +-#endif /* defined(__NetBSD__) || defined(__FreeBSD_kernel__) */ + #endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201712141501.vBEF1LLE025560>