Always initialize lpWaveHdr->lpNext to NULL.
Don't fail on strange fragment sizes.
diff --git a/dlls/winmm/wineoss/audio.c b/dlls/winmm/wineoss/audio.c
index c589cba..14506f1 100644
--- a/dlls/winmm/wineoss/audio.c
+++ b/dlls/winmm/wineoss/audio.c
@@ -1120,10 +1120,11 @@
IOCTL(audio, SNDCTL_DSP_GETBLKSIZE, abuf_size);
if (abuf_size < 1024 || abuf_size > 65536) {
if (abuf_size == -1)
- WARN("IOCTL can't 'SNDCTL_DSP_GETBLKSIZE' !\n");
- else
- WARN("SNDCTL_DSP_GETBLKSIZE Invalid dwFragmentSize !\n");
- return MMSYSERR_NOTENABLED;
+ {
+ WARN("IOCTL can't 'SNDCTL_DSP_GETBLKSIZE' !\n");
+ return MMSYSERR_NOTENABLED;
+ }
+ WARN("SNDCTL_DSP_GETBLKSIZE Invalid dwFragmentSize %d!\n",abuf_size);
}
WInDev[wDevID].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK);
@@ -1214,6 +1215,7 @@
lpWaveHdr->dwFlags |= WHDR_INQUEUE;
lpWaveHdr->dwFlags &= ~WHDR_DONE;
lpWaveHdr->dwBytesRecorded = 0;
+ lpWaveHdr->lpNext = NULL;
if (WInDev[wDevID].lpQueueHdr == NULL) {
WInDev[wDevID].lpQueueHdr = lpWaveHdr;
} else {
@@ -1223,7 +1225,6 @@
count++;
}
lpWIHdr->lpNext = lpWaveHdr;
- lpWaveHdr->lpNext = NULL;
count++;
}
TRACE("buffer added ! (now %u in queue)\n", count);