From 61411a061c09def43687153e6c734ff27b7fd556 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Wed, 11 May 2005 18:07:22 +0000 Subject: 2005-05-11 Colin Walters * dbus/dbus-signature.c (dbus_signature_iter_get_signature): New function, returns signature string for signature iter. * dbus/dbus-signature.h: Prototype it. * dbus/dbus-message.c (dbus_message_iter_get_signature): New function, returns signature string for message iter. (dbus_message_iter_get_array_len): New function, returns length of array. (dbus_message_iter_get_fixed_array): Fix assertion; this function should be used when the iter is pointing to the contents of an array * dbus/dbus-message.h: Prototypes. * dbus/dbus-marshal-recursive.c (_dbus_type_reader_get_array_length): New function; returns length of an array. * dbus/dbus-marshal-recursive.h: Prototype it. --- dbus/dbus-signature.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'dbus/dbus-signature.c') diff --git a/dbus/dbus-signature.c b/dbus/dbus-signature.c index 7cbae7c2..7118bd25 100644 --- a/dbus/dbus-signature.c +++ b/dbus/dbus-signature.c @@ -81,6 +81,36 @@ dbus_signature_iter_get_current_type (const DBusSignatureIter *iter) return _dbus_first_type_in_signature_c_str (real_iter->pos, 0); } +/** + * Returns the full type signature represented by the current + * iterator as a C string. + * + * @param iter pointer to an iterator + * @returns current signature; or NULL on OOM. Should be freed with #dbus_free + */ +char * +dbus_signature_iter_get_signature (const DBusSignatureIter *iter) +{ + DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter; + DBusString str; + char *ret; + int pos; + + if (!_dbus_string_init (&str)) + return NULL; + + pos = 0; + _dbus_type_signature_next (real_iter->pos, &pos); + + if (!_dbus_string_append_len (&str, real_iter->pos, pos)) + return NULL; + if (!_dbus_string_steal_data (&str, &ret)) + ret = NULL; + _dbus_string_free (&str); + + return ret; +} + /** * Convenience function for returning the element type of an array; * This function allows you to avoid initializing a sub-iterator and -- cgit