mshtml: COM cleanup for the nsIInputStream iface.

This commit is contained in:
Michael Stefaniuc 2011-01-05 00:41:05 +01:00 committed by Alexandre Julliard
parent 1d7e50079a
commit 1ae51aa74a
1 changed files with 20 additions and 21 deletions

View File

@ -45,7 +45,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
#define UTF16_STR "utf-16" #define UTF16_STR "utf-16"
typedef struct { typedef struct {
const nsIInputStreamVtbl *lpInputStreamVtbl; nsIInputStream nsIInputStream_iface;
LONG ref; LONG ref;
@ -53,8 +53,6 @@ typedef struct {
DWORD buf_size; DWORD buf_size;
} nsProtocolStream; } nsProtocolStream;
#define NSINSTREAM(x) ((nsIInputStream*) &(x)->lpInputStreamVtbl)
typedef struct { typedef struct {
void (*destroy)(BSCallback*); void (*destroy)(BSCallback*);
HRESULT (*init_bindinfo)(BSCallback*); HRESULT (*init_bindinfo)(BSCallback*);
@ -91,25 +89,28 @@ struct BSCallback {
struct list entry; struct list entry;
}; };
#define NSINSTREAM_THIS(iface) DEFINE_THIS(nsProtocolStream, InputStream, iface) static inline nsProtocolStream *impl_from_nsIInputStream(nsIInputStream *iface)
{
return CONTAINING_RECORD(iface, nsProtocolStream, nsIInputStream_iface);
}
static nsresult NSAPI nsInputStream_QueryInterface(nsIInputStream *iface, nsIIDRef riid, static nsresult NSAPI nsInputStream_QueryInterface(nsIInputStream *iface, nsIIDRef riid,
void **result) void **result)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
*result = NULL; *result = NULL;
if(IsEqualGUID(&IID_nsISupports, riid)) { if(IsEqualGUID(&IID_nsISupports, riid)) {
TRACE("(%p)->(IID_nsISupports %p)\n", This, result); TRACE("(%p)->(IID_nsISupports %p)\n", This, result);
*result = NSINSTREAM(This); *result = &This->nsIInputStream_iface;
}else if(IsEqualGUID(&IID_nsIInputStream, riid)) { }else if(IsEqualGUID(&IID_nsIInputStream, riid)) {
TRACE("(%p)->(IID_nsIInputStream %p)\n", This, result); TRACE("(%p)->(IID_nsIInputStream %p)\n", This, result);
*result = NSINSTREAM(This); *result = &This->nsIInputStream_iface;
} }
if(*result) { if(*result) {
nsIInputStream_AddRef(NSINSTREAM(This)); nsIInputStream_AddRef(&This->nsIInputStream_iface);
return NS_OK; return NS_OK;
} }
@ -119,7 +120,7 @@ static nsresult NSAPI nsInputStream_QueryInterface(nsIInputStream *iface, nsIIDR
static nsrefcnt NSAPI nsInputStream_AddRef(nsIInputStream *iface) static nsrefcnt NSAPI nsInputStream_AddRef(nsIInputStream *iface)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
LONG ref = InterlockedIncrement(&This->ref); LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); TRACE("(%p) ref=%d\n", This, ref);
@ -130,7 +131,7 @@ static nsrefcnt NSAPI nsInputStream_AddRef(nsIInputStream *iface)
static nsrefcnt NSAPI nsInputStream_Release(nsIInputStream *iface) static nsrefcnt NSAPI nsInputStream_Release(nsIInputStream *iface)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
LONG ref = InterlockedDecrement(&This->ref); LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); TRACE("(%p) ref=%d\n", This, ref);
@ -143,14 +144,14 @@ static nsrefcnt NSAPI nsInputStream_Release(nsIInputStream *iface)
static nsresult NSAPI nsInputStream_Close(nsIInputStream *iface) static nsresult NSAPI nsInputStream_Close(nsIInputStream *iface)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
FIXME("(%p)\n", This); FIXME("(%p)\n", This);
return NS_ERROR_NOT_IMPLEMENTED; return NS_ERROR_NOT_IMPLEMENTED;
} }
static nsresult NSAPI nsInputStream_Available(nsIInputStream *iface, PRUint32 *_retval) static nsresult NSAPI nsInputStream_Available(nsIInputStream *iface, PRUint32 *_retval)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
FIXME("(%p)->(%p)\n", This, _retval); FIXME("(%p)->(%p)\n", This, _retval);
return NS_ERROR_NOT_IMPLEMENTED; return NS_ERROR_NOT_IMPLEMENTED;
} }
@ -158,7 +159,7 @@ static nsresult NSAPI nsInputStream_Available(nsIInputStream *iface, PRUint32 *_
static nsresult NSAPI nsInputStream_Read(nsIInputStream *iface, char *aBuf, PRUint32 aCount, static nsresult NSAPI nsInputStream_Read(nsIInputStream *iface, char *aBuf, PRUint32 aCount,
PRUint32 *_retval) PRUint32 *_retval)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
DWORD read = aCount; DWORD read = aCount;
TRACE("(%p)->(%p %d %p)\n", This, aBuf, aCount, _retval); TRACE("(%p)->(%p %d %p)\n", This, aBuf, aCount, _retval);
@ -181,7 +182,7 @@ static nsresult NSAPI nsInputStream_ReadSegments(nsIInputStream *iface,
nsresult (WINAPI *aWriter)(nsIInputStream*,void*,const char*,PRUint32,PRUint32,PRUint32*), nsresult (WINAPI *aWriter)(nsIInputStream*,void*,const char*,PRUint32,PRUint32,PRUint32*),
void *aClousure, PRUint32 aCount, PRUint32 *_retval) void *aClousure, PRUint32 aCount, PRUint32 *_retval)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
PRUint32 written = 0; PRUint32 written = 0;
nsresult nsres; nsresult nsres;
@ -193,7 +194,7 @@ static nsresult NSAPI nsInputStream_ReadSegments(nsIInputStream *iface,
if(aCount > This->buf_size) if(aCount > This->buf_size)
aCount = This->buf_size; aCount = This->buf_size;
nsres = aWriter(NSINSTREAM(This), aClousure, This->buf, 0, aCount, &written); nsres = aWriter(&This->nsIInputStream_iface, aClousure, This->buf, 0, aCount, &written);
if(NS_FAILED(nsres)) if(NS_FAILED(nsres))
TRACE("aWritter failed: %08x\n", nsres); TRACE("aWritter failed: %08x\n", nsres);
else if(written != This->buf_size) else if(written != This->buf_size)
@ -207,13 +208,11 @@ static nsresult NSAPI nsInputStream_ReadSegments(nsIInputStream *iface,
static nsresult NSAPI nsInputStream_IsNonBlocking(nsIInputStream *iface, PRBool *_retval) static nsresult NSAPI nsInputStream_IsNonBlocking(nsIInputStream *iface, PRBool *_retval)
{ {
nsProtocolStream *This = NSINSTREAM_THIS(iface); nsProtocolStream *This = impl_from_nsIInputStream(iface);
FIXME("(%p)->(%p)\n", This, _retval); FIXME("(%p)->(%p)\n", This, _retval);
return NS_ERROR_NOT_IMPLEMENTED; return NS_ERROR_NOT_IMPLEMENTED;
} }
#undef NSINSTREAM_THIS
static const nsIInputStreamVtbl nsInputStreamVtbl = { static const nsIInputStreamVtbl nsInputStreamVtbl = {
nsInputStream_QueryInterface, nsInputStream_QueryInterface,
nsInputStream_AddRef, nsInputStream_AddRef,
@ -229,7 +228,7 @@ static nsProtocolStream *create_nsprotocol_stream(void)
{ {
nsProtocolStream *ret = heap_alloc(sizeof(nsProtocolStream)); nsProtocolStream *ret = heap_alloc(sizeof(nsProtocolStream));
ret->lpInputStreamVtbl = &nsInputStreamVtbl; ret->nsIInputStream_iface.lpVtbl = &nsInputStreamVtbl;
ret->ref = 1; ret->ref = 1;
ret->buf_size = 0; ret->buf_size = 0;
@ -1016,7 +1015,7 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
nsres = nsIStreamListener_OnDataAvailable(This->nslistener, nsres = nsIStreamListener_OnDataAvailable(This->nslistener,
(nsIRequest*)&This->nschannel->nsIHttpChannel_iface, This->nscontext, (nsIRequest*)&This->nschannel->nsIHttpChannel_iface, This->nscontext,
NSINSTREAM(This->nsstream), This->bsc.readed-This->nsstream->buf_size, &This->nsstream->nsIInputStream_iface, This->bsc.readed-This->nsstream->buf_size,
This->nsstream->buf_size); This->nsstream->buf_size);
if(NS_FAILED(nsres)) if(NS_FAILED(nsres))
ERR("OnDataAvailable failed: %08x\n", nsres); ERR("OnDataAvailable failed: %08x\n", nsres);
@ -1043,7 +1042,7 @@ static void nsChannelBSC_destroy(BSCallback *bsc)
if(This->nscontext) if(This->nscontext)
nsISupports_Release(This->nscontext); nsISupports_Release(This->nscontext);
if(This->nsstream) if(This->nsstream)
nsIInputStream_Release(NSINSTREAM(This->nsstream)); nsIInputStream_Release(&This->nsstream->nsIInputStream_iface);
heap_free(This); heap_free(This);
} }