Wireshark-dev: Re: [Wireshark-dev] packet-ieee802154.c compilation error

From: Jaap Keuter <jaap.keuter@xxxxxxxxx>
Date: Tue, 02 Sep 2008 23:22:40 +0200
Hi Chris,

Yes, that is the one.
And no, that typecast doesn't solve it.
And yes, it does hide it from the larger scope, which is a bug IMHO.

Thanx,
Jaap

Maynard, Chris wrote:
Jaap,
I assume this is the line it's complaining about?:

fcs_ok = (fcs == ieee802154_crc_tvb(tvb,
tvb_reported_length(tvb)-IEEE802154_FCS_LEN));

At first glance, there doesn't seem to be anything wrong with the
comparison since fcs is a guint16 and that's exactly what
crc16_ccitt_tvb_seed() returns; however, because the comparison is
actually the following:

fcs_ok = (fcs == (crc16_ccitt_tvb_seed(tvb,
tvb_reported_length(tvb)-IEEE802154_FCS_LEN, IEEE802154_CRC_SEED) ^
IEEE802154_CRC_XOROUT));

I think the compiler is interpreting (blah ^ IEEE802154_CRC_XOROUT) ...
where IEEE802154_CRC_XOROUT is defined as 0xFFFF ... as the equivalent
of (~blah) and that's where your warning is coming from.

What if you try the following?
fcs_ok = (fcs == (guint16)(ieee802154_crc_tvb(tvb,
tvb_reported_length(tvb)-IEEE802154_FCS_LEN)));

- Chris
BTW: I ran lint on that file in case you want to have a look.  Lint
doesn't complain about that line exactly, but it might have some other
things worth at least looking over.  For example, line 703 where fcs_ok
is redeclared, but the value of fcs_ok, although assigned within the
if() scope is not actually visible outside of that scope; yet fcs_ok is
referenced later on (line 746, ...).


-----Original Message-----
From: wireshark-dev-bounces@xxxxxxxxxxxxx [mailto:wireshark-dev-
bounces@xxxxxxxxxxxxx] On Behalf Of Jaap Keuter
Sent: Tuesday, September 02, 2008 4:18 PM
To: Developer support list for Wireshark
Subject: [Wireshark-dev] packet-ieee802154.c compilation error

Hi list,

I'm running into this error for which I do not know the proper
solution:
cc1: warnings being treated as errors
packet-ieee802154.c: In function 'dissect_ieee802154_common':
packet-ieee802154.c:709: error: comparison of promoted ~unsigned with
unsigned
make[4]: *** [libdissectors_la-packet-ieee802154.lo] Error 1

$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian
4.3.1-9'
--with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-
shared
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --enable-nls --with-gxx-include-
dir=/usr/include/c++/4.3
--program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --enable-mpfr --enable-targets=all --enable-cld
--enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu
--target=i486-linux-gnu
Thread model: posix
gcc version 4.3.1 (Debian 4.3.1-9)

Any hints are welcome.

Thanx,
Jaap
_______________________________________________