diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-03-22 16:53:26 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-03-22 20:21:42 +0100 |
commit | ae2a15bc14bc448e625ad93fd044bc077ede4b3f (patch) | |
tree | e503e6cf3b571d0a150dc2cea7d1838f55aaa6ab /src/network | |
parent | 1147eef0b6a5937526247ff81ca1e5e45205ed16 (diff) | |
download | systemd-ae2a15bc14bc448e625ad93fd044bc077ede4b3f.tar.gz |
macro: introduce TAKE_PTR() macro
This macro will read a pointer of any type, return it, and set the
pointer to NULL. This is useful as an explicit concept of passing
ownership of a memory area between pointers.
This takes inspiration from Rust:
https://doc.rust-lang.org/std/option/enum.Option.html#method.take
and was suggested by Alan Jenkins (@sourcejedi).
It drops ~160 lines of code from our codebase, which makes me like it.
Also, I think it clarifies passing of ownership, and thus helps
readability a bit (at least for the initiated who know the new macro)
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/netdev/netdev.c | 3 | ||||
-rw-r--r-- | src/network/netdev/wireguard.c | 3 | ||||
-rw-r--r-- | src/network/networkd-link-bus.c | 3 | ||||
-rw-r--r-- | src/network/networkd-network-bus.c | 3 | ||||
-rw-r--r-- | src/network/networkd-network.c | 3 | ||||
-rw-r--r-- | src/network/networkd-radv.c | 6 | ||||
-rw-r--r-- | src/network/networkd-routing-policy-rule.c | 3 |
7 files changed, 8 insertions, 16 deletions
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 93648e1be0..421a32d567 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -488,8 +488,7 @@ int netdev_get_mac(const char *ifname, struct ether_addr **ret) { mac->ether_addr_octet[0] &= 0xfe; /* clear multicast bit */ mac->ether_addr_octet[0] |= 0x02; /* set local assignment bit (IEEE802) */ - *ret = mac; - mac = NULL; + *ret = TAKE_PTR(mac); return 0; } diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index f1f4bab475..9025693f70 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -228,8 +228,7 @@ static int on_resolve_retry(sd_event_source *s, usec_t usec, void *userdata) { w->resolve_retry_event_source = sd_event_source_unref(w->resolve_retry_event_source); - w->unresolved_endpoints = w->failed_endpoints; - w->failed_endpoints = NULL; + w->unresolved_endpoints = TAKE_PTR(w->failed_endpoints); resolve_endpoints(netdev); diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c index 2f4850b1a1..cc966fa363 100644 --- a/src/network/networkd-link-bus.c +++ b/src/network/networkd-link-bus.c @@ -82,8 +82,7 @@ int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char *** } l[c] = NULL; - *nodes = l; - l = NULL; + *nodes = TAKE_PTR(l); return 1; } diff --git a/src/network/networkd-network-bus.c b/src/network/networkd-network-bus.c index 8d3d7236fc..459868a57f 100644 --- a/src/network/networkd-network-bus.c +++ b/src/network/networkd-network-bus.c @@ -122,8 +122,7 @@ int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char return r; } - *nodes = l; - l = NULL; + *nodes = TAKE_PTR(l); return 1; } diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index fc9fbed6f1..e3ed24e600 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -72,8 +72,7 @@ int network_config_section_new(const char *filename, unsigned line, NetworkConfi strcpy(cs->filename, filename); cs->line = line; - *s = cs; - cs = NULL; + *s = TAKE_PTR(cs); return 0; } diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index a921d120b3..1cc89f3b0a 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -126,8 +126,7 @@ int prefix_new(Prefix **ret) { if (sd_radv_prefix_new(&prefix->radv_prefix) < 0) return -ENOMEM; - *ret = prefix; - prefix = NULL; + *ret = TAKE_PTR(prefix); return 0; } @@ -344,8 +343,7 @@ static int radv_get_ip6dns(Network *network, struct in6_addr **dns, } if (addresses) { - *dns = addresses; - addresses = NULL; + *dns = TAKE_PTR(addresses); *n_dns = n_addresses; } diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index fdbaec58eb..d8f712c069 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -857,8 +857,7 @@ static int routing_policy_rule_read_full_file(const char *state_file, char **ret if (size <= 0) return -ENODATA; - *ret = s; - s = NULL; + *ret = TAKE_PTR(s); return size; } |