[PATCH] The callback can be NULL

root root at localhost.localdomain
Sun Nov 25 20:07:28 CST 2007


---
 dlls/urlmon/umstream.c |   53 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 45 insertions(+), 8 deletions(-)

diff --git a/dlls/urlmon/umstream.c b/dlls/urlmon/umstream.c
index 213608f..540b888 100644
--- a/dlls/urlmon/umstream.c
+++ b/dlls/urlmon/umstream.c
@@ -414,59 +414,96 @@ static HRESULT WINAPI ProxyBindStatusCallback_OnStartBinding(IBindStatusCallback
                                                IBinding *pib)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_OnStartBinding(This->pBSC, dwReserved, pib);
+
+    if(This->pBSC)
+        return IBindStatusCallback_OnStartBinding(This->pBSC, dwReserved, pib);
+    
+    return S_OK;
 }
 
 static HRESULT WINAPI ProxyBindStatusCallback_GetPriority(IBindStatusCallback *iface, LONG *pnPriority)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_GetPriority(This->pBSC, pnPriority);
+
+    if(This->pBSC)
+        return IBindStatusCallback_GetPriority(This->pBSC, pnPriority);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ProxyBindStatusCallback_OnLowResource(IBindStatusCallback *iface, DWORD reserved)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_OnLowResource(This->pBSC, reserved);
+
+    if(This->pBSC)
+        return IBindStatusCallback_OnLowResource(This->pBSC, reserved);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ProxyBindStatusCallback_OnProgress(IBindStatusCallback *iface, ULONG ulProgress,
                                            ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_OnProgress(This->pBSC, ulProgress,
+
+    if(This->pBSC)
+        return IBindStatusCallback_OnProgress(This->pBSC, ulProgress,
                                           ulProgressMax, ulStatusCode,
                                           szStatusText);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ProxyBindStatusCallback_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_OnStopBinding(This->pBSC, hresult, szError);
+
+    if(This->pBSC)
+        return IBindStatusCallback_OnStopBinding(This->pBSC, hresult, szError);
+    
+    return S_OK;
 }
 
 static HRESULT WINAPI ProxyBindStatusCallback_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_GetBindInfo(This->pBSC, grfBINDF, pbindinfo);
+
+	if(This->pBSC)
+        return IBindStatusCallback_GetBindInfo(This->pBSC, grfBINDF, pbindinfo);
+
+    return E_INVALIDARG ;
 }
 
 static HRESULT WINAPI ProxyBindStatusCallback_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF,
                                                               DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_OnDataAvailable(This->pBSC, grfBSCF, dwSize,
+
+    if(This->pBSC)
+        return IBindStatusCallback_OnDataAvailable(This->pBSC, grfBSCF, dwSize,
                                                pformatetc, pstgmed);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ProxyBindStatusCallback_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk)
 {
     ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
-    return IBindStatusCallback_OnObjectAvailable(This->pBSC, riid, punk);
+
+    if(This->pBSC)
+        return IBindStatusCallback_OnObjectAvailable(This->pBSC, riid, punk);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI BlockingBindStatusCallback_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF,
                                                                  DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
 {
+    ProxyBindStatusCallback *This = (ProxyBindStatusCallback *)iface;
+
+    if(This->pBSC)
+        return IBindStatusCallback_OnDataAvailable(This->pBSC, grfBSCF, dwSize, pformatetc, pstgmed);
+
     return S_OK;
 }
 
-- 
1.5.3.3


--------------050101020301030200010704--




More information about the wine-patches mailing list