diff options
author | Anders Carlsson <andersca@codefactory.se> | 2003-01-07 23:08:41 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@codefactory.se> | 2003-01-07 23:08:41 +0000 |
commit | 000d29a283b06517f0cfb599516a390e3afbf25c (patch) | |
tree | 256cc7e3e73cb5c71f1eaa13da25fb7971b9ce27 /dbus/dbus-message.c | |
parent | 1f23ea99b37bfc8197f1c6a376f9afe08037f0f6 (diff) |
2003-01-08 Anders Carlsson <andersca@codefactory.se>
* 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.
Diffstat (limited to 'dbus/dbus-message.c')
-rw-r--r-- | dbus/dbus-message.c | 30 |
1 files changed, 25 insertions, 5 deletions
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); +} + /** @} */ /** |