Module: wine Branch: master Commit: 73984d4da898a6e66e43856437950bee3b20b6b7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=73984d4da898a6e66e43856437...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jul 27 10:51:24 2012 +0200
mshtml: Moved conversion to unicode of buffers from binding to navigate.c.
---
dlls/mshtml/binding.h | 2 ++ dlls/mshtml/mshtml_private.h | 2 -- dlls/mshtml/navigate.c | 32 ++++++++++++++++++++------------ dlls/mshtml/script.c | 11 ++--------- 4 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/dlls/mshtml/binding.h b/dlls/mshtml/binding.h index 040fcf2..892a114 100644 --- a/dlls/mshtml/binding.h +++ b/dlls/mshtml/binding.h @@ -113,3 +113,5 @@ HRESULT channelbsc_load_stream(HTMLInnerWindow*,IStream*) DECLSPEC_HIDDEN; void channelbsc_set_channel(nsChannelBSC*,nsChannel*,nsIStreamListener*,nsISupports*) DECLSPEC_HIDDEN; IUri *nsuri_get_uri(nsWineURI*) DECLSPEC_HIDDEN; HRESULT create_relative_uri(HTMLOuterWindow*,const WCHAR*,IUri**) DECLSPEC_HIDDEN; + +HRESULT bind_mon_to_wstr(HTMLInnerWindow*,IMoniker*,WCHAR**) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 91cbbfe..b636685 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -801,8 +801,6 @@ void abort_window_bindings(HTMLInnerWindow*) DECLSPEC_HIDDEN; void set_download_state(HTMLDocumentObj*,int) DECLSPEC_HIDDEN; void call_docview_84(HTMLDocumentObj*) DECLSPEC_HIDDEN;
-HRESULT bind_mon_to_buffer(HTMLInnerWindow*,IMoniker*,void**,DWORD*) DECLSPEC_HIDDEN; - void set_ready_state(HTMLOuterWindow*,READYSTATE) DECLSPEC_HIDDEN;
HRESULT HTMLSelectionObject_Create(HTMLDocumentNode*,nsISelection*,IHTMLSelectionObject**) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index b32446e..3827e47 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -772,7 +772,7 @@ typedef struct { BSCallback bsc;
DWORD size; - BYTE *buf; + char *buf; HRESULT hres; } BufferBSC;
@@ -875,27 +875,35 @@ static BufferBSC *create_bufferbsc(IMoniker *mon) return ret; }
-HRESULT bind_mon_to_buffer(HTMLInnerWindow *window, IMoniker *mon, void **buf, DWORD *size) +HRESULT bind_mon_to_wstr(HTMLInnerWindow *window, IMoniker *mon, WCHAR **ret) { BufferBSC *bsc = create_bufferbsc(mon); + WCHAR *text; + DWORD len; HRESULT hres;
- *buf = NULL; - hres = start_binding(window, &bsc->bsc, NULL); - if(SUCCEEDED(hres)) { + if(SUCCEEDED(hres)) hres = bsc->hres; - if(SUCCEEDED(hres)) { - *buf = bsc->buf; - bsc->buf = NULL; - *size = bsc->bsc.readed; - bsc->size = 0; - } + if(FAILED(hres)) { + IBindStatusCallback_Release(&bsc->bsc.IBindStatusCallback_iface); + return hres; }
+ len = MultiByteToWideChar(CP_ACP, 0, bsc->buf, bsc->bsc.readed, NULL, 0); + text = heap_alloc((len+1)*sizeof(WCHAR)); + if(text) { + MultiByteToWideChar(CP_ACP, 0, bsc->buf, bsc->bsc.readed, text, len); + text[len] = 0; + }else { + hres = E_OUTOFMEMORY; + } IBindStatusCallback_Release(&bsc->bsc.IBindStatusCallback_iface); + if(FAILED(hres)) + return hres;
- return hres; + *ret = text; + return S_OK; }
static HRESULT read_post_data_stream(nsChannelBSC *This, nsChannel *nschannel) diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c index 4c94662..55c7872 100644 --- a/dlls/mshtml/script.c +++ b/dlls/mshtml/script.c @@ -32,6 +32,7 @@ #include "wine/debug.h"
#include "mshtml_private.h" +#include "binding.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
@@ -661,9 +662,7 @@ static void parse_text(ScriptHost *script_host, LPCWSTR text) static void parse_extern_script(ScriptHost *script_host, LPCWSTR src) { IMoniker *mon; - char *buf; WCHAR *text; - DWORD len, size=0; HRESULT hres;
static const WCHAR wine_schemaW[] = {'w','i','n','e',':'}; @@ -675,17 +674,11 @@ static void parse_extern_script(ScriptHost *script_host, LPCWSTR src) if(FAILED(hres)) return;
- hres = bind_mon_to_buffer(script_host->window, mon, (void**)&buf, &size); + hres = bind_mon_to_wstr(script_host->window, mon, &text); IMoniker_Release(mon); if(FAILED(hres)) return;
- len = MultiByteToWideChar(CP_ACP, 0, buf, size, NULL, 0); - text = heap_alloc((len+1)*sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, buf, size, text, len); - heap_free(buf); - text[len] = 0; - parse_text(script_host, text);
heap_free(text);