[SHLWAPI]

- Fix SHAddDataBlock function signature & return value.
- Back this up by updating the corresponding wine test.
Send upstream, I will remove the __REACTOS__ markups once this is merged in Wine.

svn path=/trunk/; revision=73565
This commit is contained in:
Hermès Bélusca-Maïto 2017-01-17 15:09:18 +00:00
parent 855bcceefc
commit a05881c135
2 changed files with 34 additions and 14 deletions

View file

@ -54,7 +54,12 @@ static inline LPDATABLOCK_HEADER NextItem(LPDBLIST lpList)
* the call returns S_OK but does not actually add the element.
* See SHWriteDataBlockList.
*/
HRESULT WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewItem)
#ifndef __REACTOS__
HRESULT
#else
BOOL
#endif
WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewItem)
{
LPDATABLOCK_HEADER lpInsertAt = NULL;
ULONG ulSize;
@ -62,11 +67,19 @@ HRESULT WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewIt
TRACE("(%p,%p)\n", lppList, lpNewItem);
if(!lppList || !lpNewItem )
#ifndef __REACTOS__
return E_INVALIDARG;
#else
return FALSE;
#endif
if (lpNewItem->cbSize < sizeof(DATABLOCK_HEADER) ||
lpNewItem->dwSignature == CLIST_ID_CONTAINER)
#ifndef __REACTOS__
return S_OK;
#else
return FALSE;
#endif
ulSize = lpNewItem->cbSize;
@ -123,9 +136,15 @@ HRESULT WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewIt
lpInsertAt = NextItem(lpInsertAt);
lpInsertAt->cbSize = 0;
return lpNewItem->cbSize;
#ifdef __REACTOS__
return TRUE;
#endif
}
#ifndef __REACTOS__
return S_OK;
#else
return FALSE;
#endif
}
/*************************************************************************
@ -343,7 +362,11 @@ VOID WINAPI SHFreeDataBlockList(LPDBLIST lpList)
*/
BOOL WINAPI SHRemoveDataBlock(LPDBLIST* lppList, DWORD dwSignature)
{
#ifndef __REACTOS__
LPDATABLOCK_HEADER lpList = 0;
#else
LPDATABLOCK_HEADER lpList = NULL;
#endif
LPDATABLOCK_HEADER lpItem = NULL;
LPDATABLOCK_HEADER lpNext;
ULONG ulNewSize;

View file

@ -223,7 +223,7 @@ static IStreamVtbl iclvt =
static HMODULE SHLWAPI_hshlwapi = 0;
static VOID (WINAPI *pSHLWAPI_19)(LPSHLWAPI_CLIST);
static HRESULT (WINAPI *pSHLWAPI_20)(LPSHLWAPI_CLIST*,LPCSHLWAPI_CLIST);
static BOOL (WINAPI *pSHLWAPI_20)(LPSHLWAPI_CLIST*,LPCSHLWAPI_CLIST);
static BOOL (WINAPI *pSHLWAPI_21)(LPSHLWAPI_CLIST*,ULONG);
static LPSHLWAPI_CLIST (WINAPI *pSHLWAPI_22)(LPSHLWAPI_CLIST,ULONG);
static HRESULT (WINAPI *pSHLWAPI_17)(IStream*, SHLWAPI_CLIST*);
@ -297,6 +297,7 @@ static void test_CList(void)
struct dummystream streamobj;
LPSHLWAPI_CLIST list = NULL;
LPCSHLWAPI_CLIST item = SHLWAPI_CLIST_items;
BOOL bRet;
HRESULT hRet;
LPSHLWAPI_CLIST inserted;
BYTE buff[64];
@ -317,10 +318,10 @@ static void test_CList(void)
buff[sizeof(SHLWAPI_CLIST)+i] = i*2;
/* Add it */
hRet = pSHLWAPI_20(&list, inserted);
ok(hRet > S_OK, "failed list add\n");
bRet = pSHLWAPI_20(&list, inserted);
ok(bRet == TRUE, "failed list add\n");
if (hRet > S_OK)
if (bRet == TRUE)
{
ok(list && list->ulSize, "item not added\n");
@ -395,11 +396,8 @@ static void test_CList(void)
inserted = (LPSHLWAPI_CLIST)buff;
inserted->ulSize = sizeof(SHLWAPI_CLIST) -1;
inserted->ulId = 33;
/* The call succeeds but the item is not inserted, except on some early
* versions which return failure. Wine behaves like later versions.
*/
pSHLWAPI_20(&list, inserted);
bRet = pSHLWAPI_20(&list, inserted);
ok(bRet == FALSE, "Expected failure\n");
inserted = pSHLWAPI_22(list, 33);
ok(inserted == NULL, "inserted bad element size\n");
@ -407,9 +405,8 @@ static void test_CList(void)
inserted = (LPSHLWAPI_CLIST)buff;
inserted->ulSize = 44;
inserted->ulId = ~0U;
/* See comment above, some early versions fail this call */
pSHLWAPI_20(&list, inserted);
bRet = pSHLWAPI_20(&list, inserted);
ok(bRet == FALSE, "Expected failure\n");
item = SHLWAPI_CLIST_items;