summaryrefslogtreecommitdiff
path: root/alsactl/clean.c
diff options
context:
space:
mode:
Diffstat (limited to 'alsactl/clean.c')
-rw-r--r--alsactl/clean.c47
1 files changed, 8 insertions, 39 deletions
diff --git a/alsactl/clean.c b/alsactl/clean.c
index 4808225..6dfc6d3 100644
--- a/alsactl/clean.c
+++ b/alsactl/clean.c
@@ -182,46 +182,15 @@ fin_err:
int clean(const char *cardname, char *const *extra_args)
{
+ struct snd_card_iterator iter;
int err;
- if (!cardname) {
- int card, first = 1;
-
- card = -1;
- /* find each installed soundcards */
- while (1) {
- if (snd_card_next(&card) < 0)
- break;
- if (card < 0) {
- if (first) {
- if (ignore_nocards) {
- err = 0;
- goto out;
- } else {
- error("No soundcards found...");
- err = -ENODEV;
- goto out;
- }
- }
- break;
- }
- first = 0;
- if ((err = clean_controls(card, extra_args)))
- goto out;
- }
- } else {
- int cardno;
-
- cardno = snd_card_get_index(cardname);
- if (cardno < 0) {
- error("Cannot find soundcard '%s'...", cardname);
- err = cardno;
- goto out;
- }
- if ((err = clean_controls(cardno, extra_args))) {
- goto out;
- }
+ err = snd_card_iterator_sinit(&iter, cardname);
+ if (err < 0)
+ return err;
+ while (snd_card_iterator_next(&iter)) {
+ if ((err = clean_controls(iter.card, extra_args)))
+ return err;
}
-out:
- return err;
+ return snd_card_iterator_error(&iter);
}