home: use goto to make it clear that variables are initialized

gcc-11.0.1-0.3.fc34.x86_64 with -Og was complaining that 'r' might be
unitialized. It cannot, but let's rework the code to use a goto instead of
conditionalizing on 'call' being unset, which I think is clearer and less error
prone. This silences the warning.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2021-04-08 12:57:23 +02:00
parent 3b9e6fb490
commit 98d81cf974

View file

@ -2349,6 +2349,8 @@ static int home_dispatch_acquire(Home *h, Operation *o) {
assert(o);
assert(o->type == OPERATION_ACQUIRE);
assert(!h->current_operation);
switch (home_get_state(h)) {
case HOME_UNFIXATED:
@ -2357,8 +2359,9 @@ static int home_dispatch_acquire(Home *h, Operation *o) {
break;
case HOME_ABSENT:
r = sd_bus_error_setf(&error, BUS_ERROR_HOME_ABSENT, "Home %s is currently missing or not plugged in.", h->user_name);
break;
r = sd_bus_error_setf(&error, BUS_ERROR_HOME_ABSENT,
"Home %s is currently missing or not plugged in.", h->user_name);
goto check;
case HOME_INACTIVE:
case HOME_DIRTY:
@ -2382,14 +2385,11 @@ static int home_dispatch_acquire(Home *h, Operation *o) {
return 0;
}
assert(!h->current_operation);
if (call) {
r = home_ratelimit(h, &error);
if (r >= 0)
r = call(h, o->secret, for_state, &error);
}
r = home_ratelimit(h, &error);
if (r >= 0)
r = call(h, o->secret, for_state, &error);
check:
if (r != 0) /* failure or completed */
operation_result(o, r, &error);
else /* ongoing */