Christian Costa : d3dxof: Simplify error handling in IDirectXFileEnumObjectImpl_GetNextDataObject.

Alexandre Julliard julliard at winehq.org
Tue Dec 23 13:41:37 CST 2008


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

Author: Christian Costa <titan.costa at wanadoo.fr>
Date:   Tue Dec 23 11:55:36 2008 +0100

d3dxof: Simplify error handling in IDirectXFileEnumObjectImpl_GetNextDataObject.

---

 dlls/d3dxof/d3dxof.c |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c
index d7892d4..6ca6e98 100644
--- a/dlls/d3dxof/d3dxof.c
+++ b/dlls/d3dxof/d3dxof.c
@@ -2219,8 +2219,8 @@ static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileE
   IDirectXFileEnumObjectImpl *This = (IDirectXFileEnumObjectImpl *)iface;
   IDirectXFileDataImpl* object;
   HRESULT hr;
-  LPBYTE pdata;
-  LPBYTE pstrings;
+  LPBYTE pdata = NULL;
+  LPBYTE pstrings = NULL;
 
   TRACE("(%p/%p)->(%p)\n", This, iface, ppDataObj);
 
@@ -2248,7 +2248,8 @@ static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileE
   if (!pdata)
   {
     ERR("Out of memory\n");
-    return DXFILEERR_BADALLOC;
+    hr = DXFILEERR_BADALLOC;
+    goto error;
   }
   This->buf.cur_pdata = This->buf.pdata = pdata;
 
@@ -2256,24 +2257,24 @@ static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileE
   if (!pstrings)
   {
     ERR("Out of memory\n");
-    HeapFree(GetProcessHeap(), 0, This->buf.pxo->pdata);
-    return DXFILEERR_BADALLOC;
+    hr = DXFILEERR_BADALLOC;
+    goto error;
   }
   This->buf.cur_pstrings = This->buf.pstrings = pstrings;
 
   if (!parse_object(&This->buf))
   {
     TRACE("Object is not correct\n");
-    HeapFree(GetProcessHeap(), 0, This->buf.pxo->pdata);
-    HeapFree(GetProcessHeap(), 0, This->buf.pstrings);
-    return DXFILEERR_PARSEERROR;
+    hr = DXFILEERR_PARSEERROR;
+    goto error;
   }
 
   This->buf.pxo->nb_subobjects = This->buf.cur_subobject;
   if (This->buf.cur_subobject > MAX_SUBOBJECTS)
   {
     FIXME("Too many suobjects %d\n", This->buf.cur_subobject);
-    return DXFILEERR_BADALLOC;
+    hr = DXFILEERR_BADALLOC;
+    goto error;
   }
 
   object->pstrings = pstrings;
@@ -2287,6 +2288,13 @@ static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileE
   This->nb_xobjects++;
 
   return DXFILE_OK;
+
+error:
+
+  HeapFree(GetProcessHeap(), 0, pdata);
+  HeapFree(GetProcessHeap(), 0, pstrings);
+
+  return hr;
 }
 
 static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectById(IDirectXFileEnumObject* iface, REFGUID rguid, LPDIRECTXFILEDATA* ppDataObj)




More information about the wine-cvs mailing list