summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrik Flykt <patrik.flykt@linux.intel.com>2013-02-19 14:44:23 +0200
committerPatrik Flykt <patrik.flykt@linux.intel.com>2013-02-21 16:22:31 +0200
commitae0b3b71f411be9daf9b623056925286da9ce550 (patch)
tree289612f33eaea3a366d98299bac3b7075c1f72e2
parent012cc5ddc7035851e0cc4411f2ea4fc47c551629 (diff)
downloadconnman-ae0b3b71f411be9daf9b623056925286da9ce550.tar.gz
connman-ae0b3b71f411be9daf9b623056925286da9ce550.tar.bz2
connman-ae0b3b71f411be9daf9b623056925286da9ce550.zip
client: Return the number of added dict entries
Check that both the dict entry name and data are non-NULL, the dict data does not start with '--' indicating a new option and that the length is not exhausted. Return the number of dict entries.
-rw-r--r--client/services.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/client/services.c b/client/services.c
index c8343dd5..1dddbad1 100644
--- a/client/services.c
+++ b/client/services.c
@@ -88,11 +88,11 @@ static int append_property_array(DBusMessageIter *iter, char *property,
return i;
}
-static void append_property_dict(DBusMessageIter *iter, char *property,
+static int append_property_dict(DBusMessageIter *iter, char *property,
char **keys, char **data, int num_args)
{
DBusMessageIter value, dict, entry, dict_key;
- int i;
+ int i = 0;
unsigned char prefix;
dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &property);
@@ -102,7 +102,12 @@ static void append_property_dict(DBusMessageIter *iter, char *property,
dbus_dict_open(&value, &dict);
- for (i = 0; i < num_args; i++) {
+ while (keys[i] != NULL && data[i] != NULL
+ && strncmp(data[i], "--", 2) != 0) {
+
+ if (num_args > 0 && i == num_args)
+ break;
+
dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY,
NULL, &entry);
dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING,
@@ -133,10 +138,14 @@ static void append_property_dict(DBusMessageIter *iter, char *property,
}
dbus_message_iter_close_container(&entry, &dict_key);
dbus_message_iter_close_container(&dict, &entry);
+
+ i++;
}
/* Close {sv}, then close a{sv} */
dbus_dict_close(&value, &dict);
dbus_dict_close(iter, &value);
+
+ return i;
}
void iterate_array(DBusMessageIter *iter)