ossaudio(3): Set errno and return -1 rather than returning errno.

This commit is contained in:
nia 2020-11-04 22:59:24 +00:00
parent 2a72b2ad75
commit 8a0fd92fc8
1 changed files with 45 additions and 24 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: ossaudio.c,v 1.62 2020/11/03 09:46:00 nia Exp $ */
/* $NetBSD: ossaudio.c,v 1.63 2020/11/04 22:59:24 nia Exp $ */
/*-
* Copyright (c) 1997, 2020 The NetBSD Foundation, Inc.
@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
__RCSID("$NetBSD: ossaudio.c,v 1.62 2020/11/03 09:46:00 nia Exp $");
__RCSID("$NetBSD: ossaudio.c,v 1.63 2020/11/04 22:59:24 nia Exp $");
/*
* This is an Open Sound System compatibility layer, which provides
@ -146,8 +146,10 @@ audio_ioctl(int fd, unsigned long com, void *argp)
break;
case SNDCTL_DSP_GETERROR:
tmperrinfo = (struct audio_errinfo *)argp;
if (tmperrinfo == NULL)
return EINVAL;
if (tmperrinfo == NULL) {
errno = EINVAL;
return -1;
}
memset(tmperrinfo, 0, sizeof(struct audio_errinfo));
if ((retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo)) < 0)
return retval;
@ -413,8 +415,10 @@ audio_ioctl(int fd, unsigned long com, void *argp)
case SNDCTL_DSP_SETFRAGMENT:
AUDIO_INITINFO(&tmpinfo);
idat = INTARG;
if ((idat & 0xffff) < 4 || (idat & 0xffff) > 17)
return EINVAL;
if ((idat & 0xffff) < 4 || (idat & 0xffff) > 17) {
errno = EINVAL;
return -1;
}
tmpinfo.blocksize = 1 << (idat & 0xffff);
tmpinfo.hiwat = ((unsigned)idat >> 16) & 0x7fff;
if (tmpinfo.hiwat == 0) /* 0 means set to max */
@ -613,8 +617,9 @@ audio_ioctl(int fd, unsigned long com, void *argp)
INTARG = getvol(tmpinfo.record.gain, tmpinfo.record.balance);
break;
case SNDCTL_DSP_SKIP:
case SNDCTL_DSP_SILENCE:
return EINVAL;
case SNDCTL_DSP_SILENCE:
errno = EINVAL;
return -1;
case SNDCTL_DSP_SETDUPLEX:
idat = 1;
retval = ioctl(fd, AUDIO_SETFD, &idat);
@ -865,8 +870,10 @@ mixer_oss3_ioctl(int fd, unsigned long com, void *argp)
strlcpy(omi->name, adev.name, sizeof omi->name);
return 0;
case SOUND_MIXER_READ_RECSRC:
if (di->source == -1)
return EINVAL;
if (di->source == -1) {
errno = EINVAL;
return -1;
}
mc.dev = di->source;
if (di->caps & SOUND_CAP_EXCL_INPUT) {
mc.type = AUDIO_MIXER_ENUM;
@ -900,8 +907,10 @@ mixer_oss3_ioctl(int fd, unsigned long com, void *argp)
break;
case SOUND_MIXER_WRITE_RECSRC:
case SOUND_MIXER_WRITE_R_RECSRC:
if (di->source == -1)
return EINVAL;
if (di->source == -1) {
errno = EINVAL;
return -1;
}
mc.dev = di->source;
idat = INTARG;
if (di->caps & SOUND_CAP_EXCL_INPUT) {
@ -910,16 +919,20 @@ mixer_oss3_ioctl(int fd, unsigned long com, void *argp)
if (idat & (1 << i))
break;
if (i >= SOUND_MIXER_NRDEVICES ||
di->devmap[i] == -1)
return EINVAL;
di->devmap[i] == -1) {
errno = EINVAL;
return -1;
}
mc.un.ord = enum_to_ord(di, di->devmap[i]);
} else {
mc.type = AUDIO_MIXER_SET;
mc.un.mask = 0;
for(i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
if (idat & (1 << i)) {
if (di->devmap[i] == -1)
return EINVAL;
if (di->devmap[i] == -1) {
errno = EINVAL;
return -1;
}
mc.un.mask |=
enum_to_mask(di, di->devmap[i]);
}
@ -930,8 +943,10 @@ mixer_oss3_ioctl(int fd, unsigned long com, void *argp)
if (MIXER_READ(SOUND_MIXER_FIRST) <= com &&
com < MIXER_READ(SOUND_MIXER_NRDEVICES)) {
n = GET_DEV(com);
if (di->devmap[n] == -1)
return EINVAL;
if (di->devmap[n] == -1) {
errno = EINVAL;
return -1;
}
mc.dev = di->devmap[n];
mc.type = AUDIO_MIXER_VALUE;
doread:
@ -940,8 +955,10 @@ mixer_oss3_ioctl(int fd, unsigned long com, void *argp)
retval = ioctl(fd, AUDIO_MIXER_READ, &mc);
if (retval < 0)
return retval;
if (mc.type != AUDIO_MIXER_VALUE)
return EINVAL;
if (mc.type != AUDIO_MIXER_VALUE) {
errno = EINVAL;
return -1;
}
if (mc.un.value.num_channels != 2) {
l = r =
mc.un.value.level[AUDIO_MIXER_LEVEL_MONO];
@ -956,8 +973,10 @@ mixer_oss3_ioctl(int fd, unsigned long com, void *argp)
(MIXER_WRITE(SOUND_MIXER_FIRST) <= com &&
com < MIXER_WRITE(SOUND_MIXER_NRDEVICES))) {
n = GET_DEV(com);
if (di->devmap[n] == -1)
return EINVAL;
if (di->devmap[n] == -1) {
errno = EINVAL;
return -1;
}
idat = INTARG;
l = FROM_OSSVOL((u_int)idat & 0xff);
r = FROM_OSSVOL(((u_int)idat >> 8) & 0xff);
@ -1114,8 +1133,10 @@ mixer_oss4_ioctl(int fd, unsigned long com, void *argp)
break;
case SNDCTL_CARDINFO:
cardinfo = (oss_card_info *)argp;
if (cardinfo == NULL)
return EINVAL;
if (cardinfo == NULL) {
errno = EINVAL;
return -1;
}
if (cardinfo->card != -1) {
snprintf(devname, sizeof(devname),
"/dev/audio%d", cardinfo->card);