Jacek Caban : mshtml: Split code from OnDataAvailable.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 11 07:28:02 CDT 2007


Module: wine
Branch: master
Commit: 98da8e2823f4ab5aff8bb25a5fe80995fcd8e935
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=98da8e2823f4ab5aff8bb25a5fe80995fcd8e935

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri May 11 13:13:16 2007 +0200

mshtml: Split code from OnDataAvailable.

---

 dlls/mshtml/navigate.c |  103 ++++++++++++++++++++++++++----------------------
 1 files changed, 56 insertions(+), 47 deletions(-)

diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index c2a6947..6ab6bc4 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -172,7 +172,7 @@ static const nsIInputStreamVtbl nsInputStreamVtbl = {
     nsInputStream_IsNonBlocking
 };
 
-static nsProtocolStream *create_nsprotocol_stream(IStream *stream)
+static nsProtocolStream *create_nsprotocol_stream(void)
 {
     nsProtocolStream *ret = mshtml_alloc(sizeof(nsProtocolStream));
 
@@ -183,6 +183,60 @@ static nsProtocolStream *create_nsprotocol_stream(IStream *stream)
     return ret;
 }
 
+static HRESULT read_stream_data(BSCallback *This, IStream *stream)
+{
+    nsresult nsres;
+    HRESULT hres;
+
+    if(!This->nslistener) {
+        BYTE buf[1024];
+        DWORD read;
+
+        do {
+            read = 0;
+            hres = IStream_Read(stream, buf, sizeof(buf), &read);
+        }while(hres == S_OK && read);
+
+        return S_OK;
+    }
+
+    if(!This->nsstream)
+        This->nsstream = create_nsprotocol_stream();
+
+    do {
+        hres = IStream_Read(stream, This->nsstream->buf, sizeof(This->nsstream->buf),
+                &This->nsstream->buf_size);
+        if(!This->nsstream->buf_size)
+            break;
+
+        if(!This->readed && This->nsstream->buf_size >= 2 && *(WORD*)This->nsstream->buf == 0xfeff) {
+                This->nschannel->charset = mshtml_alloc(sizeof(UTF16_STR));
+                memcpy(This->nschannel->charset, UTF16_STR, sizeof(UTF16_STR));
+        }
+
+        if(!This->readed) {
+            nsres = nsIStreamListener_OnStartRequest(This->nslistener,
+                    (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext);
+            if(NS_FAILED(nsres))
+                FIXME("OnStartRequest failed: %08x\n", nsres);
+        }
+
+        This->readed += This->nsstream->buf_size;
+
+        nsres = nsIStreamListener_OnDataAvailable(This->nslistener,
+                (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext,
+                NSINSTREAM(This->nsstream), This->readed-This->nsstream->buf_size,
+                This->nsstream->buf_size);
+        if(NS_FAILED(nsres))
+            ERR("OnDataAvailable failed: %08x\n", nsres);
+
+        if(This->nsstream->buf_size)
+            FIXME("buffer is not empty!\n");
+    }while(hres == S_OK);
+
+    return S_OK;
+}
+
 #define STATUSCLB_THIS(iface) DEFINE_THIS(BSCallback, BindStatusCallback, iface)
 
 static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *iface,
@@ -394,55 +448,10 @@ static HRESULT WINAPI BindStatusCallback_OnDataAvailable(IBindStatusCallback *if
         DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
 {
     BSCallback *This = STATUSCLB_THIS(iface);
-    nsresult nsres;
-    HRESULT hres;
 
     TRACE("(%p)->(%08x %d %p %p)\n", This, grfBSCF, dwSize, pformatetc, pstgmed);
 
-    if(This->nslistener) {
-        if(!This->nsstream)
-            This->nsstream = create_nsprotocol_stream(pstgmed->u.pstm);
-
-        do {
-            hres = IStream_Read(pstgmed->u.pstm, This->nsstream->buf, sizeof(This->nsstream->buf),
-                         &This->nsstream->buf_size);
-            if(!This->nsstream->buf_size)
-                break;
-
-            if(!This->readed && This->nsstream->buf_size >= 2 && *(WORD*)This->nsstream->buf == 0xfeff) {
-                This->nschannel->charset = mshtml_alloc(sizeof(UTF16_STR));
-                memcpy(This->nschannel->charset, UTF16_STR, sizeof(UTF16_STR));
-            }
-
-            if(!This->readed) {
-                nsres = nsIStreamListener_OnStartRequest(This->nslistener,
-                        (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext);
-                if(NS_FAILED(nsres))
-                    FIXME("OnStartRequest failed: %08x\n", nsres);
-            }
-
-            This->readed += This->nsstream->buf_size;
-
-            nsres = nsIStreamListener_OnDataAvailable(This->nslistener,
-                    (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext,
-                    NSINSTREAM(This->nsstream), This->readed-This->nsstream->buf_size,
-                    This->nsstream->buf_size);
-            if(NS_FAILED(nsres))
-                ERR("OnDataAvailable failed: %08x\n", nsres);
-
-            if(This->nsstream->buf_size)
-                FIXME("buffer is not empty!\n");
-        }while(hres == S_OK);
-    }else {
-        BYTE buf[1024];
-        DWORD read;
-        do {
-            read = 0;
-            hres = IStream_Read(pstgmed->u.pstm, buf, sizeof(buf), &read);
-        }while(hres == S_OK && read);
-    }
-
-    return S_OK;
+    return read_stream_data(This, pstgmed->u.pstm);
 }
 
 static HRESULT WINAPI BindStatusCallback_OnObjectAvailable(IBindStatusCallback *iface,




More information about the wine-cvs mailing list