winmm: Unload driver if it reports zero devices
Michal Janusz Miroslaw
M.Miroslaw at elka.pw.edu.pl
Fri Sep 19 09:01:28 CDT 2003
Fix FIXME in MMDRV_Install
/* FIXME: if all those func calls return FALSE,
* then the driver must be unloaded
*/
ChangeLog:
- Unload MM driver if it reports zero devices
Index: dlls/winmm/lolvldrv.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/lolvldrv.c,v
retrieving revision 1.46
diff -u -r1.46 lolvldrv.c
--- dlls/winmm/lolvldrv.c 5 Sep 2003 23:08:28 -0000 1.46
+++ dlls/winmm/lolvldrv.c 19 Sep 2003 03:14:34 -0000
@@ -663,15 +663,20 @@
lpDrv->drvname = strcpy(HeapAlloc(GetProcessHeap(), 0, strlen(drvRegName) + 1), drvRegName);
/* Finish init and get the count of the devices */
- MMDRV_InitPerType(lpDrv, MMDRV_AUX, AUXDM_GETNUMDEVS);
- MMDRV_InitPerType(lpDrv, MMDRV_MIXER, MXDM_GETNUMDEVS);
- MMDRV_InitPerType(lpDrv, MMDRV_MIDIIN, MIDM_GETNUMDEVS);
- MMDRV_InitPerType(lpDrv, MMDRV_MIDIOUT, MODM_GETNUMDEVS);
- MMDRV_InitPerType(lpDrv, MMDRV_WAVEIN, WIDM_GETNUMDEVS);
- MMDRV_InitPerType(lpDrv, MMDRV_WAVEOUT, WODM_GETNUMDEVS);
- /* FIXME: if all those func calls return FALSE,
- * then the driver must be unloaded
- */
+ i = 0;
+ if (MMDRV_InitPerType(lpDrv, MMDRV_AUX, AUXDM_GETNUMDEVS)) i = 1;
+ if (MMDRV_InitPerType(lpDrv, MMDRV_MIXER, MXDM_GETNUMDEVS)) i = 1;
+ if (MMDRV_InitPerType(lpDrv, MMDRV_MIDIIN, MIDM_GETNUMDEVS)) i = 1;
+ if (MMDRV_InitPerType(lpDrv, MMDRV_MIDIOUT, MODM_GETNUMDEVS)) i = 1;
+ if (MMDRV_InitPerType(lpDrv, MMDRV_WAVEIN, WIDM_GETNUMDEVS)) i = 1;
+ if (MMDRV_InitPerType(lpDrv, MMDRV_WAVEOUT, WODM_GETNUMDEVS)) i = 1;
+ /* if all those func calls return FALSE, then the driver must be unloaded */
+ if (!i) {
+ CloseDriver(lpDrv->hDriver, 0, 0);
+ HeapFree(GetProcessHeap(), 0, lpDrv->drvname);
+ WARN("Driver initialization failed\n");
+ return FALSE;
+ }
MMDrvsHi++;
More information about the wine-patches
mailing list