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