Empty Arrays

Thiago Macieira thiago at kde.org
Sun Jan 28 16:41:30 PST 2007


Kevin Krammer wrote:
>Today I found a problem when retrieving a zero length string array.
>
>The dbus_message_iter_recurse() call does not indicate whether the entry
>iterator points to a valid position and I haven't found a function which
>would tell me (might have missed it though).
>
>Right now I recurse and then detect that dbus_message_iter_get_arg_type
> is 0, i.e. directly checking this literal. In case this is the way to
> do this, is there a an official define/typedef to check against?

That is the correct way to detect it.

the dbus_message_iter_has_next function is broken: it tells you if there's 
at least 2 items in the array, so it can't be used as loop conditionals.

Generally, you can loop like this:

  dbus_message_iter_recurse(&array_it, &element_it);
  dbus_message_iter_next(&array_it);
  while (dbus_message_iter_get_arg_type(&element_It) == DBUS_TYPE_INVALID)
  {
    /* do something with element_it */
    dbus_message_iter_next(&element_it);
  }

This should work for 0-, 1- and many-sized arrays.

-- 
  Thiago Macieira  -  thiago (AT) macieira.info - thiago (AT) kde.org
    PGP/GPG: 0x6EF45358; fingerprint:
    E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/dbus/attachments/20070129/62da9921/attachment.pgp


More information about the dbus mailing list