edbus: Let arguments_get fail if getting less args than passed

If user passed a string with more elements, return EINA_FALSE on
edbus_message_arguments_get() so he knows not all elements are
initialized. Before this patch, we would notify user of its error if he
did something like:

	i) edbus_message_arguments_get(msg, "uu", &a)
	ii) edbus_message_arguments_get(msg, "uu", &a, &b)

And "msg" containing only 1 argument.

This also fixes the case in which user is getting the elements of an
array iterator and the array is empty. We were previously returning
EINA_TRUE, even if we were not filling the variable.

Last but not least, if the user was calling
edbus_message_iter_arguments_get() in an empty array, we would return
EINA_FALSE, even if we didn't actually get any element.



SVN revision: 81170
This commit is contained in:
Lucas De Marchi 2012-12-17 18:24:31 +00:00
parent 7a2a31a436
commit e53c47bcf0
1 changed files with 3 additions and 1 deletions

View File

@ -721,6 +721,7 @@ edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signatur
dbus_signature_iter_init(&sig_iter, signature);
iter_type = dbus_message_iter_get_arg_type(&iter->dbus_iterator);
while (iter_type != DBUS_TYPE_INVALID)
{
int sig_type = dbus_signature_iter_get_current_type(&sig_iter);
@ -751,7 +752,8 @@ edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signatur
dbus_signature_iter_next(&sig_iter);
iter_type = dbus_message_iter_get_arg_type(&iter->dbus_iterator);
}
return EINA_TRUE;
return dbus_signature_iter_get_current_type(&sig_iter) == DBUS_TYPE_INVALID;
}
EAPI void