This fix is probably correct on 32bit systems,
but i think it will not work on 64bit systems.
sizeof(signed long) would be 8 and therefore the
cast from u_int32_t will map all the values to
non-negative part of long int.
You would like to use int (like in ospfd) and
change the type of seqnuma, seqnumb to that.
The type int32_t would be even more proper, but
sizeof(int) is 4 on relevant platforms.
Signed-off: Ondrej Zajicek <santiago@crfreenet.org>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Yasuhiro Ohara <yasu@jaist.ac.jp>
(cherry picked from commit
bdd8cd70a042473477f9144c9cedb8dde11ba2c1)
int
ospf6_lsa_compare (struct ospf6_lsa *a, struct ospf6_lsa *b)
{
- int seqnuma, seqnumb;
+ int32_t seqnuma, seqnumb;
u_int16_t cksuma, cksumb;
u_int16_t agea, ageb;
assert (b && b->header);
assert (OSPF6_LSA_IS_SAME (a, b));
- seqnuma = (int) ntohl (a->header->seqnum);
- seqnumb = (int) ntohl (b->header->seqnum);
+ seqnuma = (int32_t) ntohl (a->header->seqnum);
+ seqnumb = (int32_t) ntohl (b->header->seqnum);
/* compare by sequence number */
if (seqnuma > seqnumb)