summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-signature.c
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2005-05-11 18:07:22 +0000
committerColin Walters <walters@verbum.org>2005-05-11 18:07:22 +0000
commit61411a061c09def43687153e6c734ff27b7fd556 (patch)
tree486ef0556c8c5cd6bfd572b8a746f21c19f272a8 /dbus/dbus-signature.c
parentca01b211125953bdada46b16729e156a3c365a79 (diff)
2005-05-11 Colin Walters <walters@verbum.org>
* 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.
Diffstat (limited to 'dbus/dbus-signature.c')
-rw-r--r--dbus/dbus-signature.c30
1 files changed, 30 insertions, 0 deletions
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
@@ -82,6 +82,36 @@ dbus_signature_iter_get_current_type (const DBusSignatureIter *iter)
}
/**
+ * 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
* getting its current type.