summaryrefslogtreecommitdiffstats
path: root/lib/libsndio/sioctl_sun.c
diff options
context:
space:
mode:
authorratchov <ratchov@openbsd.org>2020-04-30 12:30:47 +0000
committerratchov <ratchov@openbsd.org>2020-04-30 12:30:47 +0000
commit9b9c0fff89b28a278ea535e7935c8e9104e903f2 (patch)
tree6c43477c5233b3ca4f428cdb9461d1a83071b4ea /lib/libsndio/sioctl_sun.c
parentAdd an expandtab option, similar to what vim supports. (diff)
downloadwireguard-openbsd-9b9c0fff89b28a278ea535e7935c8e9104e903f2.tar.xz
wireguard-openbsd-9b9c0fff89b28a278ea535e7935c8e9104e903f2.zip
If no "xxx.mute" control is found, try "xxx_mute"
Certain drivers (azalia, uaudio) use a control with the "_mute" suffix to expose the "mute" knob.
Diffstat (limited to 'lib/libsndio/sioctl_sun.c')
-rw-r--r--lib/libsndio/sioctl_sun.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/libsndio/sioctl_sun.c b/lib/libsndio/sioctl_sun.c
index c1d3ac33dc7..9547e7c2d19 100644
--- a/lib/libsndio/sioctl_sun.c
+++ b/lib/libsndio/sioctl_sun.c
@@ -82,14 +82,24 @@ static int
initmute(struct sioctl_sun_hdl *hdl, struct mixer_devinfo *info)
{
struct mixer_devinfo mi;
+ char name[MAX_AUDIO_DEV_LEN];
- mi.index = info->next;
for (mi.index = info->next; mi.index != -1; mi.index = mi.next) {
if (ioctl(hdl->fd, AUDIO_MIXER_DEVINFO, &mi) < 0)
break;
if (strcmp(mi.label.name, AudioNmute) == 0)
return mi.index;
}
+
+ /* try "_mute" suffix */
+ snprintf(name, sizeof(name), "%s_mute", info->label.name);
+ for (mi.index = 0; ; mi.index++) {
+ if (ioctl(hdl->fd, AUDIO_MIXER_DEVINFO, &mi) < 0)
+ break;
+ if (info->mixer_class == mi.mixer_class &&
+ strcmp(mi.label.name, name) == 0)
+ return mi.index;
+ }
return -1;
}