From bb8f518d07adffbefcc7d592af0655b2afa4ab19 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sat, 1 Jan 2005 02:35:09 +0000 Subject: add int64 to test suites, fix minor bug where marshaling assumed that DBusOctets8 was aligned when passed in as a function argument --- dbus/dbus-marshal-recursive.c | 98 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) (limited to 'dbus/dbus-marshal-recursive.c') diff --git a/dbus/dbus-marshal-recursive.c b/dbus/dbus-marshal-recursive.c index b89535e8..749c270c 100644 --- a/dbus/dbus-marshal-recursive.c +++ b/dbus/dbus-marshal-recursive.c @@ -1434,6 +1434,14 @@ static dbus_bool_t int32_read_value (TestTypeNode *node, 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, @@ -1504,6 +1512,26 @@ static const TestTypeNodeClass uint32_class = { 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), @@ -1557,7 +1585,9 @@ static const TestTypeNodeClass array_2_class = { static const TestTypeNodeClass* const basic_nodes[] = { &int32_class, - &uint32_class + &uint32_class, + &int64_class, + &uint64_class }; #define N_BASICS (_DBUS_N_ELEMENTS (basic_nodes)) @@ -1736,9 +1766,17 @@ run_test_nodes_in_one_configuration (TestTypeNode **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); } @@ -2216,6 +2254,64 @@ int32_read_value (TestTypeNode *node, 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, -- cgit