Two tips:
    - is unnecessary check if msg have the expected signature, when you get data
    from msg you need pass the signature, if signature in msg if different of
    passed it will return EINA_FALSE.
    - you can use a single edbus_message_iter_arguments_get(sub, "iiddd(idd)"...
---
 trunk/PROTO/elocation/src/lib/elocation.c |   36 +++++++----------------------
 1 file changed, 8 insertions(+), 28 deletions(-)

diff --git a/trunk/PROTO/elocation/src/lib/elocation.c 
b/trunk/PROTO/elocation/src/lib/elocation.c
index 88c7e6b..6777f62 100644
--- a/trunk/PROTO/elocation/src/lib/elocation.c
+++ b/trunk/PROTO/elocation/src/lib/elocation.c
@@ -103,22 +103,17 @@ static void
 unmarshall_address(const EDBus_Message *reply)
 {
    int32_t level, timestamp;
-   EDBus_Message_Iter *iter, *sub, *dict, *entry;
+   EDBus_Message_Iter *sub, *dict, *entry;
    double horizontal;
    double vertical;
-   const char *key, *signature;
+   const char *key;
    char *value;
 
-   signature = edbus_message_signature_get(reply);
-   if (strcmp(signature,"ia{ss}(idd)")) return;
-
-   iter = edbus_message_iter_get(reply);
+   if (!edbus_message_arguments_get(reply, "ia{ss}(idd)", &timestamp, &dict, 
&sub))
+     return;
 
-   edbus_message_iter_get_and_next(iter, 'i', &timestamp);
    address->timestamp = timestamp;
 
-   edbus_message_iter_arguments_get(iter, "a{ss}", &dict);
-
    address->country = NULL;
    address->countrycode = NULL;
    address->locality = NULL;
@@ -156,7 +151,6 @@ unmarshall_address(const EDBus_Message *reply)
          }
     }
 
-   edbus_message_iter_get_and_next(iter, 'r', &sub);
    edbus_message_iter_arguments_get(sub, "idd", &level, &horizontal, 
&vertical);
    address->accur->level = level;
    address->accur->horizontal = horizontal;
@@ -186,9 +180,8 @@ unmarshall_position(const EDBus_Message *reply)
    double latitude = 0.0;
    double longitude = 0.0;
    double altitude = 0.0;
-   EDBus_Message_Iter *iter, *sub;
+   EDBus_Message_Iter *sub;
    const char *err, *errmsg;
-   const char *signature;
 
    if (edbus_message_error_get(reply, &err, &errmsg))
      {
@@ -196,23 +189,10 @@ unmarshall_position(const EDBus_Message *reply)
         return;
      }
 
-   signature = edbus_message_signature_get(reply);
-   if (strcmp(signature, "iiddd(idd)"))
-     {
-        ERR("Error: position callback message did not match signature");
-        return;
-     }
-
-   iter = edbus_message_iter_get(reply);
-
-   // Possible to use a single edbus_message_iter_arguments_get(sub, 
"iiddd(idd)" ... here?
+   if (!edbus_message_arguments_get(reply, "iiddd(idd)", &fields, &timestamp,
+                                    &latitude, &longitude, &altitude, &sub))
+     return;
 
-   edbus_message_iter_get_and_next(iter, 'i', &fields);
-   edbus_message_iter_get_and_next(iter, 'i', &timestamp);
-   edbus_message_iter_get_and_next(iter, 'd', &latitude);
-   edbus_message_iter_get_and_next(iter, 'd', &longitude);
-   edbus_message_iter_get_and_next(iter, 'd', &altitude);
-   edbus_message_iter_get_and_next(iter, 'r', &sub );
    edbus_message_iter_arguments_get(sub, "idd", &level, &horizontal, 
&vertical);
 
    position->timestamp = timestamp;
-- 
1.7.10.4


------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to