From 05a1416c9324dfee9fb0ff8854718fda46d9a0bb Mon Sep 17 00:00:00 2001 From: Stefan Leichter Date: Mon, 4 Oct 2010 18:16:34 +0200 Subject: [PATCH] setupapi: Implement SetupDiGetINFClassA on top of SetupDiGetINFClassW. --- dlls/setupapi/devinst.c | 31 +++++++++++++++++++++++++++++++ dlls/setupapi/stubs.c | 11 ----------- dlls/setupapi/tests/devinst.c | 1 + 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index 110f36ce2f..1d318fe3c8 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -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.@) */ diff --git a/dlls/setupapi/stubs.c b/dlls/setupapi/stubs.c index f191854dd4..2354d84d82 100644 --- a/dlls/setupapi/stubs.c +++ b/dlls/setupapi/stubs.c @@ -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.@) */ diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c index 7005ef0811..4449d72a81 100644 --- a/dlls/setupapi/tests/devinst.c +++ b/dlls/setupapi/tests/devinst.c @@ -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);