Huw Davies : ole32: Change the enum formatetc constructor to return HRESULT .
Alexandre Julliard
julliard at winehq.org
Mon Mar 30 12:08:47 CDT 2009
Module: wine
Branch: master
Commit: 25f1b058a8f8440bd7f9387590ffa49fcbb92c42
URL: http://source.winehq.org/git/wine.git/?a=commit;h=25f1b058a8f8440bd7f9387590ffa49fcbb92c42
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Mar 26 16:38:57 2009 +0000
ole32: Change the enum formatetc constructor to return HRESULT.
---
dlls/ole32/clipboard.c | 31 ++++++++++++++-----------------
1 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c
index f973d2e..7d1bb26 100644
--- a/dlls/ole32/clipboard.c
+++ b/dlls/ole32/clipboard.c
@@ -303,7 +303,7 @@ static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Reset(LPENUMFORMATETC iface)
return S_OK;
}
-static LPENUMFORMATETC OLEClipbrd_IEnumFORMATETC_Construct(UINT cfmt, const FORMATETC afmt[]);
+static HRESULT enum_fmtetc_construct(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **obj);
/************************************************************************
* OLEClipbrd_IEnumFORMATETC_Clone (IEnumFORMATETC)
@@ -321,8 +321,8 @@ static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Clone
if ( !ppenum )
return E_INVALIDARG;
- *ppenum = OLEClipbrd_IEnumFORMATETC_Construct(This->countFmt,
- This->pFmt);
+ hr = enum_fmtetc_construct(This->countFmt, This->pFmt, ppenum);
+ if (FAILED(hr)) return hr;
/* FIXME: This is wrong! */
if (FAILED( hr = IEnumFORMATETC_AddRef(*ppenum)))
@@ -343,21 +343,20 @@ static const IEnumFORMATETCVtbl efvt =
};
/************************************************************************
- * OLEClipbrd_IEnumFORMATETC_Construct
+ * enum_fmtetc_construct
*
* Creates an IEnumFORMATETC enumerator from an array of FORMATETC
* Structures.
* NOTE: this does not AddRef the interface.
*/
-
-static LPENUMFORMATETC OLEClipbrd_IEnumFORMATETC_Construct(UINT cfmt, const FORMATETC afmt[])
+static HRESULT enum_fmtetc_construct(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **obj)
{
enum_fmtetc* ef;
DWORD size=cfmt * sizeof(FORMATETC);
+ *obj = NULL;
ef = HeapAlloc(GetProcessHeap(), 0, sizeof(*ef));
- if (!ef)
- return NULL;
+ if (!ef) return E_OUTOFMEMORY;
ef->ref = 0;
ef->lpVtbl = &efvt;
@@ -370,11 +369,12 @@ static LPENUMFORMATETC OLEClipbrd_IEnumFORMATETC_Construct(UINT cfmt, const FORM
else
{
HeapFree(GetProcessHeap(), 0, ef);
- return NULL;
+ return E_OUTOFMEMORY;
}
TRACE("(%p)->()\n",ef);
- return (LPENUMFORMATETC)ef;
+ *obj = (IEnumFORMATETC *)ef;
+ return S_OK;
}
/***********************************************************************
@@ -1042,14 +1042,11 @@ static HRESULT WINAPI OLEClipbrd_IDataObject_EnumFormatEtc(
afmt[i].tymed = TYMED_HGLOBAL;
}
- /*
- * Create an EnumFORMATETC enumerator and return an
- * EnumFORMATETC after bumping up its ref count
- */
- *ppenumFormatEtc = OLEClipbrd_IEnumFORMATETC_Construct( cfmt, afmt );
- if (!(*ppenumFormatEtc))
- HANDLE_ERROR( E_OUTOFMEMORY );
+ hr = enum_fmtetc_construct( cfmt, afmt, ppenumFormatEtc );
+ if (FAILED(hr))
+ HANDLE_ERROR( hr );
+ /* FIXME: This is wrong! */
if (FAILED( hr = IEnumFORMATETC_AddRef(*ppenumFormatEtc)))
HANDLE_ERROR( hr );
More information about the wine-cvs
mailing list