From dd1a01fab2b125c7c5c70228a88b29a333bee0ae Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Thu, 14 Dec 2017 15:01:21 +0000 Subject: 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 Obtained from: https://git.xfce.org/panel-plugins/xfce4-wavelan-plugin/commit/?id=d4c76389d63199636c52e8a7a0ce80d5f2fde591 Approved by: ports-secteam (swills) --- sysutils/xfce4-wavelan-plugin/Makefile | 1 + .../files/patch-panel-plugin__wavelan.c | 34 --- .../files/patch-panel-plugin__wi_bsd.c | 250 -------------------- .../files/patch-panel-plugin_wavelan.c | 80 +++++++ .../files/patch-panel-plugin_wi__bsd.c | 251 +++++++++++++++++++++ 5 files changed, 332 insertions(+), 284 deletions(-) delete mode 100644 sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wavelan.c delete mode 100644 sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wi_bsd.c create mode 100644 sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c create mode 100644 sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c diff --git a/sysutils/xfce4-wavelan-plugin/Makefile b/sysutils/xfce4-wavelan-plugin/Makefile index caf0246bb8f8..8d2613f922f6 100644 --- a/sysutils/xfce4-wavelan-plugin/Makefile +++ b/sysutils/xfce4-wavelan-plugin/Makefile @@ -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 diff --git a/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wavelan.c b/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wavelan.c deleted file mode 100644 index 92bb35d767e4..000000000000 --- a/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wavelan.c +++ /dev/null @@ -1,34 +0,0 @@ ---- panel-plugin/wavelan.c.orig 2016-10-29 06:46:02 UTC -+++ panel-plugin/wavelan.c -@@ -99,11 +99,11 @@ wavelan_set_state(t_wavelan *wavelan, gi - - 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); -@@ -183,7 +183,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*/ diff --git a/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wi_bsd.c b/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wi_bsd.c deleted file mode 100644 index 0dcf3e558175..000000000000 --- a/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wi_bsd.c +++ /dev/null @@ -1,250 +0,0 @@ ---- 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 - * (FreeBSD > 700000 adaptation) -+ * 2014 J.R. Oldroyd -+ * (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 - --#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) || defined(__FreeBSD_kernel_kernel__) || defined(__OpenBSD__) -+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) - - #include - #include -@@ -44,20 +41,14 @@ - - #include - #include --#ifdef __FreeBSD_kernel__ -+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - #include - #include - #include --#if __FreeBSD_kernel_version >= 700000 - #include - #include - #include - #else --#include --#include --#include --#endif --#else - #ifdef __NetBSD__ - #include - #include -@@ -107,13 +98,9 @@ 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 *); -@@ -164,7 +151,7 @@ wi_query(struct wi_device *device, struc - 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, - } - #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 *devic - 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 *devic - - 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 *devic - 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 *devi - 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 *devi - 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 *devi - 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 *devi - 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, - 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, - return(WI_OK); - } - --#endif /* defined(__NetBSD__) || defined(__FreeBSD_kernel__) */ - #endif diff --git a/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c b/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c new file mode 100644 index 000000000000..cc269cb51079 --- /dev/null +++ b/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); diff --git a/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c b/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c new file mode 100644 index 000000000000..1b2017b8f955 --- /dev/null +++ b/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 + * (FreeBSD > 700000 adaptation) ++ * 2014 J.R. Oldroyd ++ * (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 + +-#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) || defined(__FreeBSD_kernel_kernel__) || defined(__OpenBSD__) ++#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) + + #include + #include +@@ -44,20 +41,14 @@ + + #include + #include +-#ifdef __FreeBSD_kernel__ ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + #include + #include + #include +-#if __FreeBSD_kernel_version >= 700000 + #include + #include + #include + #else +-#include +-#include +-#include +-#endif +-#else + #ifdef __NetBSD__ + #include + #include +@@ -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 -- cgit v1.2.3