summaryrefslogtreecommitdiff
path: root/src/clock.c
diff options
context:
space:
mode:
authorAlok Barsode <alok.barsode@linux.intel.com>2012-04-05 13:20:13 +0300
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-04-05 18:54:49 +0300
commit7a1a8e658bf3fcba09efbb842fdf6c739a5cea67 (patch)
treeda2ad29fcebd10d7e9d1e46251fd291b2311149d /src/clock.c
parentd92d7610a4a0f40b112eadbbe826d5f394fed880 (diff)
downloadconnman-7a1a8e658bf3fcba09efbb842fdf6c739a5cea67.tar.gz
connman-7a1a8e658bf3fcba09efbb842fdf6c739a5cea67.tar.bz2
connman-7a1a8e658bf3fcba09efbb842fdf6c739a5cea67.zip
Replace older system timeserver values with new ones instead of appending
Fixes BMC#24997.
Diffstat (limited to 'src/clock.c')
-rw-r--r--src/clock.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/clock.c b/src/clock.c
index c3644ea9..adb18869 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -260,23 +260,41 @@ static DBusMessage *set_property(DBusConnection *conn,
DBUS_TYPE_STRING, &strval);
} else if (g_str_equal(name, "Timeservers") == TRUE) {
DBusMessageIter entry;
+ char **str = NULL;
+ GSList *list = NULL;
+ int count = 0;
if (type != DBUS_TYPE_ARRAY)
return __connman_error_invalid_arguments(msg);
dbus_message_iter_recurse(&value, &entry);
- if (dbus_message_iter_get_arg_type(&entry) == DBUS_TYPE_INVALID)
- __connman_timeserver_system_append(NULL);
-
while (dbus_message_iter_get_arg_type(&entry) == DBUS_TYPE_STRING) {
const char *val;
dbus_message_iter_get_basic(&entry, &val);
- __connman_timeserver_system_append(val);
+
+ list = g_slist_prepend(list, strdup(val));
+ count++;
+
dbus_message_iter_next(&entry);
}
+ if (list != NULL) {
+ str = g_new0(char *, count+1);
+
+ while (list != NULL) {
+ count--;
+ str[count] = list->data;
+ list = g_slist_delete_link(list, list);
+ };
+ }
+
+ __connman_timeserver_system_set(str);
+
+ if (str != NULL)
+ g_strfreev(str);
+
connman_dbus_property_changed_array(CONNMAN_MANAGER_PATH,
CONNMAN_CLOCK_INTERFACE, "Timeservers",
DBUS_TYPE_STRING, append_timeservers, NULL);