setupapi: Implement SetupDiGetINFClassA on top of SetupDiGetINFClassW.

This commit is contained in:
Stefan Leichter 2010-10-04 18:16:34 +02:00 committed by Alexandre Julliard
parent 803b81c1b7
commit 05a1416c93
3 changed files with 32 additions and 11 deletions

View file

@ -3987,6 +3987,37 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size( PULONG pulLen, DEVINST dnDevInst,
return CR_SUCCESS;
}
/***********************************************************************
* SetupDiGetINFClassA (SETUPAPI.@)
*/
BOOL WINAPI SetupDiGetINFClassA(PCSTR inf, LPGUID class_guid, PSTR class_name,
DWORD size, PDWORD required_size)
{
BOOL retval;
DWORD required_sizeA, required_sizeW;
PWSTR class_nameW = NULL;
UNICODE_STRING infW;
if (inf) RtlCreateUnicodeStringFromAsciiz(&infW, inf);
else infW.Buffer = NULL;
if (class_name && size)
class_nameW = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR));
retval = SetupDiGetINFClassW(infW.Buffer, class_guid, class_nameW, size, &required_sizeW);
if (retval)
{
required_sizeA = WideCharToMultiByte( CP_ACP, 0, class_nameW, required_sizeW,
class_name, size, NULL, NULL);
if(required_size) *required_size = required_sizeA;
}
else
if(required_size) *required_size = required_sizeW;
return retval;
}
/***********************************************************************
* SetupDiGetINFClassW (SETUPAPI.@)
*/

View file

@ -229,17 +229,6 @@ BOOL WINAPI SetupSetSourceListW(DWORD flags, PCWSTR *list, UINT count)
return FALSE;
}
/***********************************************************************
* SetupDiGetINFClassA (SETUPAPI.@)
*/
BOOL WINAPI SetupDiGetINFClassA(PCSTR inf, LPGUID class_guid, PSTR class_name,
DWORD size, PDWORD required_size)
{
FIXME("%s %p %p %d %p\n", debugstr_a(inf), class_guid, class_name, size, required_size);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/***********************************************************************
* SetupDiDestroyClassImageList (SETUPAPI.@)
*/

View file

@ -1509,6 +1509,7 @@ static void testSetupDiGetINFClassA(void)
count = 0xdeadbeef;
retval = SetupDiGetINFClassA(filename, &guid, cn, MAX_PATH, &count);
ok(retval, "expected SetupDiGetINFClassA to succeed! error %u\n", GetLastError());
todo_wine
ok(count == 4, "expected count==4, got %u(%s)\n", count, cn);
DeleteFileA(filename);