[SHLWAPI]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 17 Jan 2017 15:09:18 +0000 (15:09 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 17 Jan 2017 15:09:18 +0000 (15:09 +0000)
- 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

reactos/dll/win32/shlwapi/clist.c
rostests/winetests/shlwapi/clist.c

index 763a40e..f90769e 100644 (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;
index 438f605..e7fc4f9 100755 (executable)
@@ -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;