systemctl: use _cleanup_ for UnitCondition

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2016-07-25 12:29:20 -04:00
parent f8654baa08
commit 9bb7194019

View file

@ -3484,13 +3484,16 @@ typedef struct UnitCondition {
} UnitCondition;
static void unit_condition_free(UnitCondition *c) {
assert(c);
if (!c)
return;
free(c->name);
free(c->param);
free(c);
}
DEFINE_TRIVIAL_CLEANUP_FUNC(UnitCondition*, unit_condition_free);
typedef struct UnitStatusInfo {
const char *id;
const char *load_state;
@ -4232,7 +4235,7 @@ static int status_property(const char *name, sd_bus_message *m, UnitStatusInfo *
return bus_log_parse_error(r);
while ((r = sd_bus_message_read(m, "(sbbsi)", &cond, &trigger, &negate, &param, &state)) > 0) {
UnitCondition *c;
_cleanup_(unit_condition_freep) UnitCondition *c = NULL;
log_debug("%s trigger=%d negate=%d %s →%d", cond, trigger, negate, param, state);
@ -4241,23 +4244,16 @@ static int status_property(const char *name, sd_bus_message *m, UnitStatusInfo *
return log_oom();
c->name = strdup(cond);
if (!c->name) {
free(c);
return log_oom();
}
c->param = strdup(param);
if (!c->param) {
free(c->name);
free(c);
if (!c->name || !c->param)
return log_oom();
}
c->trigger = trigger;
c->negate = negate;
c->tristate = state;
LIST_PREPEND(conditions, i->conditions, c);
c = NULL;
}
if (r < 0)
return bus_log_parse_error(r);