Change GET/GBIT32 macros to explicitly cast final result to u32int.

Otherwise, the type of the expression will be int, and if written to
a uvlong (or just a ulong on most 64-bit systems), it will be
sign-extended.

This was going on in drawfcall with Mouse.msec, which is declared
as a ulong.

This fix assumes that the protocols only send unsigned numbers,
which is true.
This commit is contained in:
rsc 2006-11-04 20:41:42 +00:00
parent 3a19470202
commit 9a5678a8a9
2 changed files with 2 additions and 2 deletions

View file

@ -53,7 +53,7 @@ AUTOLIB(draw)
(p)[3] = (x)&0xFF
#define GET(p, x) \
((x) = (((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8) | ((p)[3])))
((x) = (u32int)(((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8) | ((p)[3])))
#define PUT2(p, x) \
(p)[0] = ((x) >> 8)&0xFF, \

View file

@ -50,7 +50,7 @@ struct Fcall
#define GBIT8(p) ((p)[0])
#define GBIT16(p) ((p)[0]|((p)[1]<<8))
#define GBIT32(p) ((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))
#define GBIT32(p) ((u32int)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)))
#define GBIT64(p) ((u32int)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) |\
((vlong)((p)[4]|((p)[5]<<8)|((p)[6]<<16)|((p)[7]<<24)) << 32))