Module: wine Branch: master Commit: 482740d0208a3eda63022e9dd0ea8d04ed4b3ff4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=482740d0208a3eda63022e9dd0...
Author: Michael Stefaniuc mstefani@redhat.de Date: Tue Jan 11 00:36:45 2011 +0100
urlmon: Use an iface instead of a vtbl pointer in stgmed_buf_t.
---
dlls/urlmon/binding.c | 39 +++++++++++++++++++-------------------- 1 files changed, 19 insertions(+), 20 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index d5664c7..14f11a7 100644 --- a/dlls/urlmon/binding.c +++ b/dlls/urlmon/binding.c @@ -28,7 +28,7 @@ static WCHAR cbinding_contextW[] = {'C','B','i','n','d','i','n','g',' ','C','o', static WCHAR bscb_holderW[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
typedef struct { - const IUnknownVtbl *lpUnknownVtbl; + IUnknown IUnknown_iface;
LONG ref;
@@ -55,8 +55,6 @@ struct _stgmed_obj_t { const stgmed_obj_vtbl *vtbl; };
-#define STGMEDUNK(x) ((IUnknown*) &(x)->lpUnknownVtbl) - typedef enum { BEFORE_DOWNLOAD, DOWNLOADING, @@ -360,19 +358,22 @@ static void cache_file_available(Binding *This, const WCHAR *file_name) } }
-#define STGMEDUNK_THIS(iface) DEFINE_THIS(stgmed_buf_t, Unknown, iface) +static inline stgmed_buf_t *impl_from_IUnknown(IUnknown *iface) +{ + return CONTAINING_RECORD(iface, stgmed_buf_t, IUnknown_iface); +}
static HRESULT WINAPI StgMedUnk_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) { - stgmed_buf_t *This = STGMEDUNK_THIS(iface); + stgmed_buf_t *This = impl_from_IUnknown(iface);
*ppv = NULL;
if(IsEqualGUID(riid, &IID_IUnknown)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
- *ppv = STGMEDUNK(This); - IUnknown_AddRef(STGMEDUNK(This)); + *ppv = &This->IUnknown_iface; + IUnknown_AddRef(&This->IUnknown_iface); return S_OK; }
@@ -382,7 +383,7 @@ static HRESULT WINAPI StgMedUnk_QueryInterface(IUnknown *iface, REFIID riid, voi
static ULONG WINAPI StgMedUnk_AddRef(IUnknown *iface) { - stgmed_buf_t *This = STGMEDUNK_THIS(iface); + stgmed_buf_t *This = impl_from_IUnknown(iface); LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); @@ -392,7 +393,7 @@ static ULONG WINAPI StgMedUnk_AddRef(IUnknown *iface)
static ULONG WINAPI StgMedUnk_Release(IUnknown *iface) { - stgmed_buf_t *This = STGMEDUNK_THIS(iface); + stgmed_buf_t *This = impl_from_IUnknown(iface); LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); @@ -410,8 +411,6 @@ static ULONG WINAPI StgMedUnk_Release(IUnknown *iface) return ref; }
-#undef STGMEDUNK_THIS - static const IUnknownVtbl StgMedUnkVtbl = { StgMedUnk_QueryInterface, StgMedUnk_AddRef, @@ -422,7 +421,7 @@ static stgmed_buf_t *create_stgmed_buf(IInternetProtocolEx *protocol) { stgmed_buf_t *ret = heap_alloc(sizeof(*ret));
- ret->lpUnknownVtbl = &StgMedUnkVtbl; + ret->IUnknown_iface.lpVtbl = &StgMedUnkVtbl; ret->ref = 1; ret->size = 0; ret->init = FALSE; @@ -494,7 +493,7 @@ static ULONG WINAPI ProtocolStream_Release(IStream *iface) TRACE("(%p) ref=%d\n", This, ref);
if(!ref) { - IUnknown_Release(STGMEDUNK(This->buf)); + IUnknown_Release(&This->buf->IUnknown_iface); heap_free(This);
URLMON_UnlockModule(); @@ -687,7 +686,7 @@ static HRESULT stgmed_stream_fill_stgmed(stgmed_obj_t *obj, STGMEDIUM *stgmed)
stgmed->tymed = TYMED_ISTREAM; stgmed->u.pstm = STREAM(stream); - stgmed->pUnkForRelease = STGMEDUNK(stream->buf); + stgmed->pUnkForRelease = &stream->buf->IUnknown_iface;
return S_OK; } @@ -724,7 +723,7 @@ static stgmed_obj_t *create_stgmed_stream(stgmed_buf_t *buf) ret->lpStreamVtbl = &ProtocolStreamVtbl; ret->ref = 1;
- IUnknown_AddRef(STGMEDUNK(buf)); + IUnknown_AddRef(&buf->IUnknown_iface); ret->buf = buf;
URLMON_LockModule(); @@ -736,7 +735,7 @@ static void stgmed_file_release(stgmed_obj_t *obj) { stgmed_file_obj_t *file_obj = (stgmed_file_obj_t*)obj;
- IUnknown_Release(STGMEDUNK(file_obj->buf)); + IUnknown_Release(&file_obj->buf->IUnknown_iface); heap_free(file_obj); }
@@ -753,7 +752,7 @@ static HRESULT stgmed_file_fill_stgmed(stgmed_obj_t *obj, STGMEDIUM *stgmed)
stgmed->tymed = TYMED_FILE; stgmed->u.lpszFileName = file_obj->buf->cache_file; - stgmed->pUnkForRelease = STGMEDUNK(file_obj->buf); + stgmed->pUnkForRelease = &file_obj->buf->IUnknown_iface;
return S_OK; } @@ -775,7 +774,7 @@ static stgmed_obj_t *create_stgmed_file(stgmed_buf_t *buf)
ret->stgmed_obj.vtbl = &stgmed_file_vtbl;
- IUnknown_AddRef(STGMEDUNK(buf)); + IUnknown_AddRef(&buf->IUnknown_iface); ret->buf = buf;
return &ret->stgmed_obj; @@ -867,7 +866,7 @@ static ULONG WINAPI Binding_Release(IBinding *iface) if(This->service_provider) IServiceProvider_Release(This->service_provider); if(This->stgmed_buf) - IUnknown_Release(STGMEDUNK(This->stgmed_buf)); + IUnknown_Release(&This->stgmed_buf->IUnknown_iface); if(This->stgmed_obj) This->stgmed_obj->vtbl->release(This->stgmed_obj); if(This->obj) @@ -1499,7 +1498,7 @@ static HRESULT Binding_Create(IMoniker *mon, Binding *binding_ctx, IUri *uri, IB
if(binding_ctx) { ret->stgmed_buf = binding_ctx->stgmed_buf; - IUnknown_AddRef(STGMEDUNK(ret->stgmed_buf)); + IUnknown_AddRef(&ret->stgmed_buf->IUnknown_iface); ret->clipboard_format = binding_ctx->clipboard_format; }else { ret->stgmed_buf = create_stgmed_buf(PROTOCOLEX(ret->protocol));