Module: wine Branch: master Commit: c2f99f30143e1180620980f3d5713456392c8ecf URL: http://source.winehq.org/git/wine.git/?a=commit;h=c2f99f30143e1180620980f3d5...
Author: Hans Leidekker hans@codeweavers.com Date: Mon Dec 8 12:35:06 2008 +0100
setupapi: Implement StringTableAddStringEx.
---
dlls/setupapi/stringtable.c | 83 +++++++++++++++++++----------------------- 1 files changed, 38 insertions(+), 45 deletions(-)
diff --git a/dlls/setupapi/stringtable.c b/dlls/setupapi/stringtable.c index 59ad6ce..e6578e7 100644 --- a/dlls/setupapi/stringtable.c +++ b/dlls/setupapi/stringtable.c @@ -190,19 +190,21 @@ StringTableDestroy(HSTRING_TABLE hStringTable)
/************************************************************************** - * StringTableAddString [SETUPAPI.@] + * StringTableAddStringEx [SETUPAPI.@] * - * Adds a new string to the string table. + * Adds a new string plus extra data to the string table. * * PARAMS - * hStringTable [I] Handle to the string table - * lpString [I] String to be added to the string table - * dwFlags [I] Flags - * 1: case sensitive compare + * hStringTable [I] Handle to the string table + * lpString [I] String to be added to the string table + * dwFlags [I] Flags + * 1: case sensitive compare + * lpExtraData [I] Pointer to the extra data + * dwExtraDataSize [I] Size of the extra data * * RETURNS * Success: String ID - * Failure: -1 + * Failure: ~0u * * NOTES * If the given string already exists in the string table it will not @@ -210,40 +212,36 @@ StringTableDestroy(HSTRING_TABLE hStringTable) * this case. */ DWORD WINAPI -StringTableAddString(HSTRING_TABLE hStringTable, - LPWSTR lpString, - DWORD dwFlags) +StringTableAddStringEx(HSTRING_TABLE hStringTable, LPWSTR lpString, + DWORD dwFlags, LPVOID lpExtraData, DWORD dwExtraDataSize) { PSTRING_TABLE pStringTable; DWORD i;
- TRACE("%p %s %x\n", hStringTable, debugstr_w(lpString), dwFlags); + TRACE("%p %s %x %p, %u\n", hStringTable, debugstr_w(lpString), dwFlags, + lpExtraData, dwExtraDataSize);
pStringTable = (PSTRING_TABLE)hStringTable; - if (pStringTable == NULL) + if (!pStringTable) { ERR("Invalid hStringTable!\n"); - return (DWORD)-1; + return ~0u; }
/* Search for existing string in the string table */ for (i = 0; i < pStringTable->dwMaxSlots; i++) { - if (pStringTable->pSlots[i].pString != NULL) + if (pStringTable->pSlots[i].pString) { if (dwFlags & 1) { if (!lstrcmpW(pStringTable->pSlots[i].pString, lpString)) - { return i + 1; - } } else { if (!lstrcmpiW(pStringTable->pSlots[i].pString, lpString)) - { return i + 1; - } } } } @@ -252,51 +250,51 @@ StringTableAddString(HSTRING_TABLE hStringTable, if (pStringTable->dwUsedSlots == pStringTable->dwMaxSlots) { FIXME("Resize the string table!\n"); - return (DWORD)-1; + return ~0u; }
/* Search for an empty slot */ for (i = 0; i < pStringTable->dwMaxSlots; i++) { - if (pStringTable->pSlots[i].pString == NULL) + if (!pStringTable->pSlots[i].pString) { pStringTable->pSlots[i].pString = MyMalloc((lstrlenW(lpString) + 1) * sizeof(WCHAR)); - if (pStringTable->pSlots[i].pString == NULL) + if (!pStringTable->pSlots[i].pString) { - TRACE("Couldn't allocate memory for a new string!\n"); - return (DWORD)-1; + WARN("Couldn't allocate memory for a new string!\n"); + return ~0u; } - lstrcpyW(pStringTable->pSlots[i].pString, lpString);
+ pStringTable->pSlots[i].pData = MyMalloc(dwExtraDataSize); + if (!pStringTable->pSlots[i].pData) + { + TRACE("Couldn't allocate memory for data!\n"); + return ~0u; + } + memcpy(pStringTable->pSlots[i].pData, lpExtraData, dwExtraDataSize); pStringTable->dwUsedSlots++; - return i + 1; } } - TRACE("Couldn't find an empty slot!\n"); - - return (DWORD)-1; + return ~0u; }
- /************************************************************************** - * StringTableAddStringEx [SETUPAPI.@] + * StringTableAddString [SETUPAPI.@] * - * Adds a new string plus extra data to the string table. + * Adds a new string to the string table. * * PARAMS - * hStringTable [I] Handle to the string table - * lpString [I] String to be added to the string table - * dwFlags [I] Flags - * 1: case sensitive compare - * lpExtraData [I] Pointer to the extra data - * dwExtraDataSize [I] Size of the extra data + * hStringTable [I] Handle to the string table + * lpString [I] String to be added to the string table + * dwFlags [I] Flags + * 1: case sensitive compare * * RETURNS * Success: String ID - * Failure: -1 + * Failure: ~0u * * NOTES * If the given string already exists in the string table it will not @@ -304,14 +302,9 @@ StringTableAddString(HSTRING_TABLE hStringTable, * this case. */ DWORD WINAPI -StringTableAddStringEx(HSTRING_TABLE hStringTable, - LPWSTR lpString, - DWORD dwFlags, - LPVOID lpExtraData, - DWORD dwExtraDataSize) +StringTableAddString(HSTRING_TABLE hStringTable, LPWSTR lpString, DWORD dwFlags) { - FIXME("\n"); - return (DWORD)-1; + return StringTableAddStringEx(hStringTable, lpString, dwFlags, NULL, 0); }