As both Domains and Nameserves' parsing uses GString to hold the
temporary server list, change Timeservers' parsing to use it too. While
parsing, remove empty strings.
---
 src/service.c | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/service.c b/src/service.c
index be5f2f5..6768826 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3328,7 +3328,7 @@ static DBusMessage *set_property(DBusConnection *conn,
                service_save(service);
        } else if (g_str_equal(name, "Timeservers.Configuration")) {
                DBusMessageIter entry;
-               GSList *list = NULL;
+               GString *str;
                int count = 0;
 
                if (service->immutable)
@@ -3337,18 +3337,22 @@ static DBusMessage *set_property(DBusConnection *conn,
                if (type != DBUS_TYPE_ARRAY)
                        return __connman_error_invalid_arguments(msg);
 
+               str = g_string_new(NULL);
+               if (!str)
+                       return __connman_error_invalid_arguments(msg);
+
                dbus_message_iter_recurse(&value, &entry);
 
                while (dbus_message_iter_get_arg_type(&entry) == 
DBUS_TYPE_STRING) {
                        const char *val;
-                       GSList *new_head;
-
                        dbus_message_iter_get_basic(&entry, &val);
+                       dbus_message_iter_next(&entry);
 
-                       new_head = __connman_timeserver_add_list(list, val);
-                       if (list != new_head) {
-                               count++;
-                               list = new_head;
+                       if(val[0]) {
+                               if (str->len > 0)
+                                       g_string_append_printf(str, " %s", val);
+                               else
+                                       g_string_append(str, val);
                        }
 
                        dbus_message_iter_next(&entry);
@@ -3357,15 +3361,15 @@ static DBusMessage *set_property(DBusConnection *conn,
                g_strfreev(service->timeservers_config);
                service->timeservers_config = NULL;
 
-               if (list) {
-                       service->timeservers_config = g_new0(char *, count+1);
-
-                       while (list) {
-                               count--;
-                               service->timeservers_config[count] = list->data;
-                               list = g_slist_delete_link(list, list);
-                       };
+               if (str->len > 0) {
+                       char **timeservers = g_strsplit_set(str->str, " ", 0);
+                       timeservers = remove_empty_strings(timeservers);
+                       service->timeservers_config = timeservers;
                }
+               else
+                       service->timeservers = NULL;
+
+               g_string_free(str, TRUE);
 
                service_save(service);
                timeservers_configuration_changed(service);
-- 
2.1.0

_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to