From 9b9858865996b3c98d44d6179abfcad87465e2de Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Wed, 20 Jul 2005 13:38:08 +0000 Subject: More EverMore fixes from Petr Slansky. --- bits.h | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'bits.h') diff --git a/bits.h b/bits.h index 7e192db4..181c0d57 100644 --- a/bits.h +++ b/bits.h @@ -37,32 +37,32 @@ union long_double { /* these are independent of byte order */ #define getsb(buf, off) ((int8_t)buf[(off)-(GET_ORIGIN)]) #define getub(buf, off) ((u_int8_t)buf[(off)-(GET_ORIGIN)]) -#define putbyte(buf,off,b) {buf[(off)-(PUT_ORIGIN)] = (unsigned char)(b);} +#define putbyte(buf,off,b) do {buf[(off)-(PUT_ORIGIN)] = (unsigned char)(b);} while (0) #ifdef LITTLE_ENDIAN_PROTOCOL -#define getsw(buf, off) ((int16_t)(((u_int16_t)getub(buf, off+1) << 8) | (u_int16_t)getub(buf, off))) -#define getuw(buf, off) ((u_int16_t)(((u_int16_t)getub(buf, off+1) << 8) | (u_int16_t)getub(buf, off))) -#define getsl(buf, off) ((int32_t)(((u_int16_t)getuw(buf, off+2) << 16) | getuw(buf, off))) -#define getul(buf, off) ((u_int32_t)(((u_int16_t)getuw(buf, off+2) << 16) | getuw(buf, off))) +#define getsw(buf, off) ((int16_t)(((u_int16_t)getub((buf), (off)+1) << 8) | (u_int16_t)getub((buf), (off)))) +#define getuw(buf, off) ((u_int16_t)(((u_int16_t)getub((buf), (off)+1) << 8) | (u_int16_t)getub((buf), (off)))) +#define getsl(buf, off) ((int32_t)(((u_int16_t)getuw((buf), (off)+2) << 16) | (u_int16_t)getuw((buf), (off)))) +#define getul(buf, off) ((u_int32_t)(((u_int16_t)getuw((buf),(off)+2) << 16) | (u_int16_t)getuw((buf), (off)))) -#define putword(buf,off,w) {putbyte(buf,off+1,(w) >> 8); putbyte(buf,off,w);} -#define putlong(buf,off,l) {putword(buf,off+2,(l) >> 16); putword(buf,off,l);} -#define getsL(buf, off) ((int64_t)(((u_int64_t)getul(buf, off+4) << 32) | getul(buf, off))) -#define getuL(buf, off) ((u_int64_t)(((u_int64_t)getul(buf, off+4) << 32) | getul(buf, off))) +#define putword(buf, off, w) do {putbyte(buf, (off)+1, (w) >> 8); putbyte(buf, (off), (w));} while (0) +#define putlong(buf, off, l) do {putword(buf, (off)+2, (l) >> 16); putword(buf, (off), (l));} while (0) +#define getsL(buf, off) ((int64_t)(((u_int64_t)getul(buf, (off)+4) << 32) | getul(buf, (off)))) +#define getuL(buf, off) ((u_int64_t)(((u_int64_t)getul(buf, (off)+4) << 32) | getul(buf, (off)))) #else /* SiRF and most other GPS protocols use big-endian (network byte order) */ -#define getsw(buf, off) ((int16_t)(((u_int16_t)getub(buf, off) << 8) | (u_int16_t)getub(buf, off+1))) -#define getuw(buf, off) ((u_int16_t)(((u_int16_t)getub(buf, off) << 8) | (u_int16_t)getub(buf, off+1))) -#define getsl(buf, off) ((int32_t)(((u_int16_t)getuw(buf, off) << 16) | getuw(buf, off+2))) -#define getul(buf, off) ((u_int32_t)(((u_int16_t)getuw(buf, off) << 16) | getuw(buf, off+2))) -#define getsL(buf, off) ((int64_t)(((u_int64_t)getul(buf, off) << 32) | getul(buf, off+4))) -#define getuL(buf, off) ((u_int64_t)(((u_int64_t)getul(buf, off) << 32) | getul(buf, off+4))) +#define getsw(buf, off) ((int16_t)(((u_int16_t)getub(buf, (off)) << 8) | (u_int16_t)getub(buf, (off)+1))) +#define getuw(buf, off) ((u_int16_t)(((u_int16_t)getub(buf, (off)) << 8) | (u_int16_t)getub(buf, (off)+1))) +#define getsl(buf, off) ((int32_t)(((u_int16_t)getuw(buf, (off)) << 16) | getuw(buf, (off)+2))) +#define getul(buf, off) ((u_int32_t)(((u_int16_t)getuw(buf, (off)) << 16) | getuw(buf, (off)+2))) +#define getsL(buf, off) ((int64_t)(((u_int64_t)getul(buf, (off)) << 32) | getul(buf, (off)+4))) +#define getuL(buf, off) ((u_int64_t)(((u_int64_t)getul(buf, (off)) << 32) | getul(buf, (off)+4))) -#define putword(buf,off,w) {putbyte(buf,off,(w) >> 8); putbyte(buf,off+1,w);} -#define putlong(buf,off,l) {putword(buf,off,(l) >> 16); putword(buf,off+2,l);} +#define putword(buf,off,w) do {putbyte(buf, (off) ,(w) >> 8); putbyte(buf, (off)+1, (w));} while (0) +#define putlong(buf,off,l) do {putword(buf, (off) ,(l) >> 16); putword(buf, (off)+2, (l));} while (0) #endif @@ -77,3 +77,4 @@ union long_double { | (session->outbuffer[2*(n)-1] << 8) \ | (session->outbuffer[2*(n)+0] << 16) \ | (session->outbuffer[2*(n)+1] << 24)) + -- cgit v1.2.1