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