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 | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/service.c b/src/service.c
index 7adcd4f..8ea7c7c 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3311,7 +3311,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)
@@ -3320,35 +3320,37 @@ 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])
+                               continue;
 
-                       dbus_message_iter_next(&entry);
+                       if (str->len > 0)
+                               g_string_append_printf(str, " %s", val);
+                       else
+                               g_string_append(str, val);
                }
 
                g_strfreev(service->timeservers_config);
                service->timeservers_config = NULL;
 
-               if (list) {
-                       service->timeservers_config = g_new0(char *, count+1);
+               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;
 
-                       while (list) {
-                               count--;
-                               service->timeservers_config[count] = list->data;
-                               list = g_slist_delete_link(list, list);
-                       };
-               }
+               g_string_free(str, TRUE);
 
                service_save(service);
                timeservers_configuration_changed(service);
-- 
2.1.0

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to