Christian Costa : d3drm: Move mesh builder data cleaning code into a separate function.

Alexandre Julliard julliard at winehq.org
Wed Oct 31 17:17:21 CDT 2012


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

Author: Christian Costa <titan.costa at gmail.com>
Date:   Wed Oct 31 09:56:15 2012 +0100

d3drm: Move mesh builder data cleaning code into a separate function.

---

 dlls/d3drm/meshbuilder.c |   59 +++++++++++++++++----------------------------
 1 files changed, 22 insertions(+), 37 deletions(-)

diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index c28cefd..9d3e67a 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -314,6 +314,25 @@ static inline IDirect3DRMMeshBuilderImpl *impl_from_IDirect3DRMMeshBuilder3(IDir
     return CONTAINING_RECORD(iface, IDirect3DRMMeshBuilderImpl, IDirect3DRMMeshBuilder3_iface);
 }
 
+static void clean_mesh_builder_data(IDirect3DRMMeshBuilderImpl *mesh_builder)
+{
+    HeapFree(GetProcessHeap(), 0, mesh_builder->name);
+    mesh_builder->name = NULL;
+    HeapFree(GetProcessHeap(), 0, mesh_builder->pVertices);
+    mesh_builder->pVertices = NULL;
+    mesh_builder->nb_vertices = 0;
+    HeapFree(GetProcessHeap(), 0, mesh_builder->pNormals);
+    mesh_builder->pNormals = NULL;
+    mesh_builder->nb_normals = 0;
+    HeapFree(GetProcessHeap(), 0, mesh_builder->pFaceData);
+    mesh_builder->pFaceData = NULL;
+    mesh_builder->face_data_size = 0;
+    mesh_builder->nb_faces = 0;
+    HeapFree(GetProcessHeap(), 0, mesh_builder->pCoords2d);
+    mesh_builder->pCoords2d = NULL;
+    mesh_builder->nb_coords2d = 0;
+}
+
 /*** IUnknown methods ***/
 static HRESULT WINAPI IDirect3DRMMeshBuilder2Impl_QueryInterface(IDirect3DRMMeshBuilder2* iface,
                                                                  REFIID riid, void** ppvObject)
@@ -363,15 +382,11 @@ static ULONG WINAPI IDirect3DRMMeshBuilder2Impl_Release(IDirect3DRMMeshBuilder2*
 
     if (!ref)
     {
+        clean_mesh_builder_data(This);
         if (This->material)
             IDirect3DRMMaterial2_Release(This->material);
         if (This->texture)
             IDirect3DRMTexture3_Release(This->texture);
-        HeapFree(GetProcessHeap(), 0, This->name);
-        HeapFree(GetProcessHeap(), 0, This->pVertices);
-        HeapFree(GetProcessHeap(), 0, This->pNormals);
-        HeapFree(GetProcessHeap(), 0, This->pFaceData);
-        HeapFree(GetProcessHeap(), 0, This->pCoords2d);
         HeapFree(GetProcessHeap(), 0, This);
     }
 
@@ -1114,9 +1129,6 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3* iface, LPDIRECTXFILEDATA pData)
 
     TRACE("(%p)->(%p)\n", This, pData);
 
-    /* Remove previous name */
-    HeapFree(GetProcessHeap(), 0, This->name);
-    This->name = NULL;
     hr = IDirectXFileData_GetName(pData, NULL, &size);
     if (hr != DXFILE_OK)
         return hr;
@@ -1128,11 +1140,7 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3* iface, LPDIRECTXFILEDATA pData)
 
         hr = IDirectXFileData_GetName(pData, This->name, &size);
         if (hr != DXFILE_OK)
-        {
-            HeapFree(GetProcessHeap(), 0, This->name);
-            This->name = NULL;
             return hr;
-        }
     }
 
     TRACE("Mesh name is '%s'\n", This->name ? This->name : "");
@@ -1518,15 +1526,7 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_Load(IDirect3DRMMeshBuilder3*
 
     TRACE("(%p)->(%p,%p,%x,%p,%p)\n", This, filename, name, loadflags, cb, arg);
 
-    /* First free allocated buffers of previous mesh data */
-    HeapFree(GetProcessHeap(), 0, This->pVertices);
-    This->pVertices = NULL;
-    HeapFree(GetProcessHeap(), 0, This->pNormals);
-    This->pNormals = NULL;
-    HeapFree(GetProcessHeap(), 0, This->pFaceData);
-    This->pFaceData = NULL;
-    HeapFree(GetProcessHeap(), 0, This->pCoords2d);
-    This->pCoords2d = NULL;
+    clean_mesh_builder_data(This);
 
     if (loadflags == D3DRMLOAD_FROMMEMORY)
     {
@@ -1622,22 +1622,7 @@ end:
         IDirectXFile_Release(pDXFile);
 
     if (ret != D3DRM_OK)
-    {
-        /* Clean mesh data */
-        This->nb_vertices = 0;
-        This->nb_normals = 0;
-        This->nb_faces = 0;
-        This->face_data_size = 0;
-        This->nb_coords2d = 0;
-        HeapFree(GetProcessHeap(), 0, This->pVertices);
-        This->pVertices = NULL;
-        HeapFree(GetProcessHeap(), 0, This->pNormals);
-        This->pNormals = NULL;
-        HeapFree(GetProcessHeap(), 0, This->pFaceData);
-        This->pFaceData = NULL;
-        HeapFree(GetProcessHeap(), 0, This->pCoords2d);
-        This->pCoords2d = NULL;
-    }
+        clean_mesh_builder_data(This);
 
     return ret;
 }




More information about the wine-cvs mailing list