setupapi: Add some tests for StringTableLookUpStringEx. Make them pass.

Hans Leidekker hans at codeweavers.com
Wed Jan 7 06:22:49 CST 2009


diff --git a/dlls/setupapi/stringtable.c b/dlls/setupapi/stringtable.c
index 1907fbb..fe319b8 100644
--- a/dlls/setupapi/stringtable.c
+++ b/dlls/setupapi/stringtable.c
@@ -273,6 +273,7 @@ StringTableAddStringEx(HSTRING_TABLE hStringTable, LPWSTR lpString,
                 return ~0u;
             }
             memcpy(pStringTable->pSlots[i].pData, lpExtraData, dwExtraDataSize);
+            pStringTable->pSlots[i].dwSize = dwExtraDataSize;
             pStringTable->dwUsedSlots++;
             return i + 1;
         }
@@ -492,7 +493,7 @@ StringTableLookUpStringEx(HSTRING_TABLE hStringTable,
                 if (!lstrcmpW(pStringTable->pSlots[i].pString, lpString))
                 {
                     if (lpExtraData)
-                        memcpy(lpExtraData, pStringTable->pSlots[i].pData, pStringTable->pSlots[i].dwSize);
+                        memcpy(lpExtraData, pStringTable->pSlots[i].pData, (DWORD)lpReserved);
                     return i + 1;
                 }
             }
@@ -501,7 +502,7 @@ StringTableLookUpStringEx(HSTRING_TABLE hStringTable,
                 if (!lstrcmpiW(pStringTable->pSlots[i].pString, lpString))
                 {
                     if (lpExtraData)
-                        memcpy(lpExtraData, pStringTable->pSlots[i].pData, pStringTable->pSlots[i].dwSize);
+                        memcpy(lpExtraData, pStringTable->pSlots[i].pData, (DWORD)lpReserved);
                     return i + 1;
                 }
             }
diff --git a/dlls/setupapi/tests/stringtable.c b/dlls/setupapi/tests/stringtable.c
index f93f2d8..a209f23 100644
--- a/dlls/setupapi/tests/stringtable.c
+++ b/dlls/setupapi/tests/stringtable.c
@@ -44,6 +44,7 @@ static DWORD    (WINAPI *pStringTableAddStringEx)(HSTRING_TABLE, LPWSTR, DWORD,
 static VOID     (WINAPI *pStringTableDestroy)(HSTRING_TABLE);
 static HSTRING_TABLE (WINAPI *pStringTableDuplicate)(HSTRING_TABLE hStringTable);
 static HSTRING_TABLE (WINAPI *pStringTableInitialize)(VOID);
+static HSTRING_TABLE (WINAPI *pStringTableInitializeEx)(DWORD, DWORD);
 static DWORD    (WINAPI *pStringTableLookUpString)(HSTRING_TABLE, LPWSTR, DWORD);
 static DWORD    (WINAPI *pStringTableLookUpStringEx)(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, LPDWORD);
 static LPWSTR   (WINAPI *pStringTableStringFromId)(HSTRING_TABLE, DWORD);
@@ -65,6 +66,10 @@ static void load_it_up(void)
     if (!pStringTableInitialize)
         pStringTableInitialize = (void*)GetProcAddress(hdll, "pSetupStringTableInitialize");
 
+    pStringTableInitializeEx = (void*)GetProcAddress(hdll, "StringTableInitializeEx");
+    if (!pStringTableInitializeEx)
+        pStringTableInitializeEx = (void*)GetProcAddress(hdll, "pSetupStringTableInitializeEx");
+
     pStringTableAddString = (void*)GetProcAddress(hdll, "StringTableAddString");
     if (!pStringTableAddString)
         pStringTableAddString = (void*)GetProcAddress(hdll, "pSetupStringTableAddString");
@@ -221,8 +226,10 @@ static void test_StringTableLookUpString(void)
 
 static void test_StringTableLookUpStringEx(void)
 {
-    DWORD retval, retval2, hstring, hString, hfoo;
+    static WCHAR uilevel[] = {'U','I','L','E','V','E','L',0};
+    DWORD retval, retval2, hstring, hString, hfoo, data;
     HANDLE table, table2;
+    char buffer[4];
 
     table = pStringTableInitialize();
     ok(table != NULL,"Failed to Initialize String Table\n");
@@ -273,6 +280,30 @@ static void test_StringTableLookUpStringEx(void)
         retval, hString);
 
     pStringTableDestroy(table);
+
+    table = pStringTableInitializeEx(0x1000, 0);
+    ok(table != NULL, "failed to initialize string table\n");
+
+    data = 0xaaaaaaaa;
+    retval = pStringTableAddStringEx(table, uilevel, 0x5, &data, sizeof(data));
+    ok(retval != ~0u, "failed to add 'UILEVEL' to string table\n");
+
+    memset(buffer, 0x55, sizeof(buffer));
+    retval = pStringTableLookUpStringEx(table, uilevel, ST_CASE_SENSITIVE_COMPARE, buffer, (LPDWORD)0);
+    ok(retval != ~0u, "failed find 'UILEVEL' in string table\n");
+    ok(memcmp(buffer, &data, 4), "unexpected data\n");
+
+    memset(buffer, 0x55, sizeof(buffer));
+    retval = pStringTableLookUpStringEx(table, uilevel, ST_CASE_SENSITIVE_COMPARE, buffer, (LPDWORD)2);
+    ok(retval != ~0u, "failed find 'UILEVEL' in string table\n");
+    ok(!memcmp(buffer, &data, 2), "unexpected data\n");
+
+    memset(buffer, 0x55, sizeof(buffer));
+    retval = pStringTableLookUpStringEx(table, uilevel, ST_CASE_SENSITIVE_COMPARE, buffer, (LPDWORD)sizeof(buffer));
+    ok(retval != ~0u, "failed find 'UILEVEL' in string table\n");
+    ok(!memcmp(buffer, &data, 4), "unexpected data\n");
+
+    pStringTableDestroy(table);
 }
 
 static void test_StringTableStringFromId(void)



More information about the wine-patches mailing list