aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristos Margiolis <christos@FreeBSD.org>2025-10-22 11:50:55 +0000
committerChristos Margiolis <christos@FreeBSD.org>2025-10-22 11:50:55 +0000
commit70b34fbdbea13c006a724844caa53f59e0e53bd0 (patch)
tree005839e58705ab0515dcf503418e5d222656c75f
parentdaac364e611532c7bfd4bb20f9fea8d365496aa1 (diff)
sndctl(8): Modify vchans only on supported directions
Currently mod_play_vchans() and mod_rec_vchans() run unconditionally, even if the direction (playback, recording) is not supported by the device. This results in the "autoconv" (see mod_autoconv()) control failing when run on simplex devices, because we'll be trying to modify vchans on an unsupported direction. Test whether the direction is supported and silently move on if it isn't. Sponsored by: The FreeBSD Foundation MFC after: 4 days Differential Revision: https://reviews.freebsd.org/D53233
-rw-r--r--usr.sbin/sndctl/sndctl.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/usr.sbin/sndctl/sndctl.c b/usr.sbin/sndctl/sndctl.c
index 156c845481c5..6977f0ab0ebe 100644
--- a/usr.sbin/sndctl/sndctl.c
+++ b/usr.sbin/sndctl/sndctl.c
@@ -830,6 +830,8 @@ mod_play_vchans(struct snd_dev *dp, void *arg)
if (dp->from_user)
return (-1);
+ if (!dp->play.pchans)
+ return (0);
snprintf(buf, sizeof(buf), "dev.pcm.%d.play.vchans", dp->unit);
@@ -873,6 +875,8 @@ mod_rec_vchans(struct snd_dev *dp, void *arg)
if (dp->from_user)
return (-1);
+ if (!dp->rec.pchans)
+ return (0);
snprintf(buf, sizeof(buf), "dev.pcm.%d.rec.vchans", dp->unit);