Module Name:    src
Committed By:   riastradh
Date:           Tue Jun  8 09:46:04 UTC 2021

Modified Files:
        src/sys/dev/audio: audio.c

Log Message:
audio(4): Revert revision 1.96 and redo it another way.

Instead of refusing to open /dev/audioN for writes when the device
doesn't support playback, just refuse to issue writes.

Although it seems more sensible to me to reject writable opens early
on, and it seems Solaris does so, this makes querying device
properties a little trickier and is a change to the NetBSD semantics.


To generate a diff of this commit:
cvs rdiff -u -r1.103 -r1.104 src/sys/dev/audio/audio.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/audio/audio.c
diff -u src/sys/dev/audio/audio.c:1.103 src/sys/dev/audio/audio.c:1.104
--- src/sys/dev/audio/audio.c:1.103	Fri Jun  4 08:57:05 2021
+++ src/sys/dev/audio/audio.c	Tue Jun  8 09:46:04 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: audio.c,v 1.103 2021/06/04 08:57:05 riastradh Exp $	*/
+/*	$NetBSD: audio.c,v 1.104 2021/06/08 09:46:04 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -138,7 +138,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.103 2021/06/04 08:57:05 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.104 2021/06/08 09:46:04 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "audio.h"
@@ -2255,20 +2255,10 @@ audio_open(dev_t dev, struct audio_softc
 	af = kmem_zalloc(sizeof(*af), KM_SLEEP);
 	af->sc = sc;
 	af->dev = dev;
-	if (flags & FWRITE) {
-		if (!audio_can_playback(sc)) {
-			error = ENXIO;
-			goto bad;
-		}
+	if ((flags & FWRITE) != 0 && audio_can_playback(sc))
 		af->mode |= AUMODE_PLAY | AUMODE_PLAY_ALL;
-	}
-	if (flags & FREAD) {
-		if (!audio_can_capture(sc)) {
-			error = ENXIO;
-			goto bad;
-		}
+	if ((flags & FREAD) != 0 && audio_can_capture(sc))
 		af->mode |= AUMODE_RECORD;
-	}
 	if (af->mode == 0) {
 		error = ENXIO;
 		goto bad;
@@ -2821,7 +2811,8 @@ audio_write(struct audio_softc *sc, stru
 	int error;
 
 	track = file->ptrack;
-	KASSERT(track);
+	if (track == NULL)
+		return EPERM;
 
 	/* I think it's better than EINVAL. */
 	if (track->mmapped)

Reply via email to