see previous patch A+
Name: msacm2load ChangeLog: moved session instance loading to winmm License: X11 GenDate: 2002/05/10 20:49:48 UTC ModifiedFiles: dlls/msacm/driver.c AddedFiles: =================================================================== RCS file: /home/cvs/cvsroot/wine/wine/dlls/msacm/driver.c,v retrieving revision 1.15 diff -u -u -r1.15 driver.c --- dlls/msacm/driver.c 9 Mar 2002 23:39:08 -0000 1.15 +++ dlls/msacm/driver.c 23 Apr 2002 19:11:40 -0000 @@ -240,70 +240,13 @@ return MMSYSERR_INVALPARAM; } -static MMRESULT MSACM_DriverOpenHelper(PWINE_ACMDRIVER* ppad, PWINE_ACMDRIVERID padid, DWORD fdwOpen, BOOL useDesc) -{ - MMRESULT ret = MMSYSERR_ERROR; - PWINE_ACMDRIVER pad; - - *ppad = NULL; - - pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER)); - if (!pad) return MMSYSERR_NOMEM; - - pad->obj.dwType = WINE_ACMOBJ_DRIVER; - pad->obj.pACMDriverID = padid; - - if (!(pad->hDrvr = padid->hInstModule)) { - /* this is not an externally added driver... need to load it */ - if (!padid->pszDriverAlias) goto gotError; - - if (useDesc) { - ACMDRVOPENDESCW adod; - int len; - - adod.cbStruct = sizeof(adod); - adod.fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC; - adod.fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED; - adod.dwVersion = acmGetVersion(); - adod.dwFlags = fdwOpen; - adod.dwError = 0; - len = strlen("Drivers32") + 1; - adod.pszSectionName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, "Drivers32", -1, (LPWSTR)adod.pszSectionName, len); - len = strlen(padid->pszDriverAlias) + 1; - adod.pszAliasName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, padid->pszDriverAlias, -1, (LPWSTR)adod.pszAliasName, len); - adod.dnDevNode = 0; - - pad->hDrvr = OpenDriverA(padid->pszDriverAlias, NULL, (DWORD)&adod); - - HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszSectionName); - HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszAliasName); - if (!pad->hDrvr) { - ret = adod.dwError; - goto gotError; - } - } else { - if (!(pad->hDrvr = OpenDriverA(padid->pszDriverAlias, 0L, 0L))) { - ret = MMSYSERR_ERROR; - goto gotError; - } - } - } - *ppad = pad; - return MMSYSERR_NOERROR; - gotError: - HeapFree(MSACM_hHeap, 0, pad); - return ret; -} - /*********************************************************************** * acmDriverOpen (MSACM32.@) */ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen) { PWINE_ACMDRIVERID padid; - PWINE_ACMDRIVER pad = NULL, first_pad = NULL; + PWINE_ACMDRIVER pad = NULL; MMRESULT ret; TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen); @@ -318,22 +261,48 @@ if (!padid) return MMSYSERR_INVALHANDLE; - /* first driver to be loaded ? */ - if (!padid->pACMDriverList && !padid->hInstModule) { - ret = MSACM_DriverOpenHelper(&first_pad, padid, fdwOpen, FALSE); - if (ret) goto gotError; - - - /* insert new pad at beg of list */ - first_pad->pNextACMDriver = NULL; - padid->pACMDriverList = first_pad; - } - - ret = MSACM_DriverOpenHelper(&pad, padid, fdwOpen, TRUE); - if (ret) { - if (first_pad) - acmDriverClose((HACMDRIVER)first_pad, 0L); - goto gotError; + pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER)); + if (!pad) + return MMSYSERR_NOMEM; + + pad->obj.dwType = WINE_ACMOBJ_DRIVER; + pad->obj.pACMDriverID = padid; + + if (!(pad->hDrvr = padid->hInstModule)) + { + ACMDRVOPENDESCW adod; + int len; + + /* this is not an externally added driver... need to actually load it */ + if (!padid->pszDriverAlias) + { + ret = MMSYSERR_ERROR; + goto gotError; + } + + adod.cbStruct = sizeof(adod); + adod.fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC; + adod.fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED; + adod.dwVersion = acmGetVersion(); + adod.dwFlags = fdwOpen; + adod.dwError = 0; + len = strlen("Drivers32") + 1; + adod.pszSectionName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, "Drivers32", -1, (LPWSTR)adod.pszSectionName, len); + len = strlen(padid->pszDriverAlias) + 1; + adod.pszAliasName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, padid->pszDriverAlias, -1, (LPWSTR)adod.pszAliasName, len); + adod.dnDevNode = 0; + + pad->hDrvr = OpenDriverA(padid->pszDriverAlias, NULL, (DWORD)&adod); + + HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszSectionName); + HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszAliasName); + if (!pad->hDrvr) + { + ret = adod.dwError; + goto gotError; + } } /* insert new pad at beg of list */