From dd25e02d5c0f96726c7f840369b7cf7707da6868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Sat, 23 Mar 2013 00:24:23 -0300 Subject: [PATCH] eldbus: Add eldbus_message_iter_fixed_array_append() --- src/examples/eldbus/complex-types-server.c | 5 ++--- src/lib/eldbus/eldbus_message.c | 10 ++++++++++ src/lib/eldbus/eldbus_message.h | 11 +++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/examples/eldbus/complex-types-server.c b/src/examples/eldbus/complex-types-server.c index 125fef81c0..9e7f395e6c 100644 --- a/src/examples/eldbus/complex-types-server.c +++ b/src/examples/eldbus/complex-types-server.c @@ -142,14 +142,13 @@ _send_array_int(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_ { Eldbus_Message *reply = eldbus_message_method_return_new(msg); Eldbus_Message_Iter *iter, *array; - int i; + int numbers[] = { 10, 9, 8, 7, 6, 5 }; printf("- sendArrayInt\n\n"); iter = eldbus_message_iter_get(reply); array = eldbus_message_iter_container_new(iter, 'a', "i"); - for (i = 0; i < 5; i++) - eldbus_message_iter_arguments_append(array, "i", i); + eldbus_message_iter_fixed_array_append(array, 'i', numbers, EINA_C_ARRAY_LENGTH(numbers)); eldbus_message_iter_container_close(iter, array); return reply; diff --git a/src/lib/eldbus/eldbus_message.c b/src/lib/eldbus/eldbus_message.c index 85fbe56014..4eb59632e3 100644 --- a/src/lib/eldbus/eldbus_message.c +++ b/src/lib/eldbus/eldbus_message.c @@ -548,6 +548,16 @@ eldbus_message_iter_basic_append(Eldbus_Message_Iter *iter, int type, ...) return r; } +EAPI Eina_Bool +eldbus_message_iter_fixed_array_append(Eldbus_Message_Iter *iter, int type, const void *array, unsigned int size) +{ + ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); + EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE); + EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_type_is_basic(type), EINA_FALSE); + return dbus_message_iter_append_fixed_array(&iter->dbus_iterator, type, &array, (int)size); +} + EAPI void eldbus_message_iter_basic_get(Eldbus_Message_Iter *iter, void *value) { diff --git a/src/lib/eldbus/eldbus_message.h b/src/lib/eldbus/eldbus_message.h index 4c174cb747..16c26bb1d1 100644 --- a/src/lib/eldbus/eldbus_message.h +++ b/src/lib/eldbus/eldbus_message.h @@ -213,6 +213,17 @@ EAPI Eina_Bool eldbus_message_iter_arguments_append(Eldbus_Message */ EAPI Eina_Bool eldbus_message_iter_arguments_vappend(Eldbus_Message_Iter *iter, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2, 3); + +/** + * Append a array of basic type with fixed size to Eldbus_Message_Iter. + * + * @param iter iterator + * @param type basic type that will be appended + * @param array data to append + * @param size of array + */ +EAPI Eina_Bool eldbus_message_iter_fixed_array_append(Eldbus_Message_Iter *iter, int type, const void *array, unsigned int size); + /** * @brief Closes a container-typed value appended to the message. *