Nikolay Sivov : comctl32/dsa: Implement DSA_Clone().

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 31 10:38:50 CDT 2015


Module: wine
Branch: master
Commit: ff0634dfe18b87f75d2d00e8c114d25c27f0f0a4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ff0634dfe18b87f75d2d00e8c114d25c27f0f0a4

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Mar 31 08:44:23 2015 +0300

comctl32/dsa: Implement DSA_Clone().

---

 dlls/comctl32/comctl32.spec |  1 +
 dlls/comctl32/dsa.c         | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/dlls/comctl32/comctl32.spec b/dlls/comctl32/comctl32.spec
index 0bd8b13..aff8c8b 100644
--- a/dlls/comctl32/comctl32.spec
+++ b/dlls/comctl32/comctl32.spec
@@ -131,6 +131,7 @@
 @ stdcall DrawShadowText(long wstr long ptr long long long long long)
 @ stdcall DrawStatusText(long ptr ptr long) DrawStatusTextA
 @ stdcall DrawStatusTextW(long ptr wstr long)
+@ stdcall DSA_Clone(ptr)
 @ stdcall FlatSB_EnableScrollBar (long long long)
 @ stdcall FlatSB_GetScrollInfo (long long ptr)
 @ stdcall FlatSB_GetScrollPos (long long)
diff --git a/dlls/comctl32/dsa.c b/dlls/comctl32/dsa.c
index 71837db..73f0d30 100644
--- a/dlls/comctl32/dsa.c
+++ b/dlls/comctl32/dsa.c
@@ -434,3 +434,39 @@ void WINAPI DSA_DestroyCallback (HDSA hdsa, PFNDSAENUMCALLBACK enumProc,
     DSA_EnumCallback (hdsa, enumProc, lParam);
     DSA_Destroy (hdsa);
 }
+
+/**************************************************************************
+ * DSA_Clone [COMCTL32.@]
+ *
+ * Creates a copy of a dsa
+ *
+ * PARAMS
+ *     hdsa [I] handle to the dynamic storage array
+ *
+ * RETURNS
+ *     Cloned dsa
+ */
+HDSA WINAPI DSA_Clone(HDSA hdsa)
+{
+    HDSA dest;
+    INT i;
+
+    TRACE("(%p)\n", hdsa);
+
+    if (!hdsa)
+        return NULL;
+
+    dest = DSA_Create (hdsa->nItemSize, hdsa->nGrow);
+    if (!dest)
+        return NULL;
+
+    for (i = 0; i < hdsa->nItemCount; i++) {
+        void *ptr = DSA_GetItemPtr (hdsa, i);
+        if (DSA_InsertItem (dest, DA_LAST, ptr) == -1) {
+            DSA_Destroy (dest);
+            return NULL;
+        }
+    }
+
+    return dest;
+}




More information about the wine-cvs mailing list