diff --git a/msgpack/pack_template.h b/msgpack/pack_template.h index da54c364..53c0aaa1 100644 --- a/msgpack/pack_template.h +++ b/msgpack/pack_template.h @@ -728,7 +728,7 @@ msgpack_pack_inline_func(_map)(msgpack_pack_user x, unsigned int n) msgpack_pack_inline_func(_raw)(msgpack_pack_user x, size_t l) { if(l < 32) { - unsigned char d = 0xa0 | l; + unsigned char d = 0xa0 | (uint8_t)l; msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); } else if(l < 65536) { unsigned char buf[3]; diff --git a/msgpack/sysdep.h b/msgpack/sysdep.h index b21dc009..0a99de96 100644 --- a/msgpack/sysdep.h +++ b/msgpack/sysdep.h @@ -84,9 +84,9 @@ typedef unsigned int _msgpack_atomic_counter_t; # elif defined(_byteswap_ushort) || (defined(_MSC_VER) && _MSC_VER >= 1400) # define _msgpack_be16(x) ((uint16_t)_byteswap_ushort((unsigned short)x)) # else -# define _msgpack_be16(x) \ - ( ((((uint16_t)x) << 8) ) | \ - ((((uint16_t)x) >> 8) ) +# define _msgpack_be16(x) ( \ + ((((uint16_t)x) << 8) ) | \ + ((((uint16_t)x) >> 8) ) ) # endif #else # define _msgpack_be16(x) ntohs(x) @@ -99,10 +99,10 @@ typedef unsigned int _msgpack_atomic_counter_t; # define _msgpack_be32(x) ((uint32_t)_byteswap_ulong((unsigned long)x)) # else # define _msgpack_be32(x) \ - ( ((((uint32_t)x) << 24) ) | \ - ((((uint32_t)x) << 8) & 0x00ff0000U ) | \ - ((((uint32_t)x) >> 8) & 0x0000ff00U ) | \ - ((((uint32_t)x) >> 24) ) ) + ( ((((uint32_t)x) << 24) ) | \ + ((((uint32_t)x) << 8) & 0x00ff0000U ) | \ + ((((uint32_t)x) >> 8) & 0x0000ff00U ) | \ + ((((uint32_t)x) >> 24) ) ) # endif #else # define _msgpack_be32(x) ntohl(x) @@ -116,50 +116,79 @@ typedef unsigned int _msgpack_atomic_counter_t; # define _msgpack_be64(x) __DARWIN_OSSwapInt64(x) #else #define _msgpack_be64(x) \ - ( ((((uint64_t)x) << 56) ) | \ - ((((uint64_t)x) << 40) & 0x00ff000000000000ULL ) | \ - ((((uint64_t)x) << 24) & 0x0000ff0000000000ULL ) | \ - ((((uint64_t)x) << 8) & 0x000000ff00000000ULL ) | \ - ((((uint64_t)x) >> 8) & 0x00000000ff000000ULL ) | \ - ((((uint64_t)x) >> 24) & 0x0000000000ff0000ULL ) | \ - ((((uint64_t)x) >> 40) & 0x000000000000ff00ULL ) | \ - ((((uint64_t)x) >> 56) ) ) + ( ((((uint64_t)x) << 56) ) | \ + ((((uint64_t)x) << 40) & 0x00ff000000000000ULL ) | \ + ((((uint64_t)x) << 24) & 0x0000ff0000000000ULL ) | \ + ((((uint64_t)x) << 8) & 0x000000ff00000000ULL ) | \ + ((((uint64_t)x) >> 8) & 0x00000000ff000000ULL ) | \ + ((((uint64_t)x) >> 24) & 0x0000000000ff0000ULL ) | \ + ((((uint64_t)x) >> 40) & 0x000000000000ff00ULL ) | \ + ((((uint64_t)x) >> 56) ) ) #endif +#define _msgpack_load16(cast, from) ((cast)( \ + (((uint16_t)((uint8_t*)(from))[0]) << 8) | \ + (((uint16_t)((uint8_t*)(from))[1]) ) )) + +#define _msgpack_load32(cast, from) ((cast)( \ + (((uint32_t)((uint8_t*)(from))[0]) << 24) | \ + (((uint32_t)((uint8_t*)(from))[1]) << 16) | \ + (((uint32_t)((uint8_t*)(from))[2]) << 8) | \ + (((uint32_t)((uint8_t*)(from))[3]) ) )) + +#define _msgpack_load64(cast, from) ((cast)( \ + (((uint64_t)((uint8_t*)(from))[0]) << 56) | \ + (((uint64_t)((uint8_t*)(from))[1]) << 48) | \ + (((uint64_t)((uint8_t*)(from))[2]) << 40) | \ + (((uint64_t)((uint8_t*)(from))[3]) << 32) | \ + (((uint64_t)((uint8_t*)(from))[4]) << 24) | \ + (((uint64_t)((uint8_t*)(from))[5]) << 16) | \ + (((uint64_t)((uint8_t*)(from))[6]) << 8) | \ + (((uint64_t)((uint8_t*)(from))[7]) ) )) + #else + #define _msgpack_be16(x) (x) #define _msgpack_be32(x) (x) #define _msgpack_be64(x) (x) + +#define _msgpack_load16(cast, from) ((cast)( \ + (((uint16_t)((uint8_t*)from)[1]) << 8) | \ + (((uint16_t)((uint8_t*)from)[0]) ) )) + +#define _msgpack_load32(cast, from) ((cast)( \ + (((uint32_t)((uint8_t*)from)[3]) << 24) | \ + (((uint32_t)((uint8_t*)from)[2]) << 16) | \ + (((uint32_t)((uint8_t*)from)[1]) << 8) | \ + (((uint32_t)((uint8_t*)from)[0]) ) )) + +#define _msgpack_load64(cast, from) ((cast)( \ + (((uint64_t)((uint8_t*)from)[7]) << 56) | \ + (((uint64_t)((uint8_t*)from)[6]) << 48) | \ + (((uint64_t)((uint8_t*)from)[5]) << 40) | \ + (((uint64_t)((uint8_t*)from)[4]) << 32) | \ + (((uint64_t)((uint8_t*)from)[3]) << 24) | \ + (((uint64_t)((uint8_t*)from)[2]) << 16) | \ + (((uint64_t)((uint8_t*)from)[1]) << 8) | \ + (((uint64_t)((uint8_t*)from)[0]) ) )) #endif #define _msgpack_store16(to, num) \ - do { uint16_t val = _msgpack_be16(num); memcpy(to, &val, 2); } while(0) + do { uint16_t val = _msgpack_be16(num); memcpy(to, &val, 2); } while(0) #define _msgpack_store32(to, num) \ - do { uint32_t val = _msgpack_be32(num); memcpy(to, &val, 4); } while(0) + do { uint32_t val = _msgpack_be32(num); memcpy(to, &val, 4); } while(0) #define _msgpack_store64(to, num) \ - do { uint64_t val = _msgpack_be64(num); memcpy(to, &val, 8); } while(0) - - -#define _msgpack_load16(cast, from) ((cast)_msgpack_be16( \ - (((uint8_t*)from)[1] << 8) | ((uint8_t*)from)[0])) - -#define _msgpack_load32(cast, from) ((cast)_msgpack_be32( \ - (((uint8_t*)from)[3] << 24) | \ - (((uint8_t*)from)[2] << 16) | \ - (((uint8_t*)from)[1] << 8) | \ - (((uint8_t*)from)[0] ) )) - -#define _msgpack_load64(cast, from) ((cast)_msgpack_be64( \ - (((uint64_t)(((uint8_t*)from)[7])) << 56) | \ - (((uint64_t)(((uint8_t*)from)[6])) << 48) | \ - (((uint64_t)(((uint8_t*)from)[5])) << 40) | \ - (((uint64_t)(((uint8_t*)from)[4])) << 32) | \ - (((uint64_t)((uint8_t*)from)[3]) << 24) | \ - (((uint64_t)((uint8_t*)from)[2]) << 16) | \ - (((uint64_t)((uint8_t*)from)[1]) << 8) | \ - (((uint8_t*)from)[0] ))) + do { uint64_t val = _msgpack_be64(num); memcpy(to, &val, 8); } while(0) +/* +#define _msgpack_load16(cast, from) \ + ({ cast val; memcpy(&val, (char*)from, 2); _msgpack_be16(val); }) +#define _msgpack_load32(cast, from) \ + ({ cast val; memcpy(&val, (char*)from, 4); _msgpack_be32(val); }) +#define _msgpack_load64(cast, from) \ + ({ cast val; memcpy(&val, (char*)from, 8); _msgpack_be64(val); }) +*/ #endif /* msgpack/sysdep.h */