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

View file

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