From: Alok Barsode <[email protected]>
Fixes BMC#24997.
---
include/timeserver.h | 3 +-
src/clock.c | 18 ++++++++--
src/timeserver.c | 85 ++------------------------------------------------
3 files changed, 18 insertions(+), 88 deletions(-)
diff --git a/include/timeserver.h b/include/timeserver.h
index d124537..2a45384 100644
--- a/include/timeserver.h
+++ b/include/timeserver.h
@@ -26,8 +26,7 @@
extern "C" {
#endif
-int __connman_timeserver_system_append(const char *server);
-int __connman_timeserver_system_remove(const char *server);
+int __connman_timeserver_system_set(const char *server);
#ifdef __cplusplus
}
diff --git a/src/clock.c b/src/clock.c
index c3644ea..559d08f 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -260,23 +260,33 @@ static DBusMessage *set_property(DBusConnection *conn,
DBUS_TYPE_STRING, &strval);
} else if (g_str_equal(name, "Timeservers") == TRUE) {
DBusMessageIter entry;
+ char *str = NULL;
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);
+
+ if (str == NULL)
+ str = g_strdup(val);
+ else {
+ char *temp = g_strdup_printf("%s %s", str, val);
+ g_free(str);
+ str = temp;
+ }
dbus_message_iter_next(&entry);
}
+ __connman_timeserver_system_set(str);
+
+ if (str != NULL)
+ g_free(str);
+
connman_dbus_property_changed_array(CONNMAN_MANAGER_PATH,
CONNMAN_CLOCK_INTERFACE, "Timeservers",
DBUS_TYPE_STRING, append_timeservers, NULL);
diff --git a/src/timeserver.c b/src/timeserver.c
index d31801f..c50de4e 100644
--- a/src/timeserver.c
+++ b/src/timeserver.c
@@ -225,9 +225,8 @@ void __connman_timeserver_stop()
__connman_ntp_stop();
}
-int __connman_timeserver_system_append(const char *server)
+int __connman_timeserver_system_set(const char *server)
{
- int len;
char **servers = NULL;
if (server == NULL) {
@@ -237,89 +236,11 @@ int __connman_timeserver_system_append(const char *server)
DBG("server %s", server);
- servers = load_timeservers();
-
- if (servers != NULL) {
- int i;
-
- for (i = 0; servers[i] != NULL; i++)
- if (g_strcmp0(servers[i], server) == 0) {
- g_strfreev(servers);
- return -EEXIST;
- }
-
- len = g_strv_length(servers);
- servers = g_try_renew(char *, servers, len + 2);
- } else {
- len = 0;
- servers = g_try_new0(char *, len + 2);
- }
-
- if (servers == NULL)
- return -ENOMEM;
-
- servers[len] = g_strdup(server);
- servers[len + 1] = NULL;
-
- save_timeservers(servers);
-
- g_strfreev(servers);
-restart:
- connman_timeserver_restart();
-
- return 0;
-}
-
-int __connman_timeserver_system_remove(const char *server)
-{
- char **servers;
- char **temp;
- int len, i, j;
-
- if (server == NULL)
- return -EINVAL;
-
- DBG("server %s", server);
-
- servers = load_timeservers();
-
- if (servers == NULL)
- return 0;
-
- len = g_strv_length(servers);
- if (len == 1) {
- if (g_strcmp0(servers[0], server) != 0) {
- g_strfreev(servers);
- return 0;
- }
-
- g_strfreev(servers);
- servers = NULL;
- save_timeservers(servers);
- return 0;
- }
-
- temp = g_try_new0(char *, len - 1);
- if (temp == NULL) {
- g_strfreev(servers);
- return -ENOMEM;
- }
-
- for (i = 0, j = 0; i < len; i++) {
- if (g_strcmp0(servers[i], server) != 0) {
- temp[j] = g_strdup(servers[i]);
- j++;
- }
- }
- temp[len - 1] = NULL;
-
- g_strfreev(servers);
- servers = g_strdupv(temp);
- g_strfreev(temp);
-
+ servers = g_strsplit_set(server, " ", 0);
save_timeservers(servers);
g_strfreev(servers);
+restart:
connman_timeserver_restart();
return 0;
--
1.7.5.4
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman