X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dbus%2Fdbus-marshal-basic.c;h=88b19f36571164b45584c049269f534a5b3adaa8;hb=67f9cca382df0d03adfe6b619aa613d103fa77f6;hp=486f1c013ab8cf5a0ee0ab493ce1fe72b009b6f7;hpb=1aab9940777ef4ecd361a3e21d190cbaa3e64e86;p=platform%2Fupstream%2Fdbus.git diff --git a/dbus/dbus-marshal-basic.c b/dbus/dbus-marshal-basic.c index 486f1c0..88b19f3 100644 --- a/dbus/dbus-marshal-basic.c +++ b/dbus/dbus-marshal-basic.c @@ -29,6 +29,49 @@ #include +#if defined(__GNUC__) && (__GNUC__ >= 4) +# define _DBUS_ASSERT_ALIGNMENT(type, op, val) \ + _DBUS_STATIC_ASSERT (__extension__ __alignof__ (type) op val) +#else + /* not gcc, so probably no alignof operator: just use a no-op statement + * that's valid in the same contexts */ +# define _DBUS_ASSERT_ALIGNMENT(type, op, val) \ + _DBUS_STATIC_ASSERT (TRUE) +#endif + +/* True by definition, but just for completeness... */ +_DBUS_STATIC_ASSERT (sizeof (char) == 1); +_DBUS_ASSERT_ALIGNMENT (char, ==, 1); + +_DBUS_STATIC_ASSERT (sizeof (dbus_int16_t) == 2); +_DBUS_ASSERT_ALIGNMENT (dbus_int16_t, <=, 2); +_DBUS_STATIC_ASSERT (sizeof (dbus_uint16_t) == 2); +_DBUS_ASSERT_ALIGNMENT (dbus_uint16_t, <=, 2); + +_DBUS_STATIC_ASSERT (sizeof (dbus_int32_t) == 4); +_DBUS_ASSERT_ALIGNMENT (dbus_int32_t, <=, 4); +_DBUS_STATIC_ASSERT (sizeof (dbus_uint32_t) == 4); +_DBUS_ASSERT_ALIGNMENT (dbus_uint32_t, <=, 4); +_DBUS_STATIC_ASSERT (sizeof (dbus_bool_t) == 4); +_DBUS_ASSERT_ALIGNMENT (dbus_bool_t, <=, 4); + +_DBUS_STATIC_ASSERT (sizeof (double) == 8); +_DBUS_ASSERT_ALIGNMENT (double, <=, 8); + +#ifdef DBUS_HAVE_INT64 +_DBUS_STATIC_ASSERT (sizeof (dbus_int64_t) == 8); +_DBUS_ASSERT_ALIGNMENT (dbus_int64_t, <=, 8); +_DBUS_STATIC_ASSERT (sizeof (dbus_uint64_t) == 8); +_DBUS_ASSERT_ALIGNMENT (dbus_uint64_t, <=, 8); +#endif + +_DBUS_STATIC_ASSERT (sizeof (DBusBasicValue) >= 8); +/* The alignment of a DBusBasicValue might conceivably be > 8 because of the + * pointer, so we don't assert about it */ + +_DBUS_STATIC_ASSERT (sizeof (DBus8ByteStruct) == 8); +_DBUS_ASSERT_ALIGNMENT (DBus8ByteStruct, <=, 8); + /** * @defgroup DBusMarshal marshaling and unmarshaling * @ingroup DBusInternals @@ -83,7 +126,7 @@ pack_8_octets (DBusBasicValue value, else *((dbus_uint64_t*)(data)) = DBUS_UINT64_TO_BE (value.u64); #else - *(DBus8ByteStruct*)data = value.u64; + *(DBus8ByteStruct*)data = value.eight; swap_8_octets ((DBusBasicValue*)data, byte_order); #endif } @@ -133,7 +176,7 @@ swap_8_octets (DBusBasicValue *value, #ifdef DBUS_HAVE_INT64 value->u64 = DBUS_UINT64_SWAP_LE_BE (value->u64); #else - swap_bytes ((unsigned char *)value, 8); + swap_bytes (&value->bytes, 8); #endif } } @@ -154,7 +197,7 @@ unpack_8_octets (int byte_order, else r.u64 = DBUS_UINT64_FROM_BE (*(dbus_uint64_t*)data); #else - r.u64 = *(DBus8ByteStruct*)data; + r.eight = *(DBus8ByteStruct*)data; swap_8_octets (&r, byte_order); #endif