From 000d29a283b06517f0cfb599516a390e3afbf25c Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Tue, 7 Jan 2003 23:08:41 +0000 Subject: 2003-01-08 Anders Carlsson * dbus/dbus-internals.c: (_dbus_type_to_string): New function that returns a string describing a type. * dbus/dbus-marshal.c: (_dbus_demarshal_byte_array): * dbus/dbus-marshal.h: * dbus/dbus-message.c: (dbus_message_get_fields_valist), (dbus_message_iter_get_field_type), (dbus_message_iter_get_double), (dbus_message_iter_get_byte_array): * dbus/dbus-message.h: Add new convenience functions for appending and getting message fields. Also add demarshalling routines for byte arrays. --- dbus/dbus-message.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'dbus/dbus-message.c') diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index 8dd77708..49269247 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -559,7 +559,7 @@ dbus_message_get_fields_valist (DBusMessage *message, while (spec_type != 0) { msg_type = dbus_message_iter_get_field_type (iter); - + if (msg_type != spec_type) { _dbus_warn ("Field %d is specified to be of type \"%s\", but " @@ -611,15 +611,26 @@ dbus_message_get_fields_valist (DBusMessage *message, *ptr = dbus_message_iter_get_string (iter); break; } - - default: + + case DBUS_TYPE_BYTE_ARRAY: + { + char **ptr; + int *len; + + ptr = va_arg (var_args, char **); + len = va_arg (var_args, int *); + + *ptr = dbus_message_iter_get_byte_array (iter, len); + break; + } + default: _dbus_warn ("Unknown field type %d\n", spec_type); } spec_type = va_arg (var_args, int); if (spec_type != 0 && !dbus_message_iter_next (iter)) { - _dbus_warn ("More fields than exists in the message were specified"); + _dbus_warn ("More fields than exist in the message were specified\n"); dbus_message_iter_unref (iter); return FALSE; @@ -745,7 +756,7 @@ int dbus_message_iter_get_field_type (DBusMessageIter *iter) { const char *data; - + if (iter->pos >= _dbus_string_get_length (&iter->message->body)) return DBUS_TYPE_INVALID; @@ -823,6 +834,15 @@ dbus_message_iter_get_double (DBusMessageIter *iter) iter->pos + 1, NULL); } +unsigned char * +dbus_message_iter_get_byte_array (DBusMessageIter *iter, int *len) +{ + _dbus_assert (dbus_message_iter_get_field_type (iter) == DBUS_TYPE_BYTE_ARRAY); + + return _dbus_demarshal_byte_array (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, len); +} + /** @} */ /** -- cgit