diff options
| author | riastradh <riastradh@NetBSD.org> | 2021-06-08 09:46:04 +0000 |
|---|---|---|
| committer | riastradh <riastradh@NetBSD.org> | 2021-06-08 09:46:04 +0000 |
| commit | 9183dfbc31aa1475a53ba1ffe47c6b57774f4f6f (patch) | |
| tree | ecd0a4d48c5bc0dfd30fd164655ed64f49f879f7 /sys/dev | |
| parent | e2798de952abe803a9e082bafbb5679fccb7effb (diff) | |
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.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/audio/audio.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/sys/dev/audio/audio.c b/sys/dev/audio/audio.c index 408269d617e..2d1e961734d 100644 --- a/sys/dev/audio/audio.c +++ b/sys/dev/audio/audio.c @@ -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 *sc, int flags, int ifmt, 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, struct uio *uio, int ioflag, int error; track = file->ptrack; - KASSERT(track); + if (track == NULL) + return EPERM; /* I think it's better than EINVAL. */ if (track->mmapped) |
