aucat: Fix MIDI control of the levels of individual files
authorratchov <ratchov@openbsd.org>
Thu, 1 Feb 2024 05:28:54 +0000 (05:28 +0000)
committerratchov <ratchov@openbsd.org>
Thu, 1 Feb 2024 05:28:54 +0000 (05:28 +0000)
Change the order of slot_list to match the order of the -io options on
the command-line and fix the way slot_list searched using the MIDI
channel number of the CC-07 message.

Reported and analysed by Dirk-Wilhelm Peters <peters at schwertfisch.de>

Thanks!

usr.bin/aucat/aucat.c

index 64b9986..d90ad72 100644 (file)
@@ -220,7 +220,7 @@ static int
 slot_new(char *path, int mode, struct aparams *par, int hdr,
     int cmin, int cmax, int rate, int dup, int vol, long long pos)
 {
-       struct slot *s;
+       struct slot *s, **ps;
 
        s = xmalloc(sizeof(struct slot));
        if (!afile_open(&s->afile, path, hdr,
@@ -273,8 +273,10 @@ slot_new(char *path, int mode, struct aparams *par, int hdr,
                }
                log_puts("\n");
        }
-       s->next = slot_list;
-       slot_list = s;
+       for (ps = &slot_list; *ps != NULL; ps = &(*ps)->next)
+               ;
+       s->next = NULL;
+       *ps = s;
        return 1;
 }
 
@@ -801,6 +803,7 @@ dev_slotvol(int midich, int val)
 #endif
                        break;
                }
+               midich--;
        }
 }