G_GNUC_INTERNAL spice_msg_out *spice_msg_out_new(SpiceChannel *channel, int type) { spice_channel *c = channel->priv; spice_msg_out *out; g_return_val_if_fail(c != NULL, NULL); out = spice_new0(spice_msg_out, 1); out->refcount = 1; out->channel = channel; out->marshallers = c->marshallers; out->marshaller = spice_marshaller_new(); out->header = (SpiceDataHeader *) spice_marshaller_reserve_space(out->marshaller, sizeof(SpiceDataHeader)); spice_marshaller_set_base(out->marshaller, sizeof(SpiceDataHeader)); out->header->serial = c->serial++; out->header->type = type; out->header->sub_list = 0; return out; }
0xef, 0xcd, 0xab, 0x90, 0x78, 0x56, 0x34, 0x12, /* data */ }; int main(int argc G_GNUC_UNUSED, char **argv G_GNUC_UNUSED) { SpiceMarshaller *marshaller; SpiceMsgMainShortDataSubMarshall *msg; size_t len; int free_res; uint8_t *data; msg = spice_malloc0(sizeof(SpiceMsgMainShortDataSubMarshall) + 2 * sizeof(uint64_t)); msg->data_size = 2; msg->data[0] = 0x1234567890abcdef; msg->data[1] = 0x1234567890abcdef; marshaller = spice_marshaller_new(); spice_marshall_msg_main_ShortDataSubMarshall(marshaller, msg); spice_marshaller_flush(marshaller); data = spice_marshaller_linearize(marshaller, 0, &len, &free_res); g_assert_cmpint(len, ==, G_N_ELEMENTS(expected_data)); g_assert_true(memcmp(data, expected_data, len) == 0); if (free_res) { free(data); } spice_marshaller_destroy(marshaller); free(msg); return 0; }