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

Reply via email to