From aa5fc3925687b24c2a2a9dfa00d03c30fe868674 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= <zehortigoza@gmail.com>
Date: Sat, 23 Mar 2013 00:24:23 -0300
Subject: [PATCH 1/3] edbus: Add edbus_message_iter_fixed_array_append()

---
 src/examples/edbus/complex-types-server.c |    5 ++---
 src/lib/edbus/edbus_message.c             |   10 ++++++++++
 src/lib/edbus/edbus_message.h             |   11 +++++++++++
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/examples/edbus/complex-types-server.c b/src/examples/edbus/complex-types-server.c
index 2409ce7..e51cb8c 100644
--- a/src/examples/edbus/complex-types-server.c
+++ b/src/examples/edbus/complex-types-server.c
@@ -142,14 +142,13 @@ _send_array_int(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Me
 {
    EDBus_Message *reply = edbus_message_method_return_new(msg);
    EDBus_Message_Iter *iter, *array;
-   int i;
+   int numbers[] = { 10, 9, 8, 7, 6, 5 };
 
    printf("- sendArrayInt\n\n");
 
    iter = edbus_message_iter_get(reply);
    array = edbus_message_iter_container_new(iter, 'a', "i");
-   for (i = 0; i < 5; i++)
-     edbus_message_iter_arguments_append(array, "i", i);
+   edbus_message_iter_fixed_array_append(array, 'i', numbers, EINA_C_ARRAY_LENGTH(numbers));
    edbus_message_iter_container_close(iter, array);
 
    return reply;
diff --git a/src/lib/edbus/edbus_message.c b/src/lib/edbus/edbus_message.c
index 5d14efb..3757e39 100644
--- a/src/lib/edbus/edbus_message.c
+++ b/src/lib/edbus/edbus_message.c
@@ -548,6 +548,16 @@ edbus_message_iter_basic_append(EDBus_Message_Iter *iter, int type, ...)
    return r;
 }
 
+EAPI Eina_Bool
+edbus_message_iter_fixed_array_append(EDBus_Message_Iter *iter, int type, const void *array, unsigned int size)
+{
+   EDBUS_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
 edbus_message_iter_basic_get(EDBus_Message_Iter *iter, void *value)
 {
diff --git a/src/lib/edbus/edbus_message.h b/src/lib/edbus/edbus_message.h
index 000e2dd..7c0037a 100644
--- a/src/lib/edbus/edbus_message.h
+++ b/src/lib/edbus/edbus_message.h
@@ -213,6 +213,17 @@ EAPI Eina_Bool               edbus_message_iter_arguments_append(EDBus_Message_I
  */
 EAPI Eina_Bool               edbus_message_iter_arguments_vappend(EDBus_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 EDBus_Message_Iter.
+ *
+ * @param iter iterator
+ * @param type basic type that will be append
+ * @param array data to be append
+ * @param size of array
+ */
+EAPI Eina_Bool               edbus_message_iter_fixed_array_append(EDBus_Message_Iter *iter, int type, const void *array, unsigned int size);
+
 /**
  * @brief Closes a container-typed value appended to the message.
  *
-- 
1.7.9.5

