James Hawkins : setupapi: Handle the INFINFO_INF_NAME_IS_ABSOLUTE and

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 14 07:28:22 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 202942de611b068c5d6ac884de4164e48e79f37a
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=202942de611b068c5d6ac884de4164e48e79f37a

Author: James Hawkins <truiken at gmail.com>
Date:   Tue Feb 14 12:23:29 2006 +0100

setupapi: Handle the INFINFO_INF_NAME_IS_ABSOLUTE and
INFINFO_DEFAULT_SEARCH search flags.

---

 dlls/setupapi/query.c       |   48 ++++++++++++++++++++++++++++++-------------
 dlls/setupapi/tests/query.c |   42 +++++++++++---------------------------
 2 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/dlls/setupapi/query.c b/dlls/setupapi/query.c
index 79d068c..1f4478e 100644
--- a/dlls/setupapi/query.c
+++ b/dlls/setupapi/query.c
@@ -98,12 +98,13 @@ BOOL WINAPI SetupGetInfInformationW(LPCV
                                      PSP_INF_INFORMATION ReturnBuffer,
                                      DWORD ReturnBufferSize, PDWORD RequiredSize)
 {
-    HINF inf = (HINF)InfSpec;
+    HINF inf;
+    BOOL ret;
 
     TRACE("(%p, %ld, %p, %ld, %p)\n", InfSpec, SearchControl, ReturnBuffer,
            ReturnBufferSize, RequiredSize);
 
-    if (!inf)
+    if (!InfSpec)
     {
         if (SearchControl == INFINFO_INF_SPEC_IS_HINF)
             SetLastError(ERROR_INVALID_HANDLE);
@@ -113,30 +114,47 @@ BOOL WINAPI SetupGetInfInformationW(LPCV
         return FALSE;
     }
 
-    if (inf == INVALID_HANDLE_VALUE)
-    {
-        SetLastError(ERROR_FILE_NOT_FOUND);
-        return FALSE;
-    }
-
-    if (SearchControl < INFINFO_INF_SPEC_IS_HINF ||
-        SearchControl > INFINFO_INF_PATH_LIST_SEARCH)
+    if (!ReturnBuffer && ReturnBufferSize)
     {
         SetLastError(ERROR_INVALID_PARAMETER);
         return FALSE;
     }
 
-    if (SearchControl != INFINFO_INF_SPEC_IS_HINF)
+    switch (SearchControl)
     {
-        FIXME("Unhandled search control: %ld\n", SearchControl);
+        case INFINFO_INF_SPEC_IS_HINF:
+            inf = (HINF)InfSpec;
+            break;
+        case INFINFO_INF_NAME_IS_ABSOLUTE:
+        case INFINFO_DEFAULT_SEARCH:
+            inf = SetupOpenInfFileW(InfSpec, NULL,
+                                    INF_STYLE_OLDNT | INF_STYLE_WIN4, NULL);
+            break;
+        case INFINFO_REVERSE_DEFAULT_SEARCH:
+        case INFINFO_INF_PATH_LIST_SEARCH:
+            FIXME("Unhandled search control: %ld\n", SearchControl);
 
-        if (RequiredSize)
-            *RequiredSize = 0;
+            if (RequiredSize)
+                *RequiredSize = 0;
+
+            return FALSE;
+        default:
+            SetLastError(ERROR_INVALID_PARAMETER);
+            return FALSE;
+    }
 
+    if (inf == INVALID_HANDLE_VALUE)
+    {
+        SetLastError(ERROR_FILE_NOT_FOUND);
         return FALSE;
     }
 
-    return fill_inf_info(inf, ReturnBuffer, ReturnBufferSize, RequiredSize);
+    ret = fill_inf_info(inf, ReturnBuffer, ReturnBufferSize, RequiredSize);
+
+    if (SearchControl >= INFINFO_INF_NAME_IS_ABSOLUTE)
+        SetupCloseInfFile(inf);
+
+    return ret;
 }
 
 /***********************************************************************
diff --git a/dlls/setupapi/tests/query.c b/dlls/setupapi/tests/query.c
index e46177e..c5581f8 100644
--- a/dlls/setupapi/tests/query.c
+++ b/dlls/setupapi/tests/query.c
@@ -167,31 +167,22 @@ static void test_SetupGetInfInformation(
     SetLastError(0xbeefcafe);
     ret = pSetupGetInfInformationA("idontexist", INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size);
     ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
-    todo_wine
-    {
-        ok(GetLastError() == ERROR_FILE_NOT_FOUND,
-           "Expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError());
-        ok(size == 0xdeadbeef, "Expected size to remain unchanged\n");
-    }
+    ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+       "Expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError());
+    ok(size == 0xdeadbeef, "Expected size to remain unchanged\n");
 
     /* successfully open the inf file */
     size = 0xdeadbeef;
     ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size);
-    todo_wine
-    {
-        ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
-    }
+    ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
     ok(size != 0xdeadbeef, "Expected a valid size on return\n");
 
     /* set ReturnBuffer to NULL and ReturnBufferSize to non-zero */
     SetLastError(0xbeefcafe);
     ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, size, &size);
     ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
-    todo_wine
-    {
-        ok(GetLastError() == ERROR_INVALID_PARAMETER,
-           "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError());
-    }
+    ok(GetLastError() == ERROR_INVALID_PARAMETER,
+       "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError());
 
     info = HeapAlloc(GetProcessHeap(), 0, size);
 
@@ -199,19 +190,13 @@ static void test_SetupGetInfInformation(
     SetLastError(0xbeefcafe);
     ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, info, size - 1, &size);
     ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
-    todo_wine
-    {
-        ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
-           "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n", GetLastError());
-    }
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n", GetLastError());
 
     /* successfully get the inf information */
     ret = pSetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, info, size, &size);
-    todo_wine
-    {
-        ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
-        ok(check_info_filename(info, inf_filename), "Expected returned filename to be equal\n");
-    }
+    ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
+    ok(check_info_filename(info, inf_filename), "Expected returned filename to be equal\n");
 
     HeapFree(GetProcessHeap(), 0, info);
 
@@ -238,11 +223,8 @@ static void test_SetupGetInfInformation(
 
     /* test the INFINFO_DEFAULT_SEARCH search flag */
     ret = pSetupGetInfInformationA("test.inf", INFINFO_DEFAULT_SEARCH, info, size, &size);
-    todo_wine
-    {
-        ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
-        ok(check_info_filename(info, inf_one), "Expected returned filename to be equal\n");
-    }
+    ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
+    ok(check_info_filename(info, inf_one), "Expected returned filename to be equal\n");
 
     HeapFree(GetProcessHeap(), 0, info);
     info = alloc_inf_info("test.inf", INFINFO_REVERSE_DEFAULT_SEARCH, &size);




More information about the wine-cvs mailing list