Huw Davies : ole32: Allow the EnumSTATDATA constructor to take a sparse array.

Alexandre Julliard julliard at winehq.org
Mon Dec 20 17:49:51 CST 2010


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Fri Dec 17 14:07:19 2010 +0000

ole32: Allow the EnumSTATDATA constructor to take a sparse array.

---

 dlls/ole32/oleobj.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/dlls/ole32/oleobj.c b/dlls/ole32/oleobj.c
index 2441121..2b0179c 100644
--- a/dlls/ole32/oleobj.c
+++ b/dlls/ole32/oleobj.c
@@ -80,7 +80,7 @@ typedef struct OleAdviseHolderImpl
 
 } OleAdviseHolderImpl;
 
-static HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD num, STATDATA *data, IEnumSTATDATA **ppenum);
+static HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data, IEnumSTATDATA **ppenum);
 
 typedef struct
 {
@@ -207,11 +207,11 @@ static const IEnumSTATDATAVtbl EnumSTATDATA_VTable =
     EnumSTATDATA_Clone
 };
 
-static HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD num, STATDATA *data,
+static HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data,
                                       IEnumSTATDATA **ppenum)
 {
     EnumSTATDATA *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
-    DWORD i;
+    DWORD i, count;
 
     if (!This) return E_OUTOFMEMORY;
 
@@ -219,17 +219,23 @@ static HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD num,
     This->ref = 1;
     This->index = index;
 
-    This->statdata = HeapAlloc(GetProcessHeap(), 0, num * sizeof(*This->statdata));
+    This->statdata = HeapAlloc(GetProcessHeap(), 0, array_len * sizeof(*This->statdata));
     if(!This->statdata)
     {
         HeapFree(GetProcessHeap(), 0, This);
         return E_OUTOFMEMORY;
     }
 
-    for(i = 0; i < num; i++)
-        copy_statdata(This->statdata + i, data + i);
+    for(i = 0, count = 0; i < array_len; i++)
+    {
+        if(data[i].pAdvSink)
+        {
+            copy_statdata(This->statdata + count, data + i);
+            count++;
+        }
+    }
 
-    This->num_of_elems = num;
+    This->num_of_elems = count;
     This->holder = holder;
     IUnknown_AddRef(holder);
     *ppenum = &This->IEnumSTATDATA_iface;




More information about the wine-cvs mailing list