msacm patch with tests
Robert Reif
reif at earthlink.net
Sat May 1 08:18:09 CDT 2004
Adds test program.
Fixes some function parameter checking.
This is the beginning of a test program that I
want to develop to find a nasty off by one bug
in the PCM converter. I found the bug because
it would crash when running off the end of
an array. I fixed the crash by not going past the
end but now it sometimes doesn't convert all
the data.
-------------- next part --------------
Index: configure.ac
===================================================================
RCS file: /home/wine/wine/configure.ac,v
retrieving revision 1.271
diff -u -r1.271 configure.ac
--- configure.ac 29 Apr 2004 20:04:48 -0000 1.271
+++ configure.ac 1 May 2004 12:57:39 -0000
@@ -1567,6 +1567,7 @@
dlls/msacm/msadp32/Makefile
dlls/msacm/msg711/Makefile
dlls/msacm/winemp3/Makefile
+dlls/msacm/tests/Makefile
dlls/msdmo/Makefile
dlls/mshtml/Makefile
dlls/msi/Makefile
Index: dlls/msacm/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/msacm/Makefile.in,v
retrieving revision 1.24
diff -u -r1.24 Makefile.in
--- dlls/msacm/Makefile.in 11 Oct 2003 01:09:19 -0000 1.24
+++ dlls/msacm/Makefile.in 1 May 2004 12:57:43 -0000
@@ -22,6 +22,8 @@
RC_SRCS = msacm.rc
+SUBDIRS = tests
+
@MAKE_DLL_RULES@
### Dependencies:
Index: dlls/msacm/driver.c
===================================================================
RCS file: /home/wine/wine/dlls/msacm/driver.c,v
retrieving revision 1.23
diff -u -r1.23 driver.c
--- dlls/msacm/driver.c 5 Sep 2003 23:08:36 -0000 1.23
+++ dlls/msacm/driver.c 1 May 2004 12:57:43 -0000
@@ -132,6 +132,12 @@
MMRESULT mmr;
ACMDRIVERDETAILSW addw;
+ if (!padd)
+ return MMSYSERR_INVALPARAM;
+
+ if (padd->cbStruct < sizeof(*padd))
+ return MMSYSERR_INVALPARAM;
+
addw.cbStruct = sizeof(addw);
mmr = acmDriverDetailsW(hadid, &addw, fdwDetails);
if (mmr == 0) {
@@ -166,6 +172,12 @@
{
HACMDRIVER acmDrvr;
MMRESULT mmr;
+
+ if (!padd)
+ return MMSYSERR_INVALPARAM;
+
+ if (padd->cbStruct < sizeof(*padd))
+ return MMSYSERR_INVALPARAM;
if (fdwDetails)
return MMSYSERR_INVALFLAG;
Index: dlls/msacm/format.c
===================================================================
RCS file: /home/wine/wine/dlls/msacm/format.c,v
retrieving revision 1.24
diff -u -r1.24 format.c
--- dlls/msacm/format.c 20 Apr 2004 00:34:53 -0000 1.24
+++ dlls/msacm/format.c 1 May 2004 12:57:44 -0000
@@ -411,6 +411,12 @@
ACMFORMATDETAILSW afdw;
struct MSACM_FormatEnumWtoA_Instance afei;
+ if (!pafda)
+ return MMSYSERR_INVALPARAM;
+
+ if (pafda->cbStruct < sizeof(*pafda))
+ return MMSYSERR_INVALPARAM;
+
memset(&afdw, 0, sizeof(afdw));
afdw.cbStruct = sizeof(afdw);
afdw.dwFormatIndex = pafda->dwFormatIndex;
@@ -489,7 +495,11 @@
TRACE("(%p, %p, %p, %ld, %ld)\n",
had, pafd, fnCallback, dwInstance, fdwEnum);
- if (pafd->cbStruct < sizeof(*pafd)) return MMSYSERR_INVALPARAM;
+ if (!pafd)
+ return MMSYSERR_INVALPARAM;
+
+ if (pafd->cbStruct < sizeof(*pafd))
+ return MMSYSERR_INVALPARAM;
if (fdwEnum & (ACM_FORMATENUMF_WFORMATTAG|ACM_FORMATENUMF_NCHANNELS|
ACM_FORMATENUMF_NSAMPLESPERSEC|ACM_FORMATENUMF_WBITSPERSAMPLE|
Index: dlls/msacm/msacm32_main.c
===================================================================
RCS file: /home/wine/wine/dlls/msacm/msacm32_main.c,v
retrieving revision 1.17
diff -u -r1.17 msacm32_main.c
--- dlls/msacm/msacm32_main.c 5 Sep 2003 23:08:36 -0000 1.17
+++ dlls/msacm/msacm32_main.c 1 May 2004 12:57:44 -0000
@@ -120,6 +120,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_DRIVERS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
val++;
@@ -131,6 +132,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_CODECS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) &&
@@ -144,6 +146,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) &&
@@ -157,6 +160,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_FILTERS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) &&
@@ -170,6 +174,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_DISABLED:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if ((padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
val++;
@@ -204,10 +209,17 @@
} else {
return MMSYSERR_INVALHANDLE;
}
+ if (!pMetric) return MMSYSERR_INVALPARAM;
*(LPDWORD)pMetric = val;
break;
case ACM_METRIC_COUNT_HARDWARE:
+ if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
+ *(LPDWORD)pMetric = 0;
+ FIXME("ACM_METRIC_COUNT_HARDWARE not implemented\n");
+ break;
+
case ACM_METRIC_HARDWARE_WAVE_INPUT:
case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
case ACM_METRIC_MAX_SIZE_FILTER:
-------------- next part --------------
diff -u -N -r wine.cvs/dlls/msacm/tests/.cvsignore wine/dlls/msacm/tests/.cvsignore
--- wine.cvs/dlls/msacm/tests/.cvsignore 1969-12-31 19:00:00.000000000 -0500
+++ wine/dlls/msacm/tests/.cvsignore 2004-05-01 08:43:46.000000000 -0400
@@ -0,0 +1,3 @@
+Makefile
+testlist.c
+msacm.ok
diff -u -N -r wine.cvs/dlls/msacm/tests/Makefile.in wine/dlls/msacm/tests/Makefile.in
--- wine.cvs/dlls/msacm/tests/Makefile.in 1969-12-31 19:00:00.000000000 -0500
+++ wine/dlls/msacm/tests/Makefile.in 2004-04-30 18:17:13.000000000 -0400
@@ -0,0 +1,14 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+TESTDLL = msacm32.dll
+IMPORTS = msacm32
+EXTRALIBS =
+
+CTESTS = \
+ msacm.c
+
+ at MAKE_TEST_RULES@
+
+### Dependencies:
diff -u -N -r wine.cvs/dlls/msacm/tests/msacm.c wine/dlls/msacm/tests/msacm.c
--- wine.cvs/dlls/msacm/tests/msacm.c 1969-12-31 19:00:00.000000000 -0500
+++ wine/dlls/msacm/tests/msacm.c 2004-05-01 08:41:04.000000000 -0400
@@ -0,0 +1,327 @@
+/*
+ * Unit tests for msacm functions
+ *
+ * Copyright (c) 2004 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "wine/test.h"
+#include "windef.h"
+#include "winbase.h"
+#include "winnls.h"
+#include "mmsystem.h"
+#include "mmreg.h"
+#include "msacm.h"
+
+static BOOL CALLBACK FormatEnumProc(HACMDRIVERID hadid,
+ LPACMFORMATDETAILS pafd,
+ DWORD dwInstance,
+ DWORD fd)
+{
+ trace(" 0x%04lx, %s\n", pafd->dwFormatTag, pafd->szFormat);
+
+ return TRUE;
+}
+
+static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid,
+ DWORD dwInstance,
+ DWORD fdwSupport)
+{
+ MMRESULT rc;
+ ACMDRIVERDETAILS dd;
+ HACMDRIVER had;
+
+ trace("id: %p\n", hadid);
+ trace(" Supports:\n");
+ if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_ASYNC)
+ trace(" async conversions\n");
+ if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC)
+ trace(" different format conversions\n");
+ if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER)
+ trace(" same format conversions\n");
+ if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER)
+ trace(" filtering\n");
+
+ /* try an invalid pointer */
+ rc = acmDriverDetails(hadid, 0, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmDriverDetails(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ /* try an invalid structure size */
+ ZeroMemory(&dd, sizeof(dd));
+ rc = acmDriverDetails(hadid, &dd, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmDriverDetails(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ dd.cbStruct = sizeof(dd) - 1;
+ rc = acmDriverDetails(hadid, &dd, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmDriverDetails(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ /* try an invalid handle */
+ dd.cbStruct = sizeof(dd);
+ rc = acmDriverDetails((HACMDRIVERID)1, &dd, 0);
+ ok(rc == MMSYSERR_INVALHANDLE,
+ "acmDriverDetails(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALHANDLE);
+
+ /* try an invalid handle and pointer */
+ rc = acmDriverDetails((HACMDRIVERID)1, 0, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmDriverDetails(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ /* try invalid details */
+ rc = acmDriverDetails(hadid, &dd, -1);
+ ok(rc == MMSYSERR_INVALFLAG,
+ "acmDriverDetails(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALFLAG);
+
+ /* try valid parameters */
+ rc = acmDriverDetails(hadid, &dd, 0);
+ ok(rc == MMSYSERR_NOERROR,
+ "acmDriverDetails(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_NOERROR);
+
+ if (rc == MMSYSERR_NOERROR) {
+ trace(" Short name: %s\n", dd.szShortName);
+ trace(" Long name: %s\n", dd.szLongName);
+ trace(" Copyright: %s\n", dd.szCopyright);
+ trace(" Licensing: %s\n", dd.szLicensing);
+ trace(" Features: %s\n", dd.szFeatures);
+ trace(" Supports %lu formats\n", dd.cFormatTags);
+ trace(" Supports %lu filter formats\n", dd.cFilterTags);
+ }
+
+ /* try invalid pointer */
+ rc = acmDriverOpen(0, hadid, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmDriverOpen(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ /* try invalid handle */
+ rc = acmDriverOpen(&had, (HACMDRIVERID)1, 0);
+ ok(rc == MMSYSERR_INVALHANDLE,
+ "acmDriverOpen(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALHANDLE);
+
+ /* try invalid open */
+ rc = acmDriverOpen(&had, hadid, -1);
+ ok(rc == MMSYSERR_INVALFLAG,
+ "acmDriverOpen(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALFLAG);
+
+ /* try valid parameters */
+ rc = acmDriverOpen(&had, hadid, 0);
+ ok(rc == MMSYSERR_NOERROR,
+ "acmDriverOpen(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_NOERROR);
+
+ if (rc == MMSYSERR_NOERROR) {
+ DWORD dwSize;
+ WAVEFORMATEX * pwfx;
+ ACMFORMATDETAILS fd;
+
+ /* try bad pointer */
+ rc = acmMetrics((HACMOBJ)had, ACM_METRIC_MAX_SIZE_FORMAT, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmMetrics(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ /* try bad pointer */
+ rc = acmMetrics((HACMOBJ)1, ACM_METRIC_MAX_SIZE_FORMAT, &dwSize);
+ ok(rc == MMSYSERR_INVALHANDLE,
+ "acmMetrics(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALHANDLE);
+
+ /* try bad pointer and handle */
+ rc = acmMetrics((HACMOBJ)1, ACM_METRIC_MAX_SIZE_FORMAT, 0);
+ ok(rc == MMSYSERR_INVALHANDLE,
+ "acmMetrics(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALHANDLE);
+
+ /* try valid parameters */
+ rc = acmMetrics((HACMOBJ)had, ACM_METRIC_MAX_SIZE_FORMAT, &dwSize);
+ ok(rc == MMSYSERR_NOERROR,
+ "acmMetrics(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_NOERROR);
+ if (rc == MMSYSERR_NOERROR) {
+ /* try bad pointer */
+ rc = acmFormatEnum(had, 0, FormatEnumProc, 0, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmFormatEnum(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ /* try bad structure size */
+ ZeroMemory(&fd, sizeof(fd));
+ rc = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmFormatEnum(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ fd.cbStruct = sizeof(fd) - 1;
+ rc = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmFormatEnum(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_INVALPARAM);
+
+ if (dwSize < sizeof(WAVEFORMATEX))
+ dwSize = sizeof(WAVEFORMATEX);
+
+ pwfx = (WAVEFORMATEX *) malloc(dwSize);
+
+ ZeroMemory(pwfx, dwSize);
+ pwfx->cbSize = LOWORD(dwSize) - sizeof(WAVEFORMATEX);
+ pwfx->wFormatTag = WAVE_FORMAT_UNKNOWN;
+
+ fd.cbStruct = sizeof(fd);
+ fd.pwfx = pwfx;
+ fd.cbwfx = dwSize;
+ fd.dwFormatTag = WAVE_FORMAT_UNKNOWN;
+
+ /* try valid parameters */
+ rc = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0);
+ ok(rc == MMSYSERR_NOERROR,
+ "acmFormatEnum(): rc = %08x, should be %08x\n",
+ rc, MMSYSERR_NOERROR);
+
+ free(pwfx);
+
+ acmDriverClose(had, 0);
+ }
+ }
+
+ return TRUE;
+}
+
+static const char * get_metric(UINT uMetric)
+{
+ switch (uMetric) {
+ case ACM_METRIC_COUNT_CODECS:
+ return "ACM_METRIC_COUNT_CODECS";
+ case ACM_METRIC_COUNT_CONVERTERS:
+ return "ACM_METRIC_COUNT_CONVERTERS";
+ case ACM_METRIC_COUNT_DISABLED:
+ return "ACM_METRIC_COUNT_DISABLED";
+ case ACM_METRIC_COUNT_DRIVERS:
+ return "ACM_METRIC_COUNT_DRIVERS";
+ case ACM_METRIC_COUNT_FILTERS:
+ return "ACM_METRIC_COUNT_FILTERS";
+ case ACM_METRIC_COUNT_HARDWARE:
+ return "ACM_METRIC_COUNT_HARDWARE";
+ case ACM_METRIC_COUNT_LOCAL_CODECS:
+ return "ACM_METRIC_COUNT_LOCAL_CODECS";
+ case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
+ return "ACM_METRIC_COUNT_LOCAL_CONVERTERS";
+ case ACM_METRIC_COUNT_LOCAL_DISABLED:
+ return "ACM_METRIC_COUNT_LOCAL_DISABLED";
+ case ACM_METRIC_COUNT_LOCAL_DRIVERS:
+ return "ACM_METRIC_COUNT_LOCAL_DRIVERS";
+ case ACM_METRIC_COUNT_LOCAL_FILTERS:
+ return "ACM_METRIC_COUNT_LOCAL_FILTERS";
+ case ACM_METRIC_DRIVER_PRIORITY:
+ return "ACM_METRIC_DRIVER_PRIORITY";
+ case ACM_METRIC_DRIVER_SUPPORT:
+ return "ACM_METRIC_DRIVER_SUPPORT";
+ case ACM_METRIC_HARDWARE_WAVE_INPUT:
+ return "ACM_METRIC_HARDWARE_WAVE_INPUT";
+ case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
+ return "ACM_METRIC_HARDWARE_WAVE_OUTPUT";
+ case ACM_METRIC_MAX_SIZE_FILTER:
+ return "ACM_METRIC_MAX_SIZE_FILTER";
+ case ACM_METRIC_MAX_SIZE_FORMAT:
+ return "ACM_METRIC_MAX_SIZE_FORMAT";
+ }
+
+ return "UNKNOWN";
+}
+
+static DWORD check_count(UINT uMetric)
+{
+ DWORD dwMetric;
+ MMRESULT rc;
+
+ /* try invalid result pointer */
+ rc = acmMetrics(NULL, uMetric, 0);
+ ok(rc == MMSYSERR_INVALPARAM,
+ "acmMetrics(NULL, %s, 0): rc = 0x%08x, should be 0x%08x\n",
+ get_metric(uMetric), rc, MMSYSERR_INVALPARAM);
+
+ /* try invalid handle */
+ rc = acmMetrics((HACMOBJ)1, uMetric, &dwMetric);
+ ok(rc == MMSYSERR_INVALHANDLE,
+ "acmMetrics(1, %s, %p): rc = 0x%08x, should be 0x%08x\n",
+ get_metric(uMetric), &dwMetric, rc, MMSYSERR_INVALHANDLE);
+
+ /* try invalid result pointer and handle */
+ rc = acmMetrics((HACMOBJ)1, uMetric, 0);
+ ok(rc == MMSYSERR_INVALHANDLE,
+ "acmMetrics(1, %s, 0): rc = 0x%08x, should be 0x%08x\n",
+ get_metric(uMetric), rc, MMSYSERR_INVALHANDLE);
+
+ /* try valid parameters */
+ rc = acmMetrics(NULL, uMetric, &dwMetric);
+ ok(rc == MMSYSERR_NOERROR, "acmMetrics() failed: rc = 0x%08x\n", rc);
+
+ if (rc == MMSYSERR_NOERROR)
+ trace("%s: %lu\n", get_metric(uMetric), dwMetric);
+
+ return dwMetric;
+}
+
+static void msacm_tests()
+{
+ MMRESULT rc;
+ DWORD dwCount;
+ DWORD dwACMVersion = acmGetVersion();
+
+ trace("ACM version = %u.%02u build %u%s\n",
+ HIWORD(dwACMVersion) >> 8,
+ HIWORD(dwACMVersion) & 0xff,
+ LOWORD(dwACMVersion),
+ LOWORD(dwACMVersion) == 0 ? " (Retail)" : "");
+
+ dwCount = check_count(ACM_METRIC_COUNT_CODECS);
+ dwCount = check_count(ACM_METRIC_COUNT_CONVERTERS);
+ dwCount = check_count(ACM_METRIC_COUNT_DISABLED);
+ dwCount = check_count(ACM_METRIC_COUNT_DRIVERS);
+ dwCount = check_count(ACM_METRIC_COUNT_FILTERS);
+ dwCount = check_count(ACM_METRIC_COUNT_HARDWARE);
+ dwCount = check_count(ACM_METRIC_COUNT_LOCAL_CODECS);
+ dwCount = check_count(ACM_METRIC_COUNT_LOCAL_CONVERTERS);
+ dwCount = check_count(ACM_METRIC_COUNT_LOCAL_DISABLED);
+ dwCount = check_count(ACM_METRIC_COUNT_LOCAL_DRIVERS);
+ dwCount = check_count(ACM_METRIC_COUNT_LOCAL_FILTERS);
+
+ trace("enabled drivers:\n");
+ rc = acmDriverEnum(DriverEnumProc, 0, 0);
+ ok(rc == MMSYSERR_NOERROR,
+ "acmDriverEnum() failed, rc=%08x, should be 0x%08x\n",
+ rc, MMSYSERR_NOERROR);
+}
+
+START_TEST(msacm)
+{
+ msacm_tests();
+}
More information about the wine-patches
mailing list