[PATCH 1/6] ole32: Add a helper to copy FORMATETC structures.
Huw Davies
huw at codeweavers.com
Thu May 18 05:07:02 CDT 2017
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/ole32/compobj_private.h | 12 ++++++++++++
dlls/ole32/oleobj.c | 16 ++++++++--------
2 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h
index 6488287c80..8bab8193b4 100644
--- a/dlls/ole32/compobj_private.h
+++ b/dlls/ole32/compobj_private.h
@@ -334,4 +334,16 @@ static inline BOOL heap_free(void *mem)
return HeapFree(GetProcessHeap(), 0, mem);
}
+static inline HRESULT copy_formatetc(FORMATETC *dst, const FORMATETC *src)
+{
+ *dst = *src;
+ if (src->ptd)
+ {
+ dst->ptd = CoTaskMemAlloc( src->ptd->tdSize );
+ if (!dst->ptd) return E_OUTOFMEMORY;
+ memcpy( dst->ptd, src->ptd, src->ptd->tdSize );
+ }
+ return S_OK;
+}
+
#endif /* __WINE_OLE_COMPOBJ_H */
diff --git a/dlls/ole32/oleobj.c b/dlls/ole32/oleobj.c
index edbef554c5..17ab8d0e14 100644
--- a/dlls/ole32/oleobj.c
+++ b/dlls/ole32/oleobj.c
@@ -56,14 +56,14 @@ static void release_statdata(STATDATA *data)
static HRESULT copy_statdata(STATDATA *dst, const STATDATA *src)
{
- *dst = *src;
- if(src->formatetc.ptd)
- {
- dst->formatetc.ptd = CoTaskMemAlloc(src->formatetc.ptd->tdSize);
- if(!dst->formatetc.ptd) return E_OUTOFMEMORY;
- memcpy(dst->formatetc.ptd, src->formatetc.ptd, src->formatetc.ptd->tdSize);
- }
- if(dst->pAdvSink) IAdviseSink_AddRef(dst->pAdvSink);
+ HRESULT hr;
+
+ hr = copy_formatetc( &dst->formatetc, &src->formatetc );
+ if (FAILED(hr)) return hr;
+ dst->advf = src->advf;
+ dst->pAdvSink = src->pAdvSink;
+ if (dst->pAdvSink) IAdviseSink_AddRef( dst->pAdvSink );
+ dst->dwConnection = src->dwConnection;
return S_OK;
}
--
2.12.0
More information about the wine-patches
mailing list