Hi,

Sent to wine-devel for some feedback.

I was checking for more lstrcmpW's (not supported on Win9x) and found
one in setupapi/tests/parser.c.

After some checking it turns out that it returns an ANSI string on Win9x
and a Unicode one on NT4 and higher. There is no export of
pSetupGetField[AW] on any of the platforms.

The attached patch takes care of that but I have a feeling this patch
could be written in a better way.

Suggestions, hints, remarks?

--
Cheers,

Paul.

diff --git a/dlls/setupapi/tests/parser.c b/dlls/setupapi/tests/parser.c
index a67a5cd..3b4682e 100644
--- a/dlls/setupapi/tests/parser.c
+++ b/dlls/setupapi/tests/parser.c
@@ -32,14 +32,16 @@
 
 /* function pointers */
 static HMODULE hSetupAPI;
-static LPCWSTR (WINAPI *pSetupGetField)(PINFCONTEXT,DWORD);
+static LPCSTR (WINAPI *pSetupGetFieldA)(PINFCONTEXT,DWORD);
+static LPCWSTR (WINAPI *pSetupGetFieldW)(PINFCONTEXT,DWORD);
 static BOOL (WINAPI *pSetupEnumInfSectionsA)( HINF hinf, UINT index, PSTR 
buffer, DWORD size, UINT *need );
 
 static void init_function_pointers(void)
 {
     hSetupAPI = GetModuleHandleA("setupapi.dll");
 
-    pSetupGetField = (void *)GetProcAddress(hSetupAPI, "pSetupGetField");
+    pSetupGetFieldA = (void *)GetProcAddress(hSetupAPI, "pSetupGetField");
+    pSetupGetFieldW = (void *)GetProcAddress(hSetupAPI, "pSetupGetField");
     pSetupEnumInfSectionsA = (void *)GetProcAddress(hSetupAPI, 
"SetupEnumInfSectionsA" );
 }
 
@@ -497,7 +499,14 @@ static const char *contents = "[Version]\n"
                               "[Strings]\n"
                               "RTMQFE_NAME = \"RTMQFE\"\n";
 
-static const WCHAR getfield_res[][20] =
+static const CHAR getfield_resA[][20] =
+{
+    "RTMQFE",
+    "%RTMGFE_NAME%",
+    "SP1RTM",
+};
+
+static const WCHAR getfield_resW[][20] =
 {
     {'R','T','M','Q','F','E',0},
     {'%','R','T','M','G','F','E','_','N','A','M','E','%',0},
@@ -509,10 +518,18 @@ static void test_pSetupGetField(void)
     UINT err;
     BOOL ret;
     HINF hinf;
-    LPCWSTR field;
+    LPCSTR fieldA;
+    LPCWSTR fieldW;
     INFCONTEXT context;
     int i;
     int len;
+    BOOL unicode = TRUE;
+
+    /* Nice, pSetupGetField is either A or W depending on the Windows version! 
*/
+    SetLastError(0xdeadbeef);
+    lstrcmpW(NULL, NULL);
+    if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+        unicode = FALSE;
 
     hinf = test_file_contents( contents, &err );
     ok( hinf != NULL, "Expected valid INF file\n" );
@@ -524,23 +541,47 @@ static void test_pSetupGetField(void)
 
     for ( i = 0; i < 3; i++ )
     {
-        field = pSetupGetField( &context, i );
-        ok( field != NULL, "Failed to get field %i\n", i );
-        ok( !lstrcmpW( getfield_res[i], field ), "Wrong string returned\n" );
+        if (unicode)
+        {
+            fieldW = pSetupGetFieldW( &context, i );
+            ok( fieldW != NULL, "Failed to get field %i\n", i );
+            ok( !lstrcmpW( getfield_resW[i], fieldW ), "Wrong string 
returned\n" );
+        }
+        else
+        {
+            fieldA = pSetupGetFieldA( &context, i );
+            ok( fieldA != NULL, "Failed to get field %i\n", i );
+            ok( !lstrcmpA( getfield_resA[i], fieldA ), "Wrong string 
returned\n" );
+        }
     }
 
-    field = pSetupGetField( &context, 3 );
-    ok( field != NULL, "Failed to get field 3\n" );
-    len = lstrlenW( field );
-    ok( len == 511 /* NT4, W2K, XP and W2K3 */ ||
-        len == 4096 /* Vista */ ||
-        len == 256 /* Win9x and WinME */,
-        "Unexpected length, got %d\n", len );
-
-    field = pSetupGetField( &context, 4 );
-    ok( field == NULL, "Expected NULL, got %p\n", field );
-    ok( GetLastError() == ERROR_INVALID_PARAMETER,
-        "Expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError() );
+    if (unicode)
+    {
+        fieldW = pSetupGetFieldW( &context, 3 );
+        ok( fieldW != NULL, "Failed to get field 3\n" );
+        len = lstrlenW( fieldW );
+        ok( len == 511 || /* NT4, W2K, XP and W2K3 */
+            len == 4096,  /* Vista */
+            "Unexpected length, got %d\n", len );
+
+        fieldW = pSetupGetFieldW( &context, 4 );
+        ok( fieldW == NULL, "Expected NULL, got %p\n", fieldW );
+        ok( GetLastError() == ERROR_INVALID_PARAMETER,
+            "Expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError() );
+    }
+    else
+    {
+        fieldA = pSetupGetFieldA( &context, 3 );
+        ok( fieldA != NULL, "Failed to get field 3\n" );
+        len = lstrlenA( fieldA );
+        ok( len == 511, /* Win9x, WinME */
+            "Unexpected length, got %d\n", len );
+
+        fieldA = pSetupGetFieldA( &context, 4 );
+        ok( fieldA == NULL, "Expected NULL, got %p\n", fieldA );
+        ok( GetLastError() == ERROR_INVALID_PARAMETER,
+            "Expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError() );
+    }
 
     SetupCloseInfFile( hinf );
 }



Reply via email to