Instead loading the keyfile from disk with the old configuration,
start with an empty configuration. Because we do not have a previous
configuration which needs to be updated we can drop all the remove
code. This avoids complex code paths when switching from one
connnection method to the next one (dhcp to manual and back).
---
src/ipconfig.c | 62 +++++++++++++++++++++++++-------------------------
src/service.c | 59 +++++++++++++++--------------------------------
2 files changed, 49 insertions(+), 72 deletions(-)
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 25657733571a..4a9d575039bc 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -2275,27 +2275,25 @@ int __connman_ipconfig_save(struct connman_ipconfig *ipconfig,
g_key_file_set_string(keyfile, identifier, key, privacy);
g_free(key);
- key = g_strdup_printf("%sDHCP.LastAddress", prefix);
if (ipconfig->last_dhcp_address &&
- strlen(ipconfig->last_dhcp_address) > 0)
+ strlen(ipconfig->last_dhcp_address) > 0) {
+ key = g_strdup_printf("%sDHCP.LastAddress", prefix);
g_key_file_set_string(keyfile, identifier, key,
ipconfig->last_dhcp_address);
- else
- g_key_file_remove_key(keyfile, identifier, key, NULL);
- g_free(key);
+ g_free(key);
+ }
- key = g_strdup_printf("%sDHCP.LastPrefixes", prefix);
if (ipconfig->last_dhcpv6_prefixes &&
ipconfig->last_dhcpv6_prefixes[0]) {
guint len =
g_strv_length(ipconfig->last_dhcpv6_prefixes);
+ key = g_strdup_printf("%sDHCP.LastPrefixes", prefix);
g_key_file_set_string_list(keyfile, identifier, key,
(const gchar **)ipconfig->last_dhcpv6_prefixes,
len);
- } else
- g_key_file_remove_key(keyfile, identifier, key, NULL);
- g_free(key);
+ g_free(key);
+ }
}
switch (ipconfig->method) {
@@ -2303,14 +2301,13 @@ int __connman_ipconfig_save(struct connman_ipconfig *ipconfig,
case CONNMAN_IPCONFIG_METHOD_MANUAL:
break;
case CONNMAN_IPCONFIG_METHOD_DHCP:
- key = g_strdup_printf("%sDHCP.LastAddress", prefix);
if (ipconfig->last_dhcp_address &&
- strlen(ipconfig->last_dhcp_address) > 0)
+ strlen(ipconfig->last_dhcp_address) > 0) {
+ key = g_strdup_printf("%sDHCP.LastAddress", prefix);
g_key_file_set_string(keyfile, identifier, key,
ipconfig->last_dhcp_address);
- else
- g_key_file_remove_key(keyfile, identifier, key, NULL);
- g_free(key);
+ g_free(key);
+ }
/* fall through */
case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
case CONNMAN_IPCONFIG_METHOD_OFF:
@@ -2318,37 +2315,40 @@ int __connman_ipconfig_save(struct connman_ipconfig *ipconfig,
return 0;
}
- key = g_strdup_printf("%snetmask_prefixlen", prefix);
- if (ipconfig->address->prefixlen != 0)
+ if (ipconfig->address->prefixlen != 0) {
+ key = g_strdup_printf("%snetmask_prefixlen", prefix);
g_key_file_set_integer(keyfile, identifier,
key, ipconfig->address->prefixlen);
- g_free(key);
+ g_free(key);
+ }
- key = g_strdup_printf("%slocal_address", prefix);
- if (ipconfig->address->local)
+ if (ipconfig->address->local) {
+ key = g_strdup_printf("%slocal_address", prefix);
g_key_file_set_string(keyfile, identifier,
key, ipconfig->address->local);
- g_free(key);
+ g_free(key);
+ }
- key = g_strdup_printf("%speer_address", prefix);
- if (ipconfig->address->peer)
+ if (ipconfig->address->peer) {
+ key = g_strdup_printf("%speer_address", prefix);
g_key_file_set_string(keyfile, identifier,
key, ipconfig->address->peer);
- g_free(key);
+ g_free(key);
+ }
- key = g_strdup_printf("%sbroadcast_address", prefix);
- if (ipconfig->address->broadcast)
+ if (ipconfig->address->broadcast) {
+ key = g_strdup_printf("%sbroadcast_address", prefix);
g_key_file_set_string(keyfile, identifier,
key, ipconfig->address->broadcast);
- g_free(key);
+ g_free(key);
+ }
- key = g_strdup_printf("%sgateway", prefix);
- if (ipconfig->address->gateway)
+ if (ipconfig->address->gateway) {
+ key = g_strdup_printf("%sgateway", prefix);
g_key_file_set_string(keyfile, identifier,
key, ipconfig->address->gateway);
- else
- g_key_file_remove_key(keyfile, identifier, key, NULL);
- g_free(key);
+ g_free(key);
+ }
return 0;
}
diff --git a/src/service.c b/src/service.c
index 22e94f7bf3c7..4d1235e3cf1e 100644
--- a/src/service.c
+++ b/src/service.c
@@ -631,7 +631,7 @@ static int service_save(struct connman_service *service)
if (service->new_service)
return -ESRCH;
- keyfile = __connman_storage_open_service(service->identifier);
+ keyfile = g_key_file_new();
if (!keyfile)
return -EIO;
@@ -693,9 +693,6 @@ static int service_save(struct connman_service *service)
g_key_file_set_boolean(keyfile, service->identifier,
"Favorite", service->favorite);
- g_key_file_remove_key(keyfile, service->identifier,
- "Failure", NULL);
-
/* fall through */
case CONNMAN_SERVICE_TYPE_ETHERNET:
@@ -708,54 +705,45 @@ static int service_save(struct connman_service *service)
str = util_timeval_to_iso8601(&service->modified);
if (str) {
g_key_file_set_string(keyfile, service->identifier,
- "Modified", str);
+ "Modified", str);
g_free(str);
}
if (service->passphrase && strlen(service->passphrase) > 0)
g_key_file_set_string(keyfile, service->identifier,
- "Passphrase", service->passphrase);
- else
- g_key_file_remove_key(keyfile, service->identifier,
- "Passphrase", NULL);
+ "Passphrase", service->passphrase);
if (service->ipconfig_ipv4)
__connman_ipconfig_save(service->ipconfig_ipv4, keyfile,
- service->identifier, "IPv4.");
+ service->identifier, "IPv4.");
if (service->ipconfig_ipv6)
__connman_ipconfig_save(service->ipconfig_ipv6, keyfile,
- service->identifier, "IPv6.");
+ service->identifier, "IPv6.");
if (service->nameservers_config) {
guint len = g_strv_length(service->nameservers_config);
g_key_file_set_string_list(keyfile, service->identifier,
- "Nameservers",
+ "Nameservers",
(const gchar **) service->nameservers_config, len);
- } else
- g_key_file_remove_key(keyfile, service->identifier,
- "Nameservers", NULL);
+ }
if (service->timeservers_config) {
guint len = g_strv_length(service->timeservers_config);
g_key_file_set_string_list(keyfile, service->identifier,
- "Timeservers",
+ "Timeservers",
(const gchar **) service->timeservers_config, len);
- } else
- g_key_file_remove_key(keyfile, service->identifier,
- "Timeservers", NULL);
+ }
if (service->domains) {
guint len = g_strv_length(service->domains);
g_key_file_set_string_list(keyfile, service->identifier,
- "Domains",
+ "Domains",
(const gchar **) service->domains, len);
- } else
- g_key_file_remove_key(keyfile, service->identifier,
- "Domains", NULL);
+ }
cst_str = proxymethod2string(service->proxy_config);
if (cst_str)
@@ -768,9 +756,7 @@ static int service_save(struct connman_service *service)
g_key_file_set_string_list(keyfile, service->identifier,
"Proxy.Servers",
(const gchar **) service->proxies, len);
- } else
- g_key_file_remove_key(keyfile, service->identifier,
- "Proxy.Servers", NULL);
+ }
if (service->excludes) {
guint len = g_strv_length(service->excludes);
@@ -778,34 +764,25 @@ static int service_save(struct connman_service *service)
g_key_file_set_string_list(keyfile, service->identifier,
"Proxy.Excludes",
(const gchar **) service->excludes, len);
- } else
- g_key_file_remove_key(keyfile, service->identifier,
- "Proxy.Excludes", NULL);
+ }
if (service->pac && strlen(service->pac) > 0)
g_key_file_set_string(keyfile, service->identifier,
- "Proxy.URL", service->pac);
- else
- g_key_file_remove_key(keyfile, service->identifier,
- "Proxy.URL", NULL);
+ "Proxy.URL", service->pac);
if (service->mdns_config)
g_key_file_set_boolean(keyfile, service->identifier,
- "mDNS", TRUE);
- else
- g_key_file_remove_key(keyfile, service->identifier,
- "mDNS", NULL);
+ "mDNS", TRUE);
if (service->hidden_service)
- g_key_file_set_boolean(keyfile, service->identifier, "Hidden",
- TRUE);
+ g_key_file_set_boolean(keyfile, service->identifier,
+ "Hidden", TRUE);
if (service->config_file && strlen(service->config_file) > 0)
g_key_file_set_string(keyfile, service->identifier,
"Config.file", service->config_file);
- if (service->config_entry &&
- strlen(service->config_entry) > 0)
+ if (service->config_entry && strlen(service->config_entry) > 0)
g_key_file_set_string(keyfile, service->identifier,
"Config.ident", service->config_entry);
--
2.24.0