Stefan Leichter : setupapi: Implement SetupDiGetINFClassA on top of SetupDiGetINFClassW.
Alexandre Julliard
julliard at winehq.org
Tue Oct 5 12:03:09 CDT 2010
Module: wine
Branch: master
Commit: 05a1416c9324dfee9fb0ff8854718fda46d9a0bb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=05a1416c9324dfee9fb0ff8854718fda46d9a0bb
Author: Stefan Leichter <Stefan.Leichter at camline.com>
Date: Mon Oct 4 18:16:34 2010 +0200
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 110f36c..1d318fe 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -3988,6 +3988,37 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size( PULONG pulLen, DEVINST dnDevInst,
}
/***********************************************************************
+ * 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.@)
*/
BOOL WINAPI SetupDiGetINFClassW(PCWSTR inf, LPGUID class_guid, PWSTR class_name,
diff --git a/dlls/setupapi/stubs.c b/dlls/setupapi/stubs.c
index f191854..2354d84 100644
--- a/dlls/setupapi/stubs.c
+++ b/dlls/setupapi/stubs.c
@@ -230,17 +230,6 @@ BOOL WINAPI SetupSetSourceListW(DWORD flags, PCWSTR *list, UINT count)
}
/***********************************************************************
- * 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.@)
*/
BOOL WINAPI SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA ClassListImageData)
diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c
index 7005ef0..4449d72 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);
More information about the wine-cvs
mailing list