Francois Gouget : shlwapi: Move SHAddDataBlock()
to the front and remove the forward declaration.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Aug 30 13:50:29 CDT 2007
Module: wine
Branch: master
Commit: b25fdbb23efefe322e08a6a1bcf412e5c92afa63
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b25fdbb23efefe322e08a6a1bcf412e5c92afa63
Author: Francois Gouget <fgouget at free.fr>
Date: Thu Aug 30 16:18:46 2007 +0200
shlwapi: Move SHAddDataBlock() to the front and remove the forward declaration.
---
dlls/shlwapi/clist.c | 192 +++++++++++++++++++++++++-------------------------
1 files changed, 95 insertions(+), 97 deletions(-)
diff --git a/dlls/shlwapi/clist.c b/dlls/shlwapi/clist.c
index 29028bf..a68ada4 100644
--- a/dlls/shlwapi/clist.c
+++ b/dlls/shlwapi/clist.c
@@ -34,8 +34,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
/* dwSignature for contained DATABLOCK_HEADER items */
#define CLIST_ID_CONTAINER (~0U)
-HRESULT WINAPI SHAddDataBlock(LPDBLIST*,const DATABLOCK_HEADER*);
-
/*************************************************************************
* NextItem
*
@@ -49,6 +47,101 @@ static inline LPDATABLOCK_HEADER NextItem(LPDBLIST lpList)
}
/*************************************************************************
+ * @ [SHLWAPI.20]
+ *
+ * Insert a new item into a DataBlock list.
+ *
+ * PARAMS
+ * lppList [0] Pointer to the List
+ * lpNewItem [I] The new item to add to the list
+ *
+ * RETURNS
+ * Success: S_OK. The item is added to the list.
+ * Failure: An HRESULT error code.
+ *
+ * NOTES
+ * If the size of the element to be inserted is less than the size of a
+ * DATABLOCK_HEADER node, or the Id for the item is CLIST_ID_CONTAINER,
+ * the call returns S_OK but does not actually add the element.
+ * See SHWriteDataBlockList.
+ */
+HRESULT WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewItem)
+{
+ LPDATABLOCK_HEADER lpInsertAt = NULL;
+ ULONG ulSize;
+
+ TRACE("(%p,%p)\n", lppList, lpNewItem);
+
+ if(!lppList || !lpNewItem )
+ return E_INVALIDARG;
+
+ if (lpNewItem->cbSize < sizeof(DATABLOCK_HEADER) ||
+ lpNewItem->dwSignature == CLIST_ID_CONTAINER)
+ return S_OK;
+
+ ulSize = lpNewItem->cbSize;
+
+ if(ulSize & 0x3)
+ {
+ /* Tune size to a ULONG boundary, add space for container element */
+ ulSize = ((ulSize + 0x3) & 0xFFFFFFFC) + sizeof(DATABLOCK_HEADER);
+ TRACE("Creating container item, new size = %d\n", ulSize);
+ }
+
+ if(!*lppList)
+ {
+ /* An empty list. Allocate space for terminal ulSize also */
+ *lppList = (LPDATABLOCK_HEADER)LocalAlloc(LMEM_ZEROINIT,
+ ulSize + sizeof(ULONG));
+ lpInsertAt = *lppList;
+ }
+ else
+ {
+ /* Append to the end of the list */
+ ULONG ulTotalSize = 0;
+ LPDATABLOCK_HEADER lpIter = *lppList;
+
+ /* Iterate to the end of the list, calculating the total size */
+ while (lpIter->cbSize)
+ {
+ ulTotalSize += lpIter->cbSize;
+ lpIter = NextItem(lpIter);
+ }
+
+ /* Increase the size of the list */
+ lpIter = (LPDATABLOCK_HEADER)LocalReAlloc((HLOCAL)*lppList,
+ ulTotalSize + ulSize+sizeof(ULONG),
+ LMEM_ZEROINIT | LMEM_MOVEABLE);
+ if(lpIter)
+ {
+ *lppList = lpIter;
+ lpInsertAt = (LPDATABLOCK_HEADER)((char*)lpIter + ulTotalSize); /* At end */
+ }
+ }
+
+ if(lpInsertAt)
+ {
+ /* Copy in the new item */
+ LPDATABLOCK_HEADER lpDest = lpInsertAt;
+
+ if(ulSize != lpNewItem->cbSize)
+ {
+ lpInsertAt->cbSize = ulSize;
+ lpInsertAt->dwSignature = CLIST_ID_CONTAINER;
+ lpDest++;
+ }
+ memcpy(lpDest, lpNewItem, lpNewItem->cbSize);
+
+ /* Terminate the list */
+ lpInsertAt = NextItem(lpInsertAt);
+ lpInsertAt->cbSize = 0;
+
+ return lpNewItem->cbSize;
+ }
+ return S_OK;
+}
+
+/*************************************************************************
* @ [SHLWAPI.17]
*
* Write a DataBlock list to an IStream object.
@@ -247,101 +340,6 @@ VOID WINAPI SHFreeDataBlockList(LPDBLIST lpList)
}
/*************************************************************************
- * @ [SHLWAPI.20]
- *
- * Insert a new item into a DataBlock list.
- *
- * PARAMS
- * lppList [0] Pointer to the List
- * lpNewItem [I] The new item to add to the list
- *
- * RETURNS
- * Success: S_OK. The item is added to the list.
- * Failure: An HRESULT error code.
- *
- * NOTES
- * If the size of the element to be inserted is less than the size of a
- * DATABLOCK_HEADER node, or the Id for the item is CLIST_ID_CONTAINER,
- * the call returns S_OK but does not actually add the element.
- * See SHWriteDataBlockList.
- */
-HRESULT WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewItem)
-{
- LPDATABLOCK_HEADER lpInsertAt = NULL;
- ULONG ulSize;
-
- TRACE("(%p,%p)\n", lppList, lpNewItem);
-
- if(!lppList || !lpNewItem )
- return E_INVALIDARG;
-
- if (lpNewItem->cbSize < sizeof(DATABLOCK_HEADER) ||
- lpNewItem->dwSignature == CLIST_ID_CONTAINER)
- return S_OK;
-
- ulSize = lpNewItem->cbSize;
-
- if(ulSize & 0x3)
- {
- /* Tune size to a ULONG boundary, add space for container element */
- ulSize = ((ulSize + 0x3) & 0xFFFFFFFC) + sizeof(DATABLOCK_HEADER);
- TRACE("Creating container item, new size = %d\n", ulSize);
- }
-
- if(!*lppList)
- {
- /* An empty list. Allocate space for terminal ulSize also */
- *lppList = (LPDATABLOCK_HEADER)LocalAlloc(LMEM_ZEROINIT,
- ulSize + sizeof(ULONG));
- lpInsertAt = *lppList;
- }
- else
- {
- /* Append to the end of the list */
- ULONG ulTotalSize = 0;
- LPDATABLOCK_HEADER lpIter = *lppList;
-
- /* Iterate to the end of the list, calculating the total size */
- while (lpIter->cbSize)
- {
- ulTotalSize += lpIter->cbSize;
- lpIter = NextItem(lpIter);
- }
-
- /* Increase the size of the list */
- lpIter = (LPDATABLOCK_HEADER)LocalReAlloc((HLOCAL)*lppList,
- ulTotalSize + ulSize+sizeof(ULONG),
- LMEM_ZEROINIT | LMEM_MOVEABLE);
- if(lpIter)
- {
- *lppList = lpIter;
- lpInsertAt = (LPDATABLOCK_HEADER)((char*)lpIter + ulTotalSize); /* At end */
- }
- }
-
- if(lpInsertAt)
- {
- /* Copy in the new item */
- LPDATABLOCK_HEADER lpDest = lpInsertAt;
-
- if(ulSize != lpNewItem->cbSize)
- {
- lpInsertAt->cbSize = ulSize;
- lpInsertAt->dwSignature = CLIST_ID_CONTAINER;
- lpDest++;
- }
- memcpy(lpDest, lpNewItem, lpNewItem->cbSize);
-
- /* Terminate the list */
- lpInsertAt = NextItem(lpInsertAt);
- lpInsertAt->cbSize = 0;
-
- return lpNewItem->cbSize;
- }
- return S_OK;
-}
-
-/*************************************************************************
* @ [SHLWAPI.21]
*
* Remove an item from a DataBlock list.
More information about the wine-cvs
mailing list