Fix in wineoss.OSS_RawOpenDevice
Francois Gouget
fgouget at codeweavers.com
Mon Nov 4 03:01:01 CST 2002
In cases where waveOutOpen is called with an unsupported format we would
not return an error. I tracked it down to OSS_RawOpenDevice which issued
a debug message but did not return an error. So I modified it to return
an error if the format was not accepted by OSS so that higher layers can
take appropriate actions.
Changelog:
Francois Gouget <fgouget at codeweavers.com>
* dlls/winmm/wineoss/audio.c
OSS_RawOpenDevice should return an error if the format is not supported
--
Francois Gouget
fgouget at codeweavers.com
-------------- next part --------------
Index: dlls/winmm/wineoss/audio.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/wineoss/audio.c,v
retrieving revision 1.64
diff -u -r1.64 audio.c
--- dlls/winmm/wineoss/audio.c 9 Oct 2002 20:37:09 -0000 1.64
+++ dlls/winmm/wineoss/audio.c 4 Nov 2002 08:48:06 -0000
@@ -240,7 +240,7 @@
*/
static DWORD OSS_RawOpenDevice(OSS_DEVICE* ossdev, int* frag)
{
- int fd, val;
+ int fd, val, err;
if ((fd = open(ossdev->dev_name, ossdev->open_access|O_NDELAY, 0)) == -1)
{
@@ -262,25 +262,38 @@
{
val = ossdev->format;
ioctl(fd, SNDCTL_DSP_SETFMT, &val);
- if (val != ossdev->format)
- ERR("Can't set format to %d (%d)\n", ossdev->format, val);
+ if (val != ossdev->format) {
+ ERR("Can't set format to %d (returned %d)\n", val, ossdev->format);
+ err=WAVERR_BADFORMAT;
+ goto error;
+ }
}
if (ossdev->stereo)
{
val = ossdev->stereo;
ioctl(fd, SNDCTL_DSP_STEREO, &val);
- if (val != ossdev->stereo)
- ERR("Can't set stereo to %u (%d)\n", ossdev->stereo, val);
+ if (val != ossdev->stereo) {
+ ERR("Can't set stereo to %u (returned %d)\n", val, ossdev->stereo);
+ err=WAVERR_BADFORMAT;
+ goto error;
+ }
}
if (ossdev->sample_rate)
{
val = ossdev->sample_rate;
ioctl(fd, SNDCTL_DSP_SPEED, &ossdev->sample_rate);
- if (!NEAR_MATCH(val, ossdev->sample_rate))
- ERR("Can't set sample_rate to %u (%d)\n", ossdev->sample_rate, val);
+ if (!NEAR_MATCH(val, ossdev->sample_rate)) {
+ ERR("Can't set sample_rate to %u (returned %d)\n", val, ossdev->sample_rate);
+ err=WAVERR_BADFORMAT;
+ goto error;
+ }
}
ossdev->fd = fd;
return MMSYSERR_NOERROR;
+
+error:
+ close(fd);
+ return err;
}
/******************************************************************
More information about the wine-patches
mailing list