summaryrefslogtreecommitdiff
path: root/src/libsystemd-network/sd-dhcp6-lease.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-02-06 14:18:44 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-02-14 14:43:45 +0900
commite5b0b87f516007405ed23849d74348ecca024dd3 (patch)
tree653272bb45e6c08734196451617ef9fc001371c9 /src/libsystemd-network/sd-dhcp6-lease.c
parent4b0f27173c25ec21f1181ee3d438d413d4e4dd6c (diff)
downloadsystemd-e5b0b87f516007405ed23849d74348ecca024dd3.tar.gz
sd-dhcp6-client: introduce dhcp6_ia_free()
Diffstat (limited to 'src/libsystemd-network/sd-dhcp6-lease.c')
-rw-r--r--src/libsystemd-network/sd-dhcp6-lease.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/libsystemd-network/sd-dhcp6-lease.c b/src/libsystemd-network/sd-dhcp6-lease.c
index 96c32cf8f9..87c3a89ace 100644
--- a/src/libsystemd-network/sd-dhcp6-lease.c
+++ b/src/libsystemd-network/sd-dhcp6-lease.c
@@ -54,21 +54,24 @@ int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire) {
return 0;
}
-DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia) {
- DHCP6Address *address;
+void dhcp6_ia_clear_addresses(DHCP6IA *ia) {
+ DHCP6Address *a, *n;
- if (!ia)
- return NULL;
+ assert(ia);
- while (ia->addresses) {
- address = ia->addresses;
+ LIST_FOREACH_SAFE(addresses, a, n, ia->addresses)
+ free(a);
- LIST_REMOVE(addresses, ia->addresses, address);
+ ia->addresses = NULL;
+}
- free(address);
- }
+DHCP6IA *dhcp6_ia_free(DHCP6IA *ia) {
+ if (!ia)
+ return NULL;
- return NULL;
+ dhcp6_ia_clear_addresses(ia);
+
+ return mfree(ia);
}
int dhcp6_lease_set_clientid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len) {
@@ -188,7 +191,7 @@ int sd_dhcp6_lease_get_address(
void sd_dhcp6_lease_reset_address_iter(sd_dhcp6_lease *lease) {
if (lease)
- lease->addr_iter = lease->ia_na.addresses;
+ lease->addr_iter = lease->ia_na ? lease->ia_na->addresses : NULL;
}
int sd_dhcp6_lease_get_pd(
@@ -218,7 +221,7 @@ int sd_dhcp6_lease_get_pd(
void sd_dhcp6_lease_reset_pd_prefix_iter(sd_dhcp6_lease *lease) {
if (lease)
- lease->prefix_iter = lease->ia_pd.addresses;
+ lease->prefix_iter = lease->ia_pd ? lease->ia_pd->addresses : NULL;
}
int dhcp6_lease_add_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
@@ -399,8 +402,8 @@ static sd_dhcp6_lease *dhcp6_lease_free(sd_dhcp6_lease *lease) {
free(lease->clientid);
free(lease->serverid);
- dhcp6_lease_free_ia(&lease->ia_na);
- dhcp6_lease_free_ia(&lease->ia_pd);
+ dhcp6_ia_free(lease->ia_na);
+ dhcp6_ia_free(lease->ia_pd);
free(lease->dns);
free(lease->fqdn);
strv_free(lease->domains);
@@ -424,8 +427,6 @@ int dhcp6_lease_new(sd_dhcp6_lease **ret) {
lease->n_ref = 1;
- LIST_HEAD_INIT(lease->ia_na.addresses);
-
*ret = lease;
return 0;
}