alsa-mixer: It's valid to have zero elements in a path

It's valid for a path to have zero elements, e g if it contains
a single jack only. Earlier, this would cause an assertion failure
in pa_path_condense.

Also convert pa_bool_t to bool.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
This commit is contained in:
David Henningsson 2013-03-25 13:47:08 +01:00 committed by Tanu Kaskinen
parent 3d65e9c49e
commit 6be21425cd

View file

@ -3152,14 +3152,14 @@ static void path_set_condense(pa_alsa_path_set *ps, snd_mixer_t *m) {
PA_HASHMAP_FOREACH(p2, ps->paths, state2) { PA_HASHMAP_FOREACH(p2, ps->paths, state2) {
pa_alsa_element *ea, *eb; pa_alsa_element *ea, *eb;
pa_alsa_jack *ja, *jb; pa_alsa_jack *ja, *jb;
pa_bool_t is_subset = TRUE; bool is_subset = true;
if (p == p2) if (p == p2)
continue; continue;
/* If a has a jack that b does not have, a is not a subset */ /* If a has a jack that b does not have, a is not a subset */
PA_LLIST_FOREACH(ja, p->jacks) { PA_LLIST_FOREACH(ja, p->jacks) {
pa_bool_t exists = FALSE; bool exists = false;
if (!ja->has_control) if (!ja->has_control)
continue; continue;
@ -3168,35 +3168,34 @@ static void path_set_condense(pa_alsa_path_set *ps, snd_mixer_t *m) {
if (jb->has_control && pa_streq(jb->alsa_name, ja->alsa_name) && if (jb->has_control && pa_streq(jb->alsa_name, ja->alsa_name) &&
(ja->state_plugged == jb->state_plugged) && (ja->state_plugged == jb->state_plugged) &&
(ja->state_unplugged == jb->state_unplugged)) { (ja->state_unplugged == jb->state_unplugged)) {
exists = TRUE; exists = true;
break; break;
} }
} }
if (!exists) { if (!exists) {
is_subset = FALSE; is_subset = false;
break; break;
} }
} }
/* Compare the elements of each set... */ /* Compare the elements of each set... */
pa_assert_se(ea = p->elements); ea = p->elements;
pa_assert_se(eb = p2->elements); eb = p2->elements;
while (is_subset) { while (is_subset) {
if (pa_streq(ea->alsa_name, eb->alsa_name)) { if (!ea && !eb)
break;
else if ((ea && !eb) || (!ea && eb))
is_subset = false;
else if (pa_streq(ea->alsa_name, eb->alsa_name)) {
if (element_is_subset(ea, eb, m)) { if (element_is_subset(ea, eb, m)) {
ea = ea->next; ea = ea->next;
eb = eb->next; eb = eb->next;
if ((ea && !eb) || (!ea && eb))
is_subset = FALSE;
else if (!ea && !eb)
break;
} else } else
is_subset = FALSE; is_subset = false;
} else } else
is_subset = FALSE; is_subset = false;
} }
if (is_subset) { if (is_subset) {