}
static void
+swap_8_octets (DBusOctets8 *value,
+ int byte_order)
+{
+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
+ {
+#ifdef DBUS_HAVE_INT64
+ value->u = DBUS_UINT64_SWAP_LE_BE (value->u);
+#else
+ swap_bytes ((unsigned char *)value, 8);
+#endif
+ }
+}
+
+static void
pack_8_octets (DBusOctets8 value,
int byte_order,
unsigned char *data)
*((dbus_uint64_t*)(data)) = DBUS_UINT64_TO_BE (value.u);
#else
memcpy (data, &value, 8);
- if (byte_order != DBUS_COMPILER_BYTE_ORDER)
- swap_bytes ((unsigned char *)data, 8);
+ swap_8_octets ((DBusOctets8*)data, byte_order);
#endif
}
DBusOctets8 value)
{
_dbus_assert (sizeof (value) == 8);
-
- if (byte_order != DBUS_COMPILER_BYTE_ORDER)
- pack_8_octets (value, byte_order, (unsigned char*) &value); /* pack into self, swapping as we go */
+ swap_8_octets (&value, byte_order);
+
return _dbus_string_insert_8_aligned (str, insert_at,
(const unsigned char *)&value);
}
DataBlock *block,
DBusTypeReader *reader,
int seed);
+static dbus_bool_t int64_write_value (TestTypeNode *node,
+ DataBlock *block,
+ DBusTypeWriter *writer,
+ int seed);
+static dbus_bool_t int64_read_value (TestTypeNode *node,
+ DataBlock *block,
+ DBusTypeReader *reader,
+ int seed);
static dbus_bool_t struct_1_write_value (TestTypeNode *node,
DataBlock *block,
DBusTypeWriter *writer,
NULL
};
+static const TestTypeNodeClass int64_class = {
+ DBUS_TYPE_INT64,
+ sizeof (TestTypeNode),
+ NULL,
+ NULL,
+ int64_write_value,
+ int64_read_value,
+ NULL
+};
+
+static const TestTypeNodeClass uint64_class = {
+ DBUS_TYPE_UINT64,
+ sizeof (TestTypeNode),
+ NULL,
+ NULL,
+ int64_write_value, /* recycle from int64 */
+ int64_read_value, /* recycle from int64 */
+ NULL
+};
+
static const TestTypeNodeClass struct_1_class = {
DBUS_TYPE_STRUCT,
sizeof (TestTypeNodeContainer),
static const TestTypeNodeClass* const
basic_nodes[] = {
&int32_class,
- &uint32_class
+ &uint32_class,
+ &int64_class,
+ &uint64_class
};
#define N_BASICS (_DBUS_N_ELEMENTS (basic_nodes))
nid.n_nodes = n_nodes;
nid.byte_order = byte_order;
+ /* FIXME put the OOM testing back once we debug everything and are willing to
+ * wait for it to run ;-)
+ */
+#if 0
_dbus_test_oom_handling ("running test node",
run_test_nodes_iteration,
&nid);
+#else
+ if (!run_test_nodes_iteration (&nid))
+ _dbus_assert_not_reached ("no memory");
+#endif
data_block_free (&block);
}
return TRUE;
}
+#ifdef DBUS_HAVE_INT64
+static dbus_int64_t
+int64_from_seed (int seed)
+{
+ dbus_int32_t v32;
+ dbus_int64_t v;
+
+ v32 = int32_from_seed (seed);
+
+ v = (((dbus_int64_t)v32) << 32) | (~v32);
+
+ return v;
+}
+#endif
+
+static dbus_bool_t
+int64_write_value (TestTypeNode *node,
+ DataBlock *block,
+ DBusTypeWriter *writer,
+ int seed)
+{
+#ifdef DBUS_HAVE_INT64
+ /* also used for uint64 */
+ dbus_int64_t v;
+
+ v = int64_from_seed (seed);
+
+ return _dbus_type_writer_write_basic (writer,
+ node->klass->typecode,
+ &v);
+#else
+ return TRUE;
+#endif
+}
+
+static dbus_bool_t
+int64_read_value (TestTypeNode *node,
+ DataBlock *block,
+ DBusTypeReader *reader,
+ int seed)
+{
+#ifdef DBUS_HAVE_INT64
+ /* also used for uint64 */
+ dbus_int64_t v;
+
+ check_expected_type (reader, node->klass->typecode);
+
+ _dbus_type_reader_read_basic (reader,
+ (dbus_int64_t*) &v);
+
+ _dbus_assert (v == int64_from_seed (seed));
+
+ return TRUE;
+#else
+ return TRUE;
+#endif
+}
+
static dbus_bool_t
struct_N_write_value (TestTypeNode *node,
DataBlock *block,