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