Subject: Re: [Patch net-next] net: clean up skb headers code

From: Antonio Quartulli <[email-masked]>
Date: Thu, 30 May 2013 10:59:04 +0200

On Wed, May 29, 2013 at 10:02:06PM +0100, Ben Hutchings wrote:
> On Wed, 2013-05-29 at 21:44 +0200, Antonio Quartulli wrote:
> > On Wed, May 29, 2013 at 08:34:33PM +0100, Ben Hutchings wrote:
> > > On Tue, 2013-05-28 at 23:36 -0700, David Miller wrote:
> > > > From: Cong Wang <[email-masked]>
> > > > Date: Wed, 29 May 2013 14:09:00 +0800
> > > > 
> > > > > commit 1a37e412a0225fcba5587 (net: Use 16bits for *_headers
> > > > > fields of struct skbuff) converts skb->*_header to u16,
> > > > > therefore 1) we could just use 0xFFFFF instead of (__u16) ~0U
> > > > > 2) some #if NET_SKBUFF_DATA_USES_OFFSET is useless now.
> > > > > 
> > > > > 
> > > > > Cc: David S. Miller <[email-masked]>
> > > > > Cc: Simon Horman <[email-masked]>
> > > > > Signed-off-by: Cong Wang <[email-masked]>
> > > > 
> > > > I want to use something that will either break the build or
> > > > automatically work if the type changes again.
> > > > 
> > > > So something like "X = (typeof(X)) ~0U;".
> > > 
> > > I think you mean ~(typeof(X))0.
> > 
> > Am I wrong or you should cast the value once again, like this:
> > 
> > ((typeof(X))~(typeof(X))0)
> > 
> > because the ~ operator will implicitly cast the argument to int (if I remember
> > correctly).
> 
> It will promote to at least int, but that still results in the right
> value and doesn't provoke a warning.  Try this test (with -Wall
> -Wextra):

thanks for the test code Ben.

Yeah it gives the results you expected. Then I don't know why somebody suggested
us to do this double cast in batman-adv when we wanted to obtain the same.

At this point I'll remove the double cast in our code too.

Thanks.

Cheers,

-- 
Antonio Quartulli

..each of us alone is worth nothing..
Ernesto "Che" Guevara