Correctly implement ACM_STREAMOPENF_QUERY flag in acmOpenStream.
diff --git a/dlls/msacm32/stream.c b/dlls/msacm32/stream.c
index c8f3436..4918f87 100644
--- a/dlls/msacm32/stream.c
+++ b/dlls/msacm32/stream.c
@@ -185,9 +185,12 @@
was->hAcmDriver = had;
ret = SendDriverMessage(wad->hDrvr, ACMDM_STREAM_OPEN, (DWORD)&was->drvInst, 0L);
- /* FIXME: when shall the acmDriver be Close():d ? */
- if (ret == MMSYSERR_NOERROR)
+ if (ret == MMSYSERR_NOERROR) {
+ if (fdwOpen & ACM_STREAMOPENF_QUERY) {
+ acmDriverClose(had, 0L);
+ }
break;
+ }
}
/* no match, close this acm driver and try next one */
acmDriverClose(had, 0L);
@@ -198,13 +201,16 @@
goto errCleanUp;
}
}
- if (phas)
- *phas = (HACMSTREAM)was;
- TRACE("=> (%d)\n", ret);
ret = MMSYSERR_NOERROR;
- if (!(fdwOpen & ACM_STREAMOPENF_QUERY))
+ if (!(fdwOpen & ACM_STREAMOPENF_QUERY)) {
+ if (phas)
+ *phas = (HACMSTREAM)was;
+ TRACE("=> (%d)\n", ret);
return ret;
+ }
errCleanUp:
+ if (phas)
+ *phas = (HACMSTREAM)0;
HeapFree(MSACM_hHeap, 0, was);
TRACE("=> (%d)\n", ret);
return ret;