diff options
author | Alok Barsode <alok.barsode@linux.intel.com> | 2012-04-05 13:20:13 +0300 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-04-05 18:54:49 +0300 |
commit | 7a1a8e658bf3fcba09efbb842fdf6c739a5cea67 (patch) | |
tree | da2ad29fcebd10d7e9d1e46251fd291b2311149d /src/clock.c | |
parent | d92d7610a4a0f40b112eadbbe826d5f394fed880 (diff) | |
download | connman-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.c | 26 |
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); |