[MSACM32] Sync with Wine Staging 4.18. CORE-16441
authorAmine Khaldi <amine.khaldi@reactos.org>
Sat, 9 Nov 2019 20:56:33 +0000 (21:56 +0100)
committerAmine Khaldi <amine.khaldi@reactos.org>
Sat, 9 Nov 2019 20:56:33 +0000 (21:56 +0100)
dll/win32/msacm32/driver.c
dll/win32/msacm32/format.c
dll/win32/msacm32/internal.c
dll/win32/msacm32/pcmconverter.c
dll/win32/msacm32/precomp.h
dll/win32/msacm32/wineacm.h
media/doc/README.WINE

index e0c5fdd..f0d003f 100644 (file)
@@ -21,8 +21,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-#include "wine/port.h"
 
 #include <stdarg.h>
 #include <stdio.h>
@@ -38,7 +36,6 @@
 #include "msacmdrv.h"
 #include "wineacm.h"
 #include "wine/debug.h"
-#include "wine/unicode.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(msacm);
 
@@ -441,11 +438,11 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA
 
                     pConfigInfo->dwDCISize = iStructSize;
 
-                    section_name = HeapAlloc(MSACM_hHeap, 0, (strlenW(drivers32) + 1) * sizeof(WCHAR));
-                    if (section_name) strcpyW(section_name, drivers32);
+                    section_name = HeapAlloc(MSACM_hHeap, 0, (lstrlenW(drivers32) + 1) * sizeof(WCHAR));
+                    if (section_name) lstrcpyW(section_name, drivers32);
                     pConfigInfo->lpszDCISectionName = section_name;
-                    alias_name = HeapAlloc(MSACM_hHeap, 0, (strlenW(pAlias) + 1) * sizeof(WCHAR));
-                    if (alias_name) strcpyW(alias_name, pAlias);
+                    alias_name = HeapAlloc(MSACM_hHeap, 0, (lstrlenW(pAlias) + 1) * sizeof(WCHAR));
+                    if (alias_name) lstrcpyW(alias_name, pAlias);
                     pConfigInfo->lpszDCIAliasName = alias_name;
 
                     if (pConfigInfo->lpszDCISectionName == NULL || pConfigInfo->lpszDCIAliasName == NULL) {
@@ -600,8 +597,7 @@ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpe
     return MMSYSERR_NOERROR;
  gotError:
     WARN("failed: ret = %08x\n", ret);
-    if (pad && !pad->hDrvr)
-       HeapFree(MSACM_hHeap, 0, pad);
+    HeapFree(MSACM_hHeap, 0, pad);
     return ret;
 }
 
index fcc0d9b..284633c 100644 (file)
@@ -27,7 +27,6 @@
 #include "winerror.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "wine/unicode.h"
 #include "wine/debug.h"
 #include "mmsystem.h"
 #include "mmreg.h"
@@ -75,7 +74,7 @@ static BOOL CALLBACK MSACM_FillFormatTagsCB(HACMDRIVERID hadid,
         }
        break;
     case WINE_ACMFF_FORMAT:
-       if (strcmpW(affd->szFormatTag, paftd->szFormatTag) == 0) {
+       if (lstrcmpW(affd->szFormatTag, paftd->szFormatTag) == 0) {
            HACMDRIVER          had;
 
            if (acmDriverOpen(&had, hadid, 0) == MMSYSERR_NOERROR) {
@@ -102,7 +101,7 @@ static BOOL CALLBACK MSACM_FillFormatTagsCB(HACMDRIVERID hadid,
                    mmr = acmFormatDetailsW(had, &afd, ACM_FORMATDETAILSF_INDEX);
                    if (mmr == MMSYSERR_NOERROR) {
                        lstrcpynW(buffer, afd.szFormat, ACMFORMATTAGDETAILS_FORMATTAG_CHARS + 1);
-                       len = strlenW(buffer);
+                       len = lstrlenW(buffer);
                        for (j = len; j < ACMFORMATTAGDETAILS_FORMATTAG_CHARS; j++)
                            buffer[j] = ' ';
                        wsprintfW(buffer + ACMFORMATTAGDETAILS_FORMATTAG_CHARS,
@@ -123,7 +122,7 @@ static BOOL CALLBACK MSACM_FillFormatTagsCB(HACMDRIVERID hadid,
        }
        break;
     case WINE_ACMFF_WFX:
-       if (strcmpW(affd->szFormatTag, paftd->szFormatTag) == 0) {
+       if (lstrcmpW(affd->szFormatTag, paftd->szFormatTag) == 0) {
            HACMDRIVER          had;
 
            if (acmDriverOpen(&had, hadid, 0) == MMSYSERR_NOERROR) {
@@ -504,8 +503,8 @@ MMRESULT WINAPI acmFormatDetailsW(HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD
                      pafd->pwfx->wBitsPerSample);
        }
         MultiByteToWideChar(CP_ACP, 0, (pafd->pwfx->nChannels == 1) ? "; Mono" : "; Stereo", -1,
-                            pafd->szFormat + strlenW(pafd->szFormat),
-                            ARRAY_SIZE(pafd->szFormat) - strlenW(pafd->szFormat));
+                            pafd->szFormat + lstrlenW(pafd->szFormat),
+                            ARRAY_SIZE(pafd->szFormat) - lstrlenW(pafd->szFormat));
     }
 
     TRACE("=> %d\n", mmr);
index aad071e..222cf16 100644 (file)
@@ -23,6 +23,9 @@
 
 #include <stdarg.h>
 #include <string.h>
+#ifdef __REACTOS__
+#include <wchar.h>
+#endif
 
 #include "windef.h"
 #include "winbase.h"
@@ -36,7 +39,6 @@
 #include "msacmdrv.h"
 #include "wineacm.h"
 #include "wine/debug.h"
-#include "wine/unicode.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(msacm);
 
@@ -72,7 +74,7 @@ PWINE_ACMDRIVERID MSACM_RegisterDriverFromRegistry(LPCWSTR pszRegEntry)
     /* The requested registry entry must have the format msacm.XXXXX in order to
        be recognized in any future sessions of msacm
      */
-    if (0 == strncmpiW(pszRegEntry, msacmW, ARRAY_SIZE(msacmW))) {
+    if (0 == _wcsnicmp(pszRegEntry, msacmW, ARRAY_SIZE(msacmW))) {
         lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, drvkey, 0, KEY_QUERY_VALUE, &hKey);
         if (lRet != ERROR_SUCCESS) {
             WARN("unable to open registry key - 0x%08x\n", lRet);
@@ -192,12 +194,12 @@ static    LPWSTR  MSACM_GetRegistryKey(const WINE_ACMDRIVERID* padid)
        ERR("No alias needed for registry entry\n");
        return NULL;
     }
-    len = strlenW(baseKey);
-    ret = HeapAlloc(MSACM_hHeap, 0, (len + strlenW(padid->pszDriverAlias) + 1) * sizeof(WCHAR));
+    len = lstrlenW(baseKey);
+    ret = HeapAlloc(MSACM_hHeap, 0, (len + lstrlenW(padid->pszDriverAlias) + 1) * sizeof(WCHAR));
     if (!ret) return NULL;
 
-    strcpyW(ret, baseKey);
-    strcpyW(ret + len, padid->pszDriverAlias);
+    lstrcpyW(ret, baseKey);
+    lstrcpyW(ret + len, padid->pszDriverAlias);
     CharLowerW(ret + len);
     return ret;
 }
@@ -296,23 +298,23 @@ PWINE_ACMDRIVERID MSACM_RegisterDriver(LPCWSTR pszDriverAlias, LPCWSTR pszFileNa
     padid->pszDriverAlias = NULL;
     if (pszDriverAlias)
     {
-        padid->pszDriverAlias = HeapAlloc( MSACM_hHeap, 0, (strlenW(pszDriverAlias)+1) * sizeof(WCHAR) );
+        padid->pszDriverAlias = HeapAlloc( MSACM_hHeap, 0, (lstrlenW(pszDriverAlias)+1) * sizeof(WCHAR) );
         if (!padid->pszDriverAlias) {
             HeapFree(MSACM_hHeap, 0, padid);
             return NULL;
         }
-        strcpyW( padid->pszDriverAlias, pszDriverAlias );
+        lstrcpyW( padid->pszDriverAlias, pszDriverAlias );
     }
     padid->pszFileName = NULL;
     if (pszFileName)
     {
-        padid->pszFileName = HeapAlloc( MSACM_hHeap, 0, (strlenW(pszFileName)+1) * sizeof(WCHAR) );
+        padid->pszFileName = HeapAlloc( MSACM_hHeap, 0, (lstrlenW(pszFileName)+1) * sizeof(WCHAR) );
         if (!padid->pszFileName) {
             HeapFree(MSACM_hHeap, 0, padid->pszDriverAlias);
             HeapFree(MSACM_hHeap, 0, padid);
             return NULL;
         }
-        strcpyW( padid->pszFileName, pszFileName );
+        lstrcpyW( padid->pszFileName, pszFileName );
     }
     padid->pLocalDriver = pLocalDriver;
 
@@ -376,8 +378,8 @@ void MSACM_RegisterAllDrivers(void)
            bufLen = ARRAY_SIZE(buf);
            lRet = RegEnumKeyExW(hKey, i, buf, &bufLen, 0, 0, 0, &lastWrite);
            if (lRet != ERROR_SUCCESS) continue;
-           if (strncmpiW(buf, msacmW, ARRAY_SIZE(msacmW))) continue;
-           if (!(name = strchrW(buf, '='))) continue;
+           if (_wcsnicmp(buf, msacmW, ARRAY_SIZE(msacmW))) continue;
+           if (!(name = wcschr(buf, '='))) continue;
            *name = 0;
            MSACM_RegisterDriver(buf, name + 1, 0);
        }
@@ -386,7 +388,7 @@ void MSACM_RegisterAllDrivers(void)
        bufLen = sizeof(buf);
        while(RegEnumValueW(hKey, i, valname, &cnt, 0,
                    &type, (BYTE*)buf, &bufLen) == ERROR_SUCCESS){
-           if (!strncmpiW(valname, msacmW, ARRAY_SIZE(msacmW)))
+           if (!_wcsnicmp(valname, msacmW, ARRAY_SIZE(msacmW)))
                MSACM_RegisterDriver(valname, buf, 0);
            ++i;
        }
@@ -395,10 +397,10 @@ void MSACM_RegisterAllDrivers(void)
 
     if (GetPrivateProfileSectionW(drv32, buf, ARRAY_SIZE(buf), sys))
     {
-       for(s = buf; *s;  s += strlenW(s) + 1)
+       for(s = buf; *s;  s += lstrlenW(s) + 1)
        {
-           if (strncmpiW(s, msacmW, ARRAY_SIZE(msacmW))) continue;
-           if (!(name = strchrW(s, '='))) continue;
+           if (_wcsnicmp(s, msacmW, ARRAY_SIZE(msacmW))) continue;
+           if (!(name = wcschr(s, '='))) continue;
            *name = 0;
            MSACM_RegisterDriver(s, name + 1, 0);
            *name = '=';
@@ -614,7 +616,7 @@ static void MSACM_ReorderDriversByPriority(void)
             static const WCHAR sPrefix[] = {'m','s','a','c','m','.','\0'};
             
             /* Build expected entry name */
-            snprintfW(szSubKey, 17, priorityTmpl, i + 1);
+            swprintf(szSubKey, priorityTmpl, i + 1);
             lBufferLength = sizeof(szBuffer);
             lError = RegQueryValueExW(hPriorityKey, szSubKey, NULL, NULL, (LPBYTE)szBuffer, (LPDWORD)&lBufferLength);
             if (lError != ERROR_SUCCESS) continue;
@@ -623,11 +625,11 @@ static void MSACM_ReorderDriversByPriority(void)
             iTargetPosition = i;
             
             /* Locate driver alias in driver list */
-            pAlias = strstrW(szBuffer, sPrefix);
+            pAlias = wcsstr(szBuffer, sPrefix);
             if (pAlias == NULL) continue;
             
             for (iCurrentPosition = 0; iCurrentPosition < iNumDrivers; iCurrentPosition++) {
-                if (strcmpiW(driverList[iCurrentPosition]->pszDriverAlias, pAlias) == 0) 
+                if (wcsicmp(driverList[iCurrentPosition]->pszDriverAlias, pAlias) == 0)
                     break;
             }
             if (iCurrentPosition < iNumDrivers && iTargetPosition != iCurrentPosition) {
@@ -703,13 +705,13 @@ void MSACM_WriteCurrentPriorities(void)
 
         /* Build required value name */
         dwPriorityCounter++;
-        snprintfW(szSubKey, 17, priorityTmpl, dwPriorityCounter);
+        swprintf(szSubKey, priorityTmpl, dwPriorityCounter);
         
         /* Value has a 1 in front for enabled drivers and 0 for disabled drivers */
-        snprintfW(szBuffer, 256, valueTmpl, (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) ? '0' : '1', padid->pszDriverAlias);
-        strlwrW(szBuffer);
+        swprintf(szBuffer, valueTmpl, (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) ? '0' : '1', padid->pszDriverAlias);
+        _wcslwr(szBuffer);
         
-        lError = RegSetValueExW(hPriorityKey, szSubKey, 0, REG_SZ, (BYTE *)szBuffer, (strlenW(szBuffer) + 1) * sizeof(WCHAR));
+        lError = RegSetValueExW(hPriorityKey, szSubKey, 0, REG_SZ, (BYTE *)szBuffer, (lstrlenW(szBuffer) + 1) * sizeof(WCHAR));
         if (lError != ERROR_SUCCESS) {
             ERR("unable to write value for %s under key %s (0x%08x)\n",
                 debugstr_w(padid->pszDriverAlias), debugstr_w(basePriorityKey), lError);
@@ -718,12 +720,12 @@ void MSACM_WriteCurrentPriorities(void)
     
     /* Build required value name */
     dwPriorityCounter++;
-    snprintfW(szSubKey, 17, priorityTmpl, dwPriorityCounter);
+    swprintf(szSubKey, priorityTmpl, dwPriorityCounter);
         
     /* Value has a 1 in front for enabled drivers and 0 for disabled drivers */
-    snprintfW(szBuffer, 256, valueTmpl, '1', converterAlias);
+    swprintf(szBuffer, valueTmpl, '1', converterAlias);
         
-    lError = RegSetValueExW(hPriorityKey, szSubKey, 0, REG_SZ, (BYTE *)szBuffer, (strlenW(szBuffer) + 1) * sizeof(WCHAR));
+    lError = RegSetValueExW(hPriorityKey, szSubKey, 0, REG_SZ, (BYTE *)szBuffer, (lstrlenW(szBuffer) + 1) * sizeof(WCHAR));
     if (lError != ERROR_SUCCESS) {
         ERR("unable to write value for %s under key %s (0x%08x)\n",
             debugstr_w(converterAlias), debugstr_w(basePriorityKey), lError);
@@ -737,12 +739,17 @@ static PWINE_ACMLOCALDRIVER MSACM_pLastACMLocalDriver;
 static PWINE_ACMLOCALDRIVER MSACM_UnregisterLocalDriver(PWINE_ACMLOCALDRIVER paldrv)
 {
     PWINE_ACMLOCALDRIVER pNextACMLocalDriver;
+    LONG ref;
 
     if (paldrv->pACMInstList) {
         ERR("local driver instances still present after closing all drivers - memory leak\n");
         return NULL;
     }
 
+    ref = InterlockedDecrement(&paldrv->ref);
+    if (ref)
+        return paldrv;
+
     if (paldrv == MSACM_pFirstACMLocalDriver)
         MSACM_pFirstACMLocalDriver = paldrv->pNextACMLocalDrv;
     if (paldrv == MSACM_pLastACMLocalDriver)
@@ -883,7 +890,11 @@ PWINE_ACMLOCALDRIVER MSACM_RegisterLocalDriver(HMODULE hModule, DRIVERPROC lpDri
     /* look up previous instance of local driver module */
     for (paldrv = MSACM_pFirstACMLocalDriver; paldrv; paldrv = paldrv->pNextACMLocalDrv)
     {
-        if (paldrv->hModule == hModule && paldrv->lpDrvProc == lpDriverProc) return paldrv;
+        if (paldrv->hModule == hModule && paldrv->lpDrvProc == lpDriverProc)
+        {
+            InterlockedIncrement(&paldrv->ref);
+            return paldrv;
+        }
     }
 
     paldrv = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMLOCALDRIVER));
@@ -892,6 +903,7 @@ PWINE_ACMLOCALDRIVER MSACM_RegisterLocalDriver(HMODULE hModule, DRIVERPROC lpDri
     paldrv->hModule = hModule;
     paldrv->lpDrvProc = lpDriverProc;
     paldrv->pACMInstList = NULL;
+    paldrv->ref = 1;
 
     paldrv->pNextACMLocalDrv = NULL;
     paldrv->pPrevACMLocalDrv = MSACM_pLastACMLocalDriver;
index dc10f11..d528a6d 100644 (file)
@@ -26,7 +26,6 @@
  *       embedded driver handling scheme in msacm32.dll which isn't done yet
  */
 
-#include "config.h"
 
 #include <assert.h>
 #include <stdarg.h>
index dae5033..6beb486 100644 (file)
@@ -2,8 +2,6 @@
 #ifndef _WINEACM_PRECOMP_H
 #define _WINEACM_PRECOMP_H
 
-#include <wine/config.h>
-
 #include <stdarg.h>
 
 #define WIN32_NO_STATUS
@@ -12,6 +10,5 @@
 #include "wineacm.h"
 
 #include <wine/debug.h>
-#include <wine/unicode.h>
 
 #endif /* !_WINEACM_PRECOMP_H */
index 37d639d..72f6cdb 100644 (file)
@@ -55,6 +55,7 @@ typedef struct _WINE_ACMLOCALDRIVER
     PWINE_ACMLOCALDRIVERINST pACMInstList;
     PWINE_ACMLOCALDRIVER pNextACMLocalDrv;
     PWINE_ACMLOCALDRIVER pPrevACMLocalDrv;
+    LONG                ref;
 } WINE_ACMLOCALDRIVER;
 
 typedef struct _WINE_ACMLOCALDRIVERINST
index 4cf3263..6ef8169 100644 (file)
@@ -101,7 +101,7 @@ dll/win32/mlang               # Synced to WineStaging-4.18
 dll/win32/mmdevapi            # Synced to WineStaging-4.18
 dll/win32/mpr                 # Synced to WineStaging-4.18
 dll/win32/mprapi              # Synced to WineStaging-3.3
-dll/win32/msacm32             # Synced to WineStaging-4.0
+dll/win32/msacm32             # Synced to WineStaging-4.18
 dll/win32/msacm32.drv         # Synced to WineStaging-3.3
 dll/win32/msadp32.acm         # Synced to WineStaging-4.0
 dll/win32/mscat32             # Synced to WineStaging-3.3