[1/3] d3dxof: Remove unnecessary fields from IDirectXFileEnumObjectImpl.

Dylan Smith dylan.ah.smith at gmail.com
Wed Jun 8 14:38:51 CDT 2011


The file and file mapping handles can be closed after calling MapViewOfFile,
FreeResource is a no-op, and checking mapped_memory for a non-NULL value is
simpler than storing load options to decide is memory needs to be unmapped.
---
 dlls/d3dxof/d3dxof.c         |   46 ++++++++++++++---------------------------
 dlls/d3dxof/d3dxof_private.h |    6 +----
 2 files changed, 17 insertions(+), 35 deletions(-)

diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c
index 6717fc7..8392c31 100644
--- a/dlls/d3dxof/d3dxof.c
+++ b/dlls/d3dxof/d3dxof.c
@@ -141,17 +141,12 @@ static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPV
   IDirectXFileEnumObjectImpl* object;
   HRESULT hr;
   DWORD* header;
-  HANDLE hFile = INVALID_HANDLE_VALUE;
-  HANDLE file_mapping = 0;
-  LPBYTE buffer = NULL;
-  HGLOBAL resource_data = 0;
+  LPBYTE mapped_memory = NULL;
   LPBYTE decomp_buffer = NULL;
   DWORD decomp_size = 0;
   LPBYTE file_buffer;
   DWORD file_size;
 
-  LPDXFILELOADMEMORY lpdxflm = NULL;
-
   TRACE("(%p/%p)->(%p,%x,%p)\n", This, iface, pvSource, dwLoadOptions, ppEnumObj);
 
   if (!ppEnumObj)
@@ -162,6 +157,8 @@ static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPV
 
   if (dwLoadOptions == DXFILELOAD_FROMFILE)
   {
+    HANDLE hFile, file_mapping;
+
     TRACE("Open source file '%s'\n", (char*)pvSource);
 
     hFile = CreateFileA(pvSource, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
@@ -176,21 +173,25 @@ static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPV
     file_mapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
     if (!file_mapping)
     {
+      CloseHandle(hFile);
       hr = DXFILEERR_BADFILETYPE;
       goto error;
     }
 
-    buffer = MapViewOfFile(file_mapping, FILE_MAP_READ, 0, 0, 0);
-    if (!buffer)
+    mapped_memory = MapViewOfFile(file_mapping, FILE_MAP_READ, 0, 0, 0);
+    CloseHandle(file_mapping);
+    CloseHandle(hFile);
+    if (!mapped_memory)
     {
       hr = DXFILEERR_BADFILETYPE;
       goto error;
     }
-    file_buffer = buffer;
+    file_buffer = mapped_memory;
   }
   else if (dwLoadOptions == DXFILELOAD_FROMRESOURCE)
   {
     HRSRC resource_info;
+    HGLOBAL resource_data;
     LPDXFILELOADRESOURCE lpdxflr = pvSource;
 
     TRACE("Source in resource (module = %p, name = %s, type = %s\n", lpdxflr->hModule, debugstr_a(lpdxflr->lpName), debugstr_a(lpdxflr->lpType));
@@ -220,7 +221,7 @@ static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPV
   }
   else if (dwLoadOptions == DXFILELOAD_FROMMEMORY)
   {
-    lpdxflm = pvSource;
+    LPDXFILELOADMEMORY lpdxflm = pvSource;
 
     TRACE("Source in memory at %p with size %d\n", lpdxflm->lpMemory, lpdxflm->dSize);
 
@@ -312,10 +313,7 @@ static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPV
   if (FAILED(hr))
     goto error;
 
-  object->source = dwLoadOptions;
-  object->hFile = hFile;
-  object->file_mapping = file_mapping;
-  object->buffer = buffer;
+  object->mapped_memory = mapped_memory;
   object->decomp_buffer = decomp_buffer;
   object->pDirectXFile = This;
   object->buf.pdxf = This;
@@ -366,14 +364,8 @@ static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPV
   return DXFILE_OK;
 
 error:
-  if (buffer)
-    UnmapViewOfFile(buffer);
-  if (file_mapping)
-    CloseHandle(file_mapping);
-  if (hFile != INVALID_HANDLE_VALUE)
-    CloseHandle(hFile);
-  if (resource_data)
-    FreeResource(resource_data);
+  if (mapped_memory)
+    UnmapViewOfFile(mapped_memory);
   HeapFree(GetProcessHeap(), 0, decomp_buffer);
   *ppEnumObj = NULL;
 
@@ -1134,14 +1126,8 @@ static ULONG WINAPI IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject* i
     int i;
     for (i = 0; i < This->nb_xobjects; i++)
       IDirectXFileData_Release(This->pRefObjects[i]);
-    if (This->source == DXFILELOAD_FROMFILE)
-    {
-      UnmapViewOfFile(This->buffer);
-      CloseHandle(This->file_mapping);
-      CloseHandle(This->hFile);
-    }
-    else if (This->source == DXFILELOAD_FROMRESOURCE)
-      FreeResource(This->resource_data);
+    if (This->mapped_memory)
+      UnmapViewOfFile(This->mapped_memory);
     HeapFree(GetProcessHeap(), 0, This->decomp_buffer);
     HeapFree(GetProcessHeap(), 0, This);
   }
diff --git a/dlls/d3dxof/d3dxof_private.h b/dlls/d3dxof/d3dxof_private.h
index 927ccc4..5e61d65 100644
--- a/dlls/d3dxof/d3dxof_private.h
+++ b/dlls/d3dxof/d3dxof_private.h
@@ -146,11 +146,7 @@ typedef struct {
 typedef struct {
     IDirectXFileEnumObject IDirectXFileEnumObject_iface;
     LONG ref;
-    DXFILELOADOPTIONS source;
-    HANDLE hFile;
-    HANDLE file_mapping;
-    LPBYTE buffer;
-    HGLOBAL resource_data;
+    LPBYTE mapped_memory;
     LPBYTE decomp_buffer;
     parse_buffer buf;
     IDirectXFileImpl* pDirectXFile;
-- 
1.7.4.1




More information about the wine-patches mailing list