Jacek Caban : mshtml: Use QueryService to get IHttpNegotiate in get_post_data_stream.

Alexandre Julliard julliard at winehq.org
Fri Jan 11 07:20:30 CST 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan 11 11:26:08 2008 +0100

mshtml: Use QueryService to get IHttpNegotiate in get_post_data_stream.

---

 dlls/mshtml/persist.c |   35 +++++++++++++++++++++++++----------
 1 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 38b4cef..a1d50b4 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -90,8 +90,9 @@ static int fix_headers(char *buf, DWORD post_len)
 static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
 {
     nsIInputStream *ret = NULL;
+    IUnknown *unk;
     IBindStatusCallback *callback;
-    IHttpNegotiate *http_negotiate;
+    IServiceProvider *service_provider;
     BINDINFO bindinfo;
     DWORD bindf = 0;
     DWORD post_len = 0, headers_len = 0;
@@ -108,19 +109,33 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
     if(!bctx)
         return NULL;
 
-    hres = IBindCtx_GetObjectParam(bctx, _BSCB_Holder_, (IUnknown**)&callback);
+    hres = IBindCtx_GetObjectParam(bctx, _BSCB_Holder_, &unk);
     if(FAILED(hres))
         return NULL;
 
-    hres = IBindStatusCallback_QueryInterface(callback, &IID_IHttpNegotiate,
-                                              (void**)&http_negotiate);
+    hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&callback);
+    if(FAILED(hres)) {
+        IUnknown_Release(unk);
+        return NULL;
+    }
+
+    hres = IUnknown_QueryInterface(unk, &IID_IServiceProvider, (void**)&service_provider);
+    IUnknown_Release(unk);
     if(SUCCEEDED(hres)) {
-        hres = IHttpNegotiate_BeginningTransaction(http_negotiate, emptystr,
-                                                   emptystr, 0, &headers);
-        IHttpNegotiate_Release(http_negotiate);
+        IHttpNegotiate *http_negotiate;
+
+        hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate, &IID_IHttpNegotiate,
+                                             (void**)&http_negotiate);
+        if(SUCCEEDED(hres)) {
+            hres = IHttpNegotiate_BeginningTransaction(http_negotiate, emptystr,
+                                                       emptystr, 0, &headers);
+            IHttpNegotiate_Release(http_negotiate);
+
+            if(SUCCEEDED(hres) && headers)
+                headers_len = WideCharToMultiByte(CP_ACP, 0, headers, -1, NULL, 0, NULL, NULL);
+        }
 
-        if(SUCCEEDED(hres) && headers)
-            headers_len = WideCharToMultiByte(CP_ACP, 0, headers, -1, NULL, 0, NULL, NULL);
+        IServiceProvider_Release(service_provider);
     }
 
     memset(&bindinfo, 0, sizeof(bindinfo));
@@ -140,7 +155,6 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
 
         if(headers_len) {
             WideCharToMultiByte(CP_ACP, 0, headers, -1, data, -1, NULL, NULL);
-            CoTaskMemFree(headers);
             len = fix_headers(data, post_len);
         }
 
@@ -159,6 +173,7 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
         ret = create_nsstream(data, len+post_len);
     }
 
+    CoTaskMemFree(headers);
     ReleaseBindInfo(&bindinfo);
     IBindStatusCallback_Release(callback);
 




More information about the wine-cvs mailing list