Module: wine Branch: master Commit: 601870a4351753555bfa351a23328b2e1109c7b0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=601870a4351753555bfa351a23...
Author: Hans Leidekker hans@codeweavers.com Date: Wed Jan 7 13:22:49 2009 +0100
setupapi: Add some tests for StringTableLookUpStringEx. Make them pass.
---
dlls/setupapi/stringtable.c | 5 +++-- dlls/setupapi/tests/stringtable.c | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-)
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)