diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-02-06 14:18:44 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-02-14 14:43:45 +0900 |
commit | e5b0b87f516007405ed23849d74348ecca024dd3 (patch) | |
tree | 653272bb45e6c08734196451617ef9fc001371c9 /src/libsystemd-network/sd-dhcp6-lease.c | |
parent | 4b0f27173c25ec21f1181ee3d438d413d4e4dd6c (diff) | |
download | systemd-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.c | 33 |
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; } |