ports/121167: net/wmwifi - marked broken for wrong reason - its not because of gcc 4.2

Ulrich Spoerlein uspoerlein at gmail.com
Fri Feb 29 19:30:03 UTC 2008


The following reply was made to PR ports/121167; it has been noted by GNATS.

From: Ulrich Spoerlein <uspoerlein at gmail.com>
To: bug-followup at FreeBSD.org, dierk at blaxxtarz.de
Cc:  
Subject: Re: ports/121167: net/wmwifi - marked broken for wrong reason -
	its not because of gcc 4.2
Date: Fri, 29 Feb 2008 20:19:26 +0100

 --wac7ysb48OaltWcw
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Hi,
 
 I know that the BROKEN line is in itself bogus and I already made a
 patch for wmwifi to address the issue on 7.x. I was waiting though, as I
 was wondering how many users actually use wmwifi, or if we should simply
 drop the port.
 
 Attached is a patch, which has been compile tested on 6.2 and run-tested
 on 7.0.
 
 Cheers,
 Ulrich Spoerlein
 
 --wac7ysb48OaltWcw
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="wmwifi.patch"
 
 ? working
 Index: Makefile
 ===================================================================
 RCS file: /home/ncvs/ports/net/wmwifi/Makefile,v
 retrieving revision 1.6
 diff -u -p -r1.6 Makefile
 --- Makefile	1 Oct 2007 06:20:40 -0000	1.6
 +++ Makefile	29 Feb 2008 19:15:00 -0000
 @@ -23,10 +23,4 @@ CONFIGURE_ENV+=	"CPPFLAGS=-I${X11BASE}/i
  
  PLIST_FILES=	bin/wmwifi
  
 -.include <bsd.port.pre.mk>
 -
 -.if ${OSVERSION} >= 700042
 -BROKEN=		Does not compile with GCC 4.2
 -.endif
 -
 -.include <bsd.port.post.mk>
 +.include <bsd.port.mk>
 Index: files/patch-wireless.c
 ===================================================================
 RCS file: /home/ncvs/ports/net/wmwifi/files/patch-wireless.c,v
 retrieving revision 1.3
 diff -u -p -r1.3 patch-wireless.c
 --- files/patch-wireless.c	16 Jun 2006 16:51:05 -0000	1.3
 +++ files/patch-wireless.c	29 Feb 2008 19:15:00 -0000
 @@ -1,6 +1,20 @@
 ---- src/wireless.c.orig	Tue Mar  9 20:39:17 2004
 -+++ src/wireless.c	Sun Jun 11 00:46:29 2006
 -@@ -143,6 +143,7 @@
 +--- src/wireless.c.orig	2004-03-09 20:39:17.000000000 +0100
 ++++ src/wireless.c	2007-11-01 17:58:13.170763665 +0100
 +@@ -25,7 +25,13 @@
 + #include <net/if_mib.h>
 + #include <net/if_var.h>
 + #include <netinet/in.h>
 ++#include <sys/param.h>
 ++#if __FreeBSD_version > 700045
 ++#include <net80211/ieee80211.h>
 ++#include <net80211/ieee80211_ioctl.h>
 ++#else
 + #include <dev/wi/if_wavelan_ieee.h>
 ++#endif
 + #else
 + #error "sorry, your OS is not supported yet"
 + #endif
 +@@ -143,6 +149,7 @@
   
   	max = get_max_ifs();
   	step = 0;
 @@ -8,7 +22,7 @@
   
   	if (old > max)
   		old = max; /* just be sure to not be out of bounds */
 -@@ -178,8 +179,8 @@
 +@@ -178,8 +185,8 @@
   		len = sizeof(ifmd);
   		sysctl(name, 6, &ifmd, &len, NULL, 0);
   
 @@ -19,7 +33,7 @@
   			continue;
   
   		s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 -@@ -193,9 +194,11 @@
 +@@ -193,9 +200,11 @@
   
   		if (ioctl(s, SIOCGIFMEDIA, (caddr_t) &ifmr) < 0)
   		{
 @@ -33,7 +47,7 @@
   		}
   		close(s);
   		/* we cannot monitor interfaces in hostap mode, so just
 -@@ -207,6 +210,10 @@
 +@@ -207,6 +216,10 @@
   			found++;
   		}
   	}
 @@ -44,3 +58,71 @@
   	return index;
   }
   /* how many interfaces do we have? this includes non-wireless! */
 +@@ -224,9 +237,18 @@
 + 	struct ifmibdata ifmd;
 + 
 + 	struct ifreq ifr;		/* interface stats */
 ++#if __FreeBSD_version > 700045
 ++	uint8_t buf[24*1024];
 ++	struct ieee80211req ireq;
 ++	const struct ieee80211req_scan_result *sr;
 ++#else
 + 	struct wi_req wireq;
 ++#endif
 + 	int s;
 + 
 ++	wfi->link = 0;
 ++	wfi->max_qual = 128;
 ++
 + 	/* lets find the current interface name */
 + 	name[0] = CTL_NET;
 + 	name[1] = PF_LINK;
 +@@ -247,13 +269,38 @@
 + 		perror("socket");
 + 		exit(1);
 + 	}
 +-	bzero(&ifr, sizeof(ifr));
 + 	/* struct ifreq interface name can only be 16 Bytes long as of now */
 + 	if (strlen(wfi->ifname) >= IFNAMSIZ)
 + 	{
 + 		fprintf(stderr, "ERROR: interface name too long\n");
 + 		exit(1);
 + 	}
 ++#if __FreeBSD_version > 700045
 ++	bzero(&ireq, sizeof(ireq));
 ++	strncpy(ireq.i_name, wfi->ifname, sizeof(ireq.i_name));
 ++
 ++	ireq.i_type = IEEE80211_IOC_SCAN_RESULTS;
 ++	ireq.i_data = buf;
 ++	ireq.i_len = sizeof(buf);
 ++	if (ioctl(s, SIOCG80211, &ireq) < 0) {
 ++		perror("ioctl");
 ++		exit(1);
 ++	}
 ++	close (s);
 ++
 ++	if (ireq.i_len < sizeof(struct ieee80211req_scan_result)) {
 ++		return 1;
 ++	}
 ++
 ++	sr = (const struct ieee80211req_scan_result *) buf;
 ++
 ++	/*
 ++	 * sr->isr_rssi   Signal Strength
 ++	 * sr->isr_noise  Noise
 ++	 */
 ++	wfi->link = (int) sr->isr_rssi;
 ++#else
 ++	bzero(&ifr, sizeof(ifr));
 + 	strncpy(ifr.ifr_name, wfi->ifname, strlen(wfi->ifname));
 + 	wireq.wi_type	= WI_RID_COMMS_QUALITY;
 + 	wireq.wi_len	= WI_MAX_DATALEN;
 +@@ -272,7 +319,7 @@
 + 	 * wi_val[2] = noise
 + 	 */
 + 	wfi->link = (int) wireq.wi_val[1];
 +-	wfi->max_qual = 128;
 ++#endif
 + 
 + 	return 1;	
 + }
 
 --wac7ysb48OaltWcw--



More information about the freebsd-ports-bugs mailing list