diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c index 287cde6d41..77b4b5bea6 100644 --- a/src/libsystemd/sd-bus/bus-control.c +++ b/src/libsystemd/sd-bus/bus-control.c @@ -590,10 +590,9 @@ _public_ int sd_bus_get_name_creds( if (r < 0) return r; - free(c->label); - c->label = strndup(p, sz); - if (!c->label) - return -ENOMEM; + r = free_and_strndup(&c->label, p, sz); + if (r < 0) + return r; c->mask |= SD_BUS_CREDS_SELINUX_CONTEXT; diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index a81b21062a..c5d54bbf74 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -124,10 +124,9 @@ _public_ int sd_pid_get_cgroup(pid_t pid, char **cgroup) { * cgroup, let's return the "/" in the public APIs instead, as * that's easier and less ambiguous for people to grok. */ if (isempty(c)) { - free(c); - c = strdup("/"); - if (!c) - return -ENOMEM; + r = free_and_strdup(&c, "/"); + if (r < 0) + return r; } diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c index b1c4f1cad8..c2ba00c438 100644 --- a/src/nspawn/nspawn-network.c +++ b/src/nspawn/nspawn-network.c @@ -712,10 +712,9 @@ int veth_extra_parse(char ***l, const char *p) { if (r < 0) return r; if (r == 0 || !ifname_valid(b)) { - free(b); - b = strdup(a); - if (!b) - return -ENOMEM; + r = free_and_strdup(&b, a); + if (r < 0) + return r; } if (p)