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