[PATCH 7/7] inetcomm: COM cleanup for the IStream iface.

Michael Stefaniuc mstefani at redhat.de
Sun Mar 3 17:36:06 CST 2013


---
 dlls/inetcomm/mimeole.c |   62 +++++++++++++++++++----------------------------
 1 files changed, 25 insertions(+), 37 deletions(-)

diff --git a/dlls/inetcomm/mimeole.c b/dlls/inetcomm/mimeole.c
index 62d42b9..4c61f72 100644
--- a/dlls/inetcomm/mimeole.c
+++ b/dlls/inetcomm/mimeole.c
@@ -572,19 +572,14 @@ static HRESULT WINAPI MimeBody_IsDirty(
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI MimeBody_Load(
-                           IMimeBody* iface,
-                           LPSTREAM pStm)
+static HRESULT WINAPI MimeBody_Load(IMimeBody *iface, IStream *pStm)
 {
     MimeBody *This = impl_from_IMimeBody(iface);
     TRACE("(%p)->(%p)\n", iface, pStm);
     return parse_headers(This, pStm);
 }
 
-static HRESULT WINAPI MimeBody_Save(
-                           IMimeBody* iface,
-                           LPSTREAM pStm,
-                           BOOL fClearDirty)
+static HRESULT WINAPI MimeBody_Save(IMimeBody *iface, IStream *pStm, BOOL fClearDirty)
 {
     FIXME("stub\n");
     return E_NOTIMPL;
@@ -1150,62 +1145,58 @@ HRESULT MimeBody_create(IUnknown *outer, void **ppv)
 
 typedef struct
 {
-    IStreamVtbl *lpVtbl;
-    LONG refs;
-
+    IStream IStream_iface;
+    LONG ref;
     IStream *base;
     ULARGE_INTEGER pos, start, length;
 } sub_stream_t;
 
-static inline sub_stream_t *impl_from_IStream( IStream *iface )
+static inline sub_stream_t *impl_from_IStream(IStream *iface)
 {
-    return (sub_stream_t *)((char*)iface - FIELD_OFFSET(sub_stream_t, lpVtbl));
+    return CONTAINING_RECORD(iface, sub_stream_t, IStream_iface);
 }
 
-static HRESULT WINAPI sub_stream_QueryInterface(
-        IStream* iface,
-        REFIID riid,
-        void **ppvObject)
+static HRESULT WINAPI sub_stream_QueryInterface(IStream *iface, REFIID riid, void **ppv)
 {
     sub_stream_t *This = impl_from_IStream(iface);
 
-    TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
-    *ppvObject = NULL;
+    TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
+    *ppv = NULL;
 
     if(IsEqualIID(riid, &IID_IUnknown) ||
        IsEqualIID(riid, &IID_ISequentialStream) ||
        IsEqualIID(riid, &IID_IStream))
     {
         IStream_AddRef(iface);
-        *ppvObject = iface;
+        *ppv = iface;
         return S_OK;
     }
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI sub_stream_AddRef(
-         IStream* iface)
+static ULONG WINAPI sub_stream_AddRef(IStream *iface)
 {
     sub_stream_t *This = impl_from_IStream(iface);
+    LONG ref = InterlockedIncrement(&This->ref);
 
-    TRACE("(%p)\n", This);
-    return InterlockedIncrement(&This->refs);
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    return ref;
 }
 
-static ULONG WINAPI  sub_stream_Release(
-        IStream* iface)
+static ULONG WINAPI sub_stream_Release(IStream *iface)
 {
     sub_stream_t *This = impl_from_IStream(iface);
-    LONG refs;
+    LONG ref = InterlockedDecrement(&This->ref);
 
-    TRACE("(%p)\n", This);
-    refs = InterlockedDecrement(&This->refs);
-    if(!refs)
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    if(!ref)
     {
         IStream_Release(This->base);
         HeapFree(GetProcessHeap(), 0, This);
     }
-    return refs;
+    return ref;
 }
 
 static HRESULT WINAPI sub_stream_Read(
@@ -1422,15 +1413,15 @@ static HRESULT create_sub_stream(IStream *stream, ULARGE_INTEGER start, ULARGE_I
     This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
     if(!This) return E_OUTOFMEMORY;
 
-    This->lpVtbl = &sub_stream_vtbl;
-    This->refs = 1;
+    This->IStream_iface.lpVtbl = &sub_stream_vtbl;
+    This->ref = 1;
     This->start = start;
     This->length = length;
     This->pos.QuadPart = 0;
     IStream_AddRef(stream);
     This->base = stream;
 
-    *out = (IStream*)&This->lpVtbl;
+    *out = &This->IStream_iface;
     return S_OK;
 }
 
@@ -1733,10 +1724,7 @@ static HRESULT WINAPI MimeMessage_Load(IMimeMessage *iface, IStream *pStm)
     return S_OK;
 }
 
-static HRESULT WINAPI MimeMessage_Save(
-    IMimeMessage *iface,
-    LPSTREAM pStm,
-    BOOL fClearDirty)
+static HRESULT WINAPI MimeMessage_Save(IMimeMessage *iface, IStream *pStm, BOOL fClearDirty)
 {
     FIXME("(%p)->(%p, %s)\n", iface, pStm, fClearDirty ? "TRUE" : "FALSE");
     return E_NOTIMPL;
-- 
1.7.6.5



More information about the wine-patches mailing list