__VA_ARGS__izing IEEE80211_DPRINTF[2]()

Sam Leffler sam at errno.com
Wed Nov 5 13:59:35 PST 2003

On Wednesday 05 November 2003 10:04 am, Brian Fundakowski Feldman wrote:
> Would it be a problem to make the following change to src/sys/net80211 so
> that the debug messages aren't totally useless for systems that have more
> than one card (or confusing on systems that just have one)?  Obviously, it
> would also involve removing the extra parentheses in each of the callers as
> well.
> Old:
> #define IEEE80211_DPRINTF(X)    if (ieee80211_debug) printf X
> #define IEEE80211_DPRINTF2(X)   if (ieee80211_debug>1) printf X
> New:
> #define	IEEE80211_DPRINTF(...)	do {						\
> 	if (ieee80211_debug)							\
> 		if_printf(&ic->ic_ifp, __VA_ARGS__);				\
> while (0)
> The only place this wouldn't work is ieee80211_decap(), so I'd change it to
> add a local "ic" variable when compiled for debugging.  There's an easy
> fallback for non-C99 compilers, too; it just wouldn't print the interface:
> static __inline void
> IEEE80211_DPRINTF(const char *fmt, ...)
> {
> 	if (ieee80211_debug) {
> 		va_list ap;
> 		va_start(ap, fmt);
> 		(void)vprintf(fmt, ap);
> 		va_end(ap);
> 	}
> }

I can't see what your intent is from the above.  If the point is to use 
if_printf everywhere so all the printfs have a device prepended to the 
message then I'm fine with that.  However I think it's a bad idea to depend 
on local variables existing.  If you're going to do it, then add an explicit 
argument to the macros.

If you're trying to deal with debugging systems w/ multiple 802.11 cards then 
you probably want debugging enabled on a per-if basis which this doesn't 

Regardless, in all this remember that this code is shared with other systems 
so changes like this shouldn't be done lightly. 


More information about the freebsd-arch mailing list