<div dir="ltr"><div><div>See patch 5/6 for the v4 changes.<br><br></div>Cheers,<br></div>Aaryaman<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 8, 2016 at 4:01 PM, Aaryaman Vasishta <span dir="ltr"><<a href="mailto:jem456.vasishta@gmail.com" target="_blank">jem456.vasishta@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">v4: Removed various leaks, avoided redundant usage of HEAP_ZERO_MEMORY.<br>
<br>
Signed-off-by: Aaryaman Vasishta <<a href="mailto:jem456.vasishta@gmail.com">jem456.vasishta@gmail.com</a>><br>
---<br>
 dlls/d3drm/d3drm.c       | 32 +++++++++++++++++++++++++-------<br>
 dlls/d3drm/tests/d3drm.c | 33 +++++++++++++--------------------<br>
 2 files changed, 38 insertions(+), 27 deletions(-)<br>
<br>
diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c<br>
index 6c6007d..c74d5d8 100644<br>
--- a/dlls/d3drm/d3drm.c<br>
+++ b/dlls/d3drm/d3drm.c<br>
@@ -418,11 +418,18 @@ static HRESULT WINAPI d3drm1_LoadTexture(IDirect3DRM *iface,<br>
     struct d3drm_texture *object;<br>
     HRESULT hr;<br>
<br>
-    FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);<br>
+    TRACE("iface %p, filename %s, texture %p.\n", iface, debugstr_a(filename), texture);<br>
<br>
     if (FAILED(hr = d3drm_texture_create(&object)))<br>
         return hr;<br>
<br>
+    object->d3drm = iface;<br>
+    if (FAILED(hr = IDirect3DRMTexture_InitFromFile(&object->IDirect3DRMTexture_iface, filename)))<br>
+    {<br>
+        d3drm_texture_destroy(object);<br>
+        return hr;<br>
+    }<br>
+<br>
     *texture = &object->IDirect3DRMTexture_iface;<br>
<br>
     return D3DRM_OK;<br>
@@ -861,17 +868,19 @@ static HRESULT WINAPI d3drm2_CreateUserVisual(IDirect3DRM2 *iface,<br>
 static HRESULT WINAPI d3drm2_LoadTexture(IDirect3DRM2 *iface,<br>
         const char *filename, IDirect3DRMTexture2 **texture)<br>
 {<br>
-    struct d3drm_texture *object;<br>
+    struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);<br>
+    IDirect3DRMTexture3 *texture3;<br>
     HRESULT hr;<br>
<br>
-    FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);<br>
+    TRACE("iface %p, filename %s, texture %p.\n", iface, debugstr_a(filename), texture);<br>
<br>
-    if (FAILED(hr = d3drm_texture_create(&object)))<br>
+    if (FAILED(hr = IDirect3DRM3_LoadTexture(&d3drm->IDirect3DRM3_iface, filename, &texture3)))<br>
         return hr;<br>
<br>
-    *texture = &object->IDirect3DRMTexture2_iface;<br>
+    hr = IDirect3DRMTexture3_QueryInterface(texture3, &IID_IDirect3DRMTexture2, (void **)texture);<br>
+    IDirect3DRMTexture3_Release(texture3);<br>
<br>
-    return D3DRM_OK;<br>
+    return hr;<br>
 }<br>
<br>
 static HRESULT WINAPI d3drm2_LoadTextureFromResource(IDirect3DRM2 *iface, HMODULE module,<br>
@@ -1413,14 +1422,23 @@ static HRESULT WINAPI d3drm3_CreateUserVisual(IDirect3DRM3 *iface,<br>
 static HRESULT WINAPI d3drm3_LoadTexture(IDirect3DRM3 *iface,<br>
         const char *filename, IDirect3DRMTexture3 **texture)<br>
 {<br>
+    struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);<br>
     struct d3drm_texture *object;<br>
     HRESULT hr;<br>
<br>
-    FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);<br>
+    TRACE("iface %p, filename %s, texture %p.\n", iface, debugstr_a(filename), texture);<br>
<br>
     if (FAILED(hr = d3drm_texture_create(&object)))<br>
         return hr;<br>
<br>
+    object->d3drm = &d3drm->IDirect3DRM_iface;<br>
+    if (FAILED(hr = IDirect3DRMTexture3_InitFromFile(&object->IDirect3DRMTexture3_iface, filename)))<br>
+    {<br>
+        d3drm_texture_destroy(object);<br>
+        return hr;<br>
+    }<br>
+<br>
+    object->d3drm = &d3drm->IDirect3DRM_iface;<br>
     *texture = &object->IDirect3DRMTexture3_iface;<br>
<br>
     return D3DRM_OK;<br>
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c<br>
index e6311d8..4cf3ba7 100644<br>
--- a/dlls/d3drm/tests/d3drm.c<br>
+++ b/dlls/d3drm/tests/d3drm.c<br>
@@ -4510,18 +4510,16 @@ static void test_load_texture(void)<br>
         hr = IDirect3DRM_LoadTexture(d3drm1, filename, &texture1);<br>
         ok(SUCCEEDED(hr), "Test %u: Failed to load texture, hr %#x.\n", i, hr);<br>
         ref2 = get_refcount((IUnknown *)d3drm1);<br>
-        todo_wine ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
+        ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
<br>
         hr = IDirect3DRMTexture_InitFromFile(texture1, filename);<br>
-        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);<br>
+        ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);<br>
         /* InitFromFile seems to AddRef IDirect3DRM even if it fails. */<br>
-        if (FAILED(hr))<br>
-            IDirect3DRM_Release(d3drm1);<br>
+        IDirect3DRM_Release(d3drm1);<br>
<br>
         d3drm_img = IDirect3DRMTexture_GetImage(texture1);<br>
         ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);<br>
-        if (d3drm_img)<br>
-            test_bitmap_data(i * 7, d3drm_img, FALSE, tests[i].w, tests[i].h, tests[i].palettized);<br>
+        test_bitmap_data(i * 7, d3drm_img, FALSE, tests[i].w, tests[i].h, tests[i].palettized);<br>
         IDirect3DRMTexture_Release(texture1);<br>
         ref2 = get_refcount((IUnknown *)d3drm1);<br>
         ok(ref1 == ref2, "Test %u: expected ref1 == ref2, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
@@ -4537,17 +4535,15 @@ static void test_load_texture(void)<br>
         hr = IDirect3DRM2_LoadTexture(d3drm2, filename, &texture2);<br>
         ok(SUCCEEDED(hr), "Test %u: Failed to load texture, hr %#x.\n", i, hr);<br>
         ref2 = get_refcount((IUnknown *)d3drm1);<br>
-        todo_wine ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
+        ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
<br>
         hr = IDirect3DRMTexture2_InitFromFile(texture2, filename);<br>
-        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);<br>
-        if (FAILED(hr))<br>
-            IDirect3DRM_Release(d3drm1);<br>
+        ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);<br>
+        IDirect3DRM_Release(d3drm1);<br>
<br>
         d3drm_img = IDirect3DRMTexture2_GetImage(texture2);<br>
         ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);<br>
-        if (d3drm_img)<br>
-            test_bitmap_data(i * 7 + 2, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);<br>
+        test_bitmap_data(i * 7 + 2, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);<br>
         IDirect3DRMTexture2_Release(texture2);<br>
         ref2 = get_refcount((IUnknown *)d3drm1);<br>
         ok(ref1 == ref2, "Test %u: expected ref1 == ref2, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
@@ -4563,25 +4559,22 @@ static void test_load_texture(void)<br>
         hr = IDirect3DRM3_LoadTexture(d3drm3, filename, &texture3);<br>
         ok(SUCCEEDED(hr), "Test %u: Failed to load texture, hr %#x.\n", i, hr);<br>
         ref2 = get_refcount((IUnknown *)d3drm1);<br>
-        todo_wine ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
+        ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);<br>
<br>
         hr = IDirect3DRMTexture3_InitFromFile(texture3, filename);<br>
-        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);<br>
-        if (FAILED(hr))<br>
-            IDirect3DRM_Release(d3drm1);<br>
+        ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);<br>
+        IDirect3DRM_Release(d3drm1);<br>
<br>
         d3drm_img = IDirect3DRMTexture3_GetImage(texture3);<br>
         ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);<br>
-        if (d3drm_img)<br>
-            test_bitmap_data(i * 7 + 4, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);<br>
+        test_bitmap_data(i * 7 + 4, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);<br>
         /* Test whether querying a version 1 texture from version 3 causes a<br>
          * change in the loading behavior. */<br>
         hr = IDirect3DRMTexture3_QueryInterface(texture3, &IID_IDirect3DRMTexture, (void **)&texture1);<br>
         ok(SUCCEEDED(hr), "Failed to get IDirect3DRMTexture interface, hr %#x.\n", hr);<br>
         d3drm_img = IDirect3DRMTexture_GetImage(texture1);<br>
         ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);<br>
-        if (d3drm_img)<br>
-            test_bitmap_data(i * 7 + 5, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);<br>
+        test_bitmap_data(i * 7 + 5, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);<br>
         IDirect3DRMTexture_Release(texture1);<br>
         IDirect3DRMTexture3_Release(texture3);<br>
         ref2 = get_refcount((IUnknown *)d3drm1);<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.3.2 (Apple Git-55)<br>
<br>
</font></span></blockquote></div><br></div>