Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Sep 2021 09:28:21 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 3984400149a5 - main - mixer(3): Add support for controlling mixer mute and volume on feeder channels.
Message-ID:  <202109280928.18S9SLYD036492@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by hselasky:

URL: https://cgit.FreeBSD.org/src/commit/?id=3984400149a53982f1254cfaf7b73fd2acda460a

commit 3984400149a53982f1254cfaf7b73fd2acda460a
Author:     Hans Petter Selasky <hselasky@FreeBSD.org>
AuthorDate: 2021-09-28 07:53:44 +0000
Commit:     Hans Petter Selasky <hselasky@FreeBSD.org>
CommitDate: 2021-09-28 09:20:23 +0000

    mixer(3): Add support for controlling mixer mute and volume on feeder channels.
    
    PR:     258711
    Reported by:    jbeich@FreeBSD.org
    Differential Revision:  https://reviews.freebsd.org/D31636
    Sponsored by:   NVIDIA Networking
---
 lib/libmixer/mixer.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/lib/libmixer/mixer.c b/lib/libmixer/mixer.c
index b10d5c6607cf..4bae6980c1c4 100644
--- a/lib/libmixer/mixer.c
+++ b/lib/libmixer/mixer.c
@@ -77,13 +77,13 @@ mixer_open(const char *name)
 	if (name != NULL) {
 		/* `name` does not start with "/dev/mixer". */
 		if (strncmp(name, BASEPATH, strlen(BASEPATH)) != 0) {
-			errno = EINVAL;
-			goto fail;
+			m->unit = -1;
+		} else {
+			/* `name` is "/dev/mixer" so, we'll use the default unit. */
+			if (strncmp(name, BASEPATH, strlen(name)) == 0)
+				goto dunit;
+			m->unit = strtol(name + strlen(BASEPATH), NULL, 10);
 		}
-		/* `name` is "/dev/mixer" so, we'll use the default unit. */
-		if (strncmp(name, BASEPATH, strlen(name)) == 0)
-			goto dunit;
-		m->unit = strtol(name + strlen(BASEPATH), NULL, 10);
 		(void)strlcpy(m->name, name, sizeof(m->name));
 	} else {
 dunit:
@@ -101,9 +101,13 @@ dunit:
 	/* The unit number _must_ be set before the ioctl. */
 	m->mi.dev = m->unit;
 	m->ci.card = m->unit;
-	if (ioctl(m->fd, SNDCTL_MIXERINFO, &m->mi) < 0 ||
-	    ioctl(m->fd, SNDCTL_CARDINFO, &m->ci) < 0 ||
-	    ioctl(m->fd, SOUND_MIXER_READ_DEVMASK, &m->devmask) < 0 ||
+	if (ioctl(m->fd, SNDCTL_MIXERINFO, &m->mi) < 0) {
+		memset(&m->mi, 0, sizeof(m->mi));
+		strlcpy(m->mi.name, m->name, sizeof(m->mi.name));
+	}
+	if (ioctl(m->fd, SNDCTL_CARDINFO, &m->ci) < 0)
+		memset(&m->ci, 0, sizeof(m->ci));
+	if (ioctl(m->fd, SOUND_MIXER_READ_DEVMASK, &m->devmask) < 0 ||
 	    ioctl(m->fd, SOUND_MIXER_READ_MUTE, &m->mutemask) < 0 ||
 	    ioctl(m->fd, SOUND_MIXER_READ_RECMASK, &m->recmask) < 0 ||
 	    ioctl(m->fd, SOUND_MIXER_READ_RECSRC, &m->recsrc) < 0)
@@ -463,7 +467,7 @@ mixer_get_mode(int unit)
 	(void)snprintf(buf, sizeof(buf), "dev.pcm.%d.mode", unit);
 	size = sizeof(unsigned int);
 	if (sysctlbyname(buf, &mode, &size, NULL, 0) < 0)
-		return (-1);
+		return (0);
 
 	return (mode);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109280928.18S9SLYD036492>