git: 7ff8cd094b73 - stable/14 - mixer(8): Allow full PCM device names as input for the -d option

From: Christos Margiolis <christos_at_FreeBSD.org>
Date: Mon, 26 Feb 2024 23:22:44 UTC
The branch stable/14 has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=7ff8cd094b7342d0071d7afb40ea2cdcd3359b0a

commit 7ff8cd094b7342d0071d7afb40ea2cdcd3359b0a
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2024-02-12 10:59:02 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2024-02-26 23:22:30 +0000

    mixer(8): Allow full PCM device names as input for the -d option
    
    The -d option is a wrapper around hw.snd.default_unit. Currently
    mixer(8) expects the option argument to be just the unit's number (e.g
    pcm0 -> 0). To avoid confusion, allow full device names of the form
    "pcmN" as well.
    
    While here, improve the -d option's description in the man page.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      2 weeks
    Reviewed by:    dev_submerge.ch, imp
    Differential Revision:  https://reviews.freebsd.org/D43794
    
    (cherry picked from commit 75be886e58dc237b633104fc9cf8d7d1285e4003)
---
 usr.sbin/mixer/mixer.8 | 23 ++++++++++++++---------
 usr.sbin/mixer/mixer.c |  6 ++++--
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/usr.sbin/mixer/mixer.8 b/usr.sbin/mixer/mixer.8
index 10a461d91693..5750b81c98c5 100644
--- a/usr.sbin/mixer/mixer.8
+++ b/usr.sbin/mixer/mixer.8
@@ -19,7 +19,7 @@
 .\" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 .\" THE SOFTWARE.
 .\"
-.Dd January 12, 2024
+.Dd February 8, 2024
 .Dt MIXER 8
 .Os
 .Sh NAME
@@ -28,12 +28,11 @@
 .Sh SYNOPSIS
 .Nm
 .Op Fl f Ar device
-.Op Fl d Ar unit
+.Op Fl d Ar pcmN | N
 .Op Fl os
 .Op Ar dev Ns Op Cm \&. Ns Ar control Ns Op Cm \&= Ns Ar value
 .Ar ...
 .Nm
-.Op Fl d Ar unit
 .Op Fl os
 .Fl a
 .Nm
@@ -44,16 +43,17 @@ The
 utility is used to set and display soundcard mixer device controls.
 .Pp
 The options are as follows:
-.Bl -tag -width "-f device"
+.Bl -tag -width "-d pcmN | N"
 .It Fl a
 Print the values for all mixer devices available in the system
 .Pq see Sx FILES .
-.It Fl d Ar unit
+.It Fl d Ar pcmN | N
 Change the default audio card to
-.Ar unit .
-The unit has to be an integer value.
-To see what unit values are available, look at the number each mixer device has by running
-.Nm .
+.Ar pcmN ,
+where N is the unit number (e.g for pcm0, the unit number is 0).
+See
+.Sx EXAMPLES
+on how to list all available audio devices in the system.
 .It Fl f Ar device
 Open
 .Ar device
@@ -218,6 +218,11 @@ opens when the
 option has not been specified.
 .El
 .Sh EXAMPLES
+List all available audio devices in the system:
+.Bd -literal -offset indent
+$ mixer -a | grep ^pcm
+.Ed
+.Pp
 Increase the volume for the
 .Cm vol
 device of the first mixer found by 5%:
diff --git a/usr.sbin/mixer/mixer.c b/usr.sbin/mixer/mixer.c
index 043c8c412857..0c0c37ccb2bc 100644
--- a/usr.sbin/mixer/mixer.c
+++ b/usr.sbin/mixer/mixer.c
@@ -66,6 +66,8 @@ main(int argc, char *argv[])
 			aflag = 1;
 			break;
 		case 'd':
+			if (strncmp(optarg, "pcm", 3) == 0)
+				optarg += 3;
 			errno = 0;
 			dunit = strtol(optarg, NULL, 10);
 			if (errno == EINVAL || errno == ERANGE)
@@ -194,8 +196,8 @@ next:
 static void __dead2
 usage(void)
 {
-	fprintf(stderr, "usage: %1$s [-f device] [-d unit] [-os] [dev[.control[=value]]] ...\n"
-	    "       %1$s [-d unit] [-os] -a\n"
+	fprintf(stderr, "usage: %1$s [-f device] [-d pcmN | N] [-os] [dev[.control[=value]]] ...\n"
+	    "       %1$s [-os] -a\n"
 	    "       %1$s -h\n", getprogname());
 	exit(1);
 }