msvfw32: Get rid of enum_drivers().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
07a1f8d9fe
commit
3ff496b989
|
@ -234,53 +234,6 @@ static DWORD get_size_image(LONG width, LONG height, WORD depth)
|
|||
return ret;
|
||||
}
|
||||
|
||||
typedef BOOL (*enum_handler_t)(const char *name, const char *driver, unsigned int index, void *param);
|
||||
|
||||
static BOOL enum_drivers(DWORD fccType, enum_handler_t handler, void* param)
|
||||
{
|
||||
char fccTypeStr[4];
|
||||
char name_buf[10];
|
||||
char buf[2048];
|
||||
|
||||
DWORD i, cnt = 0, lRet;
|
||||
BOOL result = FALSE;
|
||||
HKEY hKey;
|
||||
|
||||
fourcc_to_string(fccTypeStr, fccType);
|
||||
|
||||
/* first, go through the registry entries */
|
||||
lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, HKLM_DRIVERS32, 0, KEY_QUERY_VALUE, &hKey);
|
||||
if (lRet == ERROR_SUCCESS)
|
||||
{
|
||||
i = 0;
|
||||
for (;;)
|
||||
{
|
||||
DWORD name_len = 10, driver_len = 128;
|
||||
lRet = RegEnumValueA(hKey, i++, name_buf, &name_len, 0, 0, (BYTE *)buf, &driver_len);
|
||||
if (lRet == ERROR_NO_MORE_ITEMS) break;
|
||||
if (name_len != 9 || name_buf[4] != '.') continue;
|
||||
if (fccType && strncasecmp(name_buf, fccTypeStr, 4)) continue;
|
||||
if ((result = handler(name_buf, buf, cnt++, param))) break;
|
||||
}
|
||||
RegCloseKey( hKey );
|
||||
}
|
||||
if (result) return result;
|
||||
|
||||
/* if that didn't work, go through the values in system.ini */
|
||||
if (GetPrivateProfileSectionA("drivers32", buf, sizeof(buf), "system.ini"))
|
||||
{
|
||||
char *s;
|
||||
for (s = buf; *s; s += strlen(s) + 1)
|
||||
{
|
||||
if (s[4] != '.' || s[9] != '=') continue;
|
||||
if (fccType && strncasecmp(s, fccTypeStr, 4)) continue;
|
||||
if ((result = handler(s, s + 10, cnt++, param))) break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
* MSVIDEO_GetHicPtr
|
||||
*
|
||||
|
@ -305,27 +258,6 @@ DWORD WINAPI VideoForWindowsVersion(void)
|
|||
return 0x040003B6; /* 4.950 */
|
||||
}
|
||||
|
||||
static BOOL ICInfo_enum_handler(const char *name, const char *driver, unsigned int nr, void *param)
|
||||
{
|
||||
ICINFO *lpicinfo = param;
|
||||
DWORD fccType = mmioStringToFOURCCA(name, 0);
|
||||
DWORD fccHandler = mmioStringToFOURCCA(name + 5, 0);
|
||||
|
||||
if (lpicinfo->fccHandler != nr && compare_fourcc(lpicinfo->fccHandler, fccHandler))
|
||||
return FALSE;
|
||||
|
||||
lpicinfo->fccType = fccType;
|
||||
lpicinfo->fccHandler = fccHandler;
|
||||
lpicinfo->dwFlags = 0;
|
||||
lpicinfo->dwVersion = 0;
|
||||
lpicinfo->dwVersionICM = ICVERSION;
|
||||
lpicinfo->szName[0] = 0;
|
||||
lpicinfo->szDescription[0] = 0;
|
||||
MultiByteToWideChar(CP_ACP, 0, driver, -1, lpicinfo->szDriver, ARRAY_SIZE(lpicinfo->szDriver));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ICInfo [MSVFW32.@]
|
||||
* Get information about an installable compressor. Return TRUE if there
|
||||
|
@ -336,14 +268,69 @@ static BOOL ICInfo_enum_handler(const char *name, const char *driver, unsigned i
|
|||
* fccHandler [I] real fcc for handler or <n>th compressor
|
||||
* lpicinfo [O] information about compressor
|
||||
*/
|
||||
BOOL VFWAPI ICInfo( DWORD fccType, DWORD fccHandler, ICINFO *lpicinfo)
|
||||
BOOL VFWAPI ICInfo(DWORD type, DWORD handler, ICINFO *info)
|
||||
{
|
||||
TRACE("(%s,%s,%p)\n",
|
||||
wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), lpicinfo);
|
||||
char name_buf[10], buf[2048];
|
||||
DWORD ret_type, ret_handler;
|
||||
DWORD i, count = 0;
|
||||
LONG res;
|
||||
HKEY key;
|
||||
|
||||
lpicinfo->fccType = fccType;
|
||||
lpicinfo->fccHandler = fccHandler;
|
||||
return enum_drivers(fccType, ICInfo_enum_handler, lpicinfo);
|
||||
TRACE("type %s, handler %s, info %p.\n",
|
||||
wine_dbgstr_fcc(type), wine_dbgstr_fcc(handler), info);
|
||||
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->dwSize = sizeof(*info);
|
||||
info->dwVersionICM = ICVERSION;
|
||||
|
||||
if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, HKLM_DRIVERS32, 0, KEY_QUERY_VALUE, &key))
|
||||
{
|
||||
i = 0;
|
||||
for (;;)
|
||||
{
|
||||
DWORD name_len = ARRAY_SIZE(name_buf), driver_len = ARRAY_SIZE(info->szDriver);
|
||||
|
||||
res = RegEnumValueA(key, i++, name_buf, &name_len, 0, 0, (BYTE *)buf, &driver_len);
|
||||
if (res == ERROR_NO_MORE_ITEMS) break;
|
||||
|
||||
if (name_len != 9 || name_buf[4] != '.') continue;
|
||||
ret_type = mmioStringToFOURCCA(name_buf, 0);
|
||||
ret_handler = mmioStringToFOURCCA(name_buf + 5, 0);
|
||||
if (type && compare_fourcc(type, ret_type)) continue;
|
||||
if (compare_fourcc(handler, ret_handler) && handler != count++) continue;
|
||||
|
||||
info->fccType = ret_type;
|
||||
info->fccHandler = ret_handler;
|
||||
MultiByteToWideChar(CP_ACP, 0, buf, -1, info->szDriver, ARRAY_SIZE(info->szDriver));
|
||||
TRACE("Returning codec %s, driver %s.\n", debugstr_a(name_buf), debugstr_a(buf));
|
||||
return TRUE;
|
||||
}
|
||||
RegCloseKey(key);
|
||||
}
|
||||
|
||||
if (GetPrivateProfileSectionA("drivers32", buf, sizeof(buf), "system.ini"))
|
||||
{
|
||||
char *s;
|
||||
for (s = buf; *s; s += strlen(s) + 1)
|
||||
{
|
||||
if (s[4] != '.' || s[9] != '=') continue;
|
||||
ret_type = mmioStringToFOURCCA(s, 0);
|
||||
ret_handler = mmioStringToFOURCCA(s + 5, 0);
|
||||
if (type && compare_fourcc(type, ret_type)) continue;
|
||||
if (compare_fourcc(handler, ret_handler) && handler != count++) continue;
|
||||
|
||||
info->fccType = ret_type;
|
||||
info->fccHandler = ret_handler;
|
||||
MultiByteToWideChar(CP_ACP, 0, s + 10, -1, info->szDriver, ARRAY_SIZE(info->szDriver));
|
||||
TRACE("Returning codec %s, driver %s.\n", debugstr_an(s, 8), debugstr_a(s + 10));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
info->fccType = type;
|
||||
info->fccHandler = handler;
|
||||
WARN("No driver found for codec %s.%s.\n", wine_dbgstr_fcc(type), wine_dbgstr_fcc(handler));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static DWORD IC_HandleRef = 1;
|
||||
|
|
|
@ -358,14 +358,12 @@ static void test_ICInfo(void)
|
|||
ok(!ICInfo(ICTYPE_VIDEO, mmioFOURCC('f','a','k','e'), &info), "expected failure\n");
|
||||
ok(info.fccType == ICTYPE_VIDEO, "got 0x%08x\n", info.fccType);
|
||||
ok(info.fccHandler == mmioFOURCC('f','a','k','e'), "got 0x%08x\n", info.fccHandler);
|
||||
todo_wine {
|
||||
ok(!info.dwFlags, "Got unexpected flags %#x.\n", info.dwFlags);
|
||||
ok(!info.dwVersion, "Got unexpected version %#x.\n", info.dwVersion);
|
||||
ok(info.dwVersionICM == ICVERSION, "Got unexpected ICM version %#x.\n", info.dwVersionICM);
|
||||
ok(!info.szName[0], "Got unexpected name %s.\n", wine_dbgstr_w(info.szName));
|
||||
ok(!info.szDescription[0], "Got unexpected name %s.\n", wine_dbgstr_w(info.szDescription));
|
||||
ok(!info.szDriver[0], "Got unexpected driver %s.\n", wine_dbgstr_w(info.szDriver));
|
||||
}
|
||||
|
||||
if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT"
|
||||
"\\CurrentVersion\\Drivers32", 0, KEY_ALL_ACCESS, &key))
|
||||
|
@ -386,14 +384,13 @@ todo_wine
|
|||
ok(ICInfo(test_type, test_handler, &info), "Expected success.\n");
|
||||
ok(info.fccType == test_type, "Got unexpected type %#x.\n", info.fccType);
|
||||
ok(info.fccHandler == test_handler, "Got unexpected handler %#x.\n", info.fccHandler);
|
||||
todo_wine {
|
||||
ok(!info.dwFlags, "Got unexpected flags %#x.\n", info.dwFlags);
|
||||
ok(!info.dwVersion, "Got unexpected version %#x.\n", info.dwVersion);
|
||||
ok(info.dwVersionICM == ICVERSION, "Got unexpected ICM version %#x.\n", info.dwVersionICM);
|
||||
ok(!info.szName[0], "Got unexpected name %s.\n", wine_dbgstr_w(info.szName));
|
||||
ok(!info.szDescription[0], "Got unexpected name %s.\n", wine_dbgstr_w(info.szDescription));
|
||||
todo_wine
|
||||
ok(!lstrcmpW(info.szDriver, bogusW), "Got unexpected driver %s.\n", wine_dbgstr_w(info.szDriver));
|
||||
}
|
||||
|
||||
/* Drivers installed after msvfw32 is loaded are not enumerated. */
|
||||
ok(!ICInfo(test_type, 0, &info), "Expected failure.\n");
|
||||
|
@ -439,13 +436,14 @@ todo_wine {
|
|||
ok(ICInfo(test_type, test_handler, &enum_info), "Expected success.\n");
|
||||
ok(!enum_info.fccType, "Got unexpected type %#x.\n", enum_info.fccType);
|
||||
ok(!enum_info.fccHandler, "Got unexpected handler %#x.\n", enum_info.fccHandler);
|
||||
}
|
||||
ok(!enum_info.dwFlags, "Got unexpected flags %#x.\n", enum_info.dwFlags);
|
||||
todo_wine
|
||||
ok(enum_info.dwVersion == 0xdeadbeef, "Got unexpected version %#x.\n", enum_info.dwVersion);
|
||||
ok(enum_info.dwVersionICM == ICVERSION, "Got unexpected ICM version %#x.\n", enum_info.dwVersionICM);
|
||||
ok(!enum_info.szName[0], "Got unexpected name %s.\n", wine_dbgstr_w(enum_info.szName));
|
||||
ok(!enum_info.szDescription[0], "Got unexpected name %s.\n", wine_dbgstr_w(enum_info.szDescription));
|
||||
ok(!enum_info.szDriver[0], "Got unexpected driver %s.\n", wine_dbgstr_w(enum_info.szDriver));
|
||||
}
|
||||
|
||||
/* Functions installed after msvfw32 is loaded are enumerated. */
|
||||
memset(&enum_info, 0x55, sizeof(enum_info));
|
||||
|
@ -455,14 +453,13 @@ todo_wine {
|
|||
ok(!enum_info.fccType, "Got unexpected type %#x.\n", enum_info.fccType);
|
||||
}
|
||||
ok(!enum_info.fccHandler, "Got unexpected handler %#x.\n", enum_info.fccHandler);
|
||||
todo_wine {
|
||||
ok(!enum_info.dwFlags, "Got unexpected flags %#x.\n", enum_info.dwFlags);
|
||||
todo_wine
|
||||
ok(enum_info.dwVersion == 0xdeadbeef, "Got unexpected version %#x.\n", enum_info.dwVersion);
|
||||
ok(enum_info.dwVersionICM == ICVERSION, "Got unexpected ICM version %#x.\n", enum_info.dwVersionICM);
|
||||
ok(!enum_info.szName[0], "Got unexpected name %s.\n", wine_dbgstr_w(enum_info.szName));
|
||||
ok(!enum_info.szDescription[0], "Got unexpected name %s.\n", wine_dbgstr_w(enum_info.szDescription));
|
||||
ok(!enum_info.szDriver[0], "Got unexpected driver %s.\n", wine_dbgstr_w(enum_info.szDriver));
|
||||
}
|
||||
|
||||
ret = ICRemove(test_type, test_handler, 0);
|
||||
ok(ret, "Failed to remove driver.\n");
|
||||
|
|
Loading…
Reference in New Issue