From c0aa687b6ef7d1ae4b8a99cf5d3a1dfb50b7e392 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Thu, 30 Apr 2015 11:38:22 +0200 Subject: Properly iterate complex dbus messages, they can not be read otherwise Signed-off-by: Olliver Schinagl --- src/eulogium.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/eulogium.c b/src/eulogium.c index 7519158..5342e66 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -1147,16 +1147,21 @@ static void _on_get_status_ret(void *data, const Eldbus_Message *msg, Eldbus_Pen { const char *errname, *errmsg; struct eulogium_data *eulogium = data; + Eldbus_Message_Iter *iter; struct _status_msg status; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); return; } - if (eldbus_message_arguments_get(msg, "(ns)", &status)) { + if (!eldbus_message_arguments_get(msg, "(ns)", &iter)) { EINA_LOG_ERR("Failed to get printer status."); return; } + if (!eldbus_message_iter_arguments_get(iter, "ns", &status.i, &status.s)) { + EINA_LOG_ERR("Message content does not match expected \"ns\" signature."); + return; + } eulogium_printer_status_set(eulogium, &status); } @@ -1164,14 +1169,19 @@ static void _on_status_changed_ret(void *data, const Eldbus_Message *msg) { const char *errname, *errmsg; struct eulogium_data *eulogium = data; + Eldbus_Message_Iter *iter; struct _status_msg status; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); return; } - if (eldbus_message_arguments_get(msg, "(ns)", &status)) { - EINA_LOG_ERR("Failed to get printer status."); + if (!eldbus_message_arguments_get(msg, "(ns)", &iter)) { + EINA_LOG_ERR("Printer status signal failed."); + return; + } + if (!eldbus_message_iter_arguments_get(iter, "ns", &status.i, &status.s)) { + EINA_LOG_ERR("Signal content does not match expected \"ns\" signature."); return; } eulogium_printer_status_set(eulogium, &status); -- cgit v0.12