winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
May 2011
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
945 discussions
Start a n
N
ew thread
Jacek Caban : shdocvw: Abort pending navigation task when adding a new one.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: 0e695c3444bcfe19b10ecee71cb70218b4052936 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0e695c3444bcfe19b10ecee71…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu May 26 17:02:03 2011 +0200 shdocvw: Abort pending navigation task when adding a new one. --- dlls/shdocvw/dochost.c | 7 +++++-- dlls/shdocvw/navigate.c | 1 + dlls/shdocvw/shdocvw.h | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c index 97e5f77..2ab7975 100644 --- a/dlls/shdocvw/dochost.c +++ b/dlls/shdocvw/dochost.c @@ -62,11 +62,14 @@ LRESULT process_dochost_tasks(DocHost *This) return 0; } -static void abort_dochost_tasks(DocHost *This) +void abort_dochost_tasks(DocHost *This, task_proc_t proc) { task_header_t *task, *cursor; LIST_FOR_EACH_ENTRY_SAFE(task, cursor, &This->task_queue, task_header_t, entry) { + if(proc && proc != task->proc) + continue; + list_remove(&task->entry); task->destr(task); } @@ -886,7 +889,7 @@ void DocHost_Init(DocHost *This, IDispatch *disp, const IDocHostContainerVtbl* c void DocHost_Release(DocHost *This) { - abort_dochost_tasks(This); + abort_dochost_tasks(This, NULL); release_dochost_client(This); DocHost_ClientSite_Release(This); diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c index 32af0f1..1f8e6a4 100644 --- a/dlls/shdocvw/navigate.c +++ b/dlls/shdocvw/navigate.c @@ -761,6 +761,7 @@ static HRESULT async_doc_navigate(DocHost *This, LPCWSTR url, LPCWSTR headers, P } task->async_notif = async_notif; + abort_dochost_tasks(This, doc_navigate_proc); push_dochost_task(This, &task->header, doc_navigate_proc, doc_navigate_task_destr, FALSE); return S_OK; } diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index b127ec3..8d82417 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -251,6 +251,7 @@ void handle_navigation_error(DocHost*,HRESULT,BSTR,IHTMLWindow2*) DECLSPEC_HIDDE #define WM_DOCHOSTTASK (WM_USER+0x300) void push_dochost_task(DocHost*,task_header_t*,task_proc_t,task_destr_t,BOOL) DECLSPEC_HIDDEN; LRESULT process_dochost_tasks(DocHost*) DECLSPEC_HIDDEN; +void abort_dochost_tasks(DocHost*,task_proc_t) DECLSPEC_HIDDEN; HRESULT InternetExplorer_Create(IUnknown*,REFIID,void**) DECLSPEC_HIDDEN; void InternetExplorer_WebBrowser_Init(InternetExplorer*) DECLSPEC_HIDDEN;
1
0
0
0
Jacek Caban : shdocvw: Abort pending tasks on DocHost destruction.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: bcffa12484e311e18f8ef191673028172e05b130 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=bcffa12484e311e18f8ef1916…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu May 26 17:01:51 2011 +0200 shdocvw: Abort pending tasks on DocHost destruction. --- dlls/shdocvw/dochost.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c index 407bbf9..97e5f77 100644 --- a/dlls/shdocvw/dochost.c +++ b/dlls/shdocvw/dochost.c @@ -62,6 +62,16 @@ LRESULT process_dochost_tasks(DocHost *This) return 0; } +static void abort_dochost_tasks(DocHost *This) +{ + task_header_t *task, *cursor; + + LIST_FOR_EACH_ENTRY_SAFE(task, cursor, &This->task_queue, task_header_t, entry) { + list_remove(&task->entry); + task->destr(task); + } +} + static void notif_complete(DocHost *This, DISPID dispid) { DISPPARAMS dispparams; @@ -876,6 +886,7 @@ void DocHost_Init(DocHost *This, IDispatch *disp, const IDocHostContainerVtbl* c void DocHost_Release(DocHost *This) { + abort_dochost_tasks(This); release_dochost_client(This); DocHost_ClientSite_Release(This);
1
0
0
0
Jacek Caban : shdocvw: Store task list in DocHost object instead of using LPARAM.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: 826f7c0c759c647ea0be757fa2543f2b71c2c32c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=826f7c0c759c647ea0be757fa…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu May 26 17:01:42 2011 +0200 shdocvw: Store task list in DocHost object instead of using LPARAM. --- dlls/shdocvw/dochost.c | 27 +++++++++++++++++---------- dlls/shdocvw/iexplore.c | 2 +- dlls/shdocvw/oleobject.c | 2 +- dlls/shdocvw/shdocvw.h | 5 ++++- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c index 6d6c1e6..407bbf9 100644 --- a/dlls/shdocvw/dochost.c +++ b/dlls/shdocvw/dochost.c @@ -33,26 +33,32 @@ static ATOM doc_view_atom = 0; void push_dochost_task(DocHost *This, task_header_t *task, task_proc_t proc, task_destr_t destr, BOOL send) { + BOOL is_empty; + task->proc = proc; task->destr = destr; - /* FIXME: Don't use lParam */ + is_empty = list_empty(&This->task_queue); + list_add_tail(&This->task_queue, &task->entry); + if(send) - SendMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, (LPARAM)task); - else - PostMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, (LPARAM)task); + SendMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, 0); + else if(is_empty) + PostMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, 0); } -LRESULT process_dochost_task(DocHost *This, LPARAM lparam) +LRESULT process_dochost_tasks(DocHost *This) { - task_header_t *task = (task_header_t*)lparam; + task_header_t *task; - task->proc(This, task); + while(!list_empty(&This->task_queue)) { + task = LIST_ENTRY(This->task_queue.next, task_header_t, entry); + list_remove(&task->entry); - if(task->destr) + task->proc(This, task); task->destr(task); - else - heap_free(task); + } + return 0; } @@ -860,6 +866,7 @@ void DocHost_Init(DocHost *This, IDispatch *disp, const IDocHostContainerVtbl* c This->container_vtbl = container; This->ready_state = READYSTATE_UNINITIALIZED; + list_init(&This->task_queue); DocHost_ClientSite_Init(This); DocHost_Frame_Init(This); diff --git a/dlls/shdocvw/iexplore.c b/dlls/shdocvw/iexplore.c index f079e62..0ad1e89 100644 --- a/dlls/shdocvw/iexplore.c +++ b/dlls/shdocvw/iexplore.c @@ -649,7 +649,7 @@ ie_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) case WM_NOTIFY: return iewnd_OnNotify(This, wparam, lparam); case WM_DOCHOSTTASK: - return process_dochost_task(&This->doc_host->doc_host, lparam); + return process_dochost_tasks(&This->doc_host->doc_host); case WM_UPDATEADDRBAR: return update_addrbar(This, lparam); } diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c index df06028..b116486 100644 --- a/dlls/shdocvw/oleobject.c +++ b/dlls/shdocvw/oleobject.c @@ -63,7 +63,7 @@ static LRESULT WINAPI shell_embedding_proc(HWND hwnd, UINT msg, WPARAM wParam, L case WM_SIZE: return resize_window(This, LOWORD(lParam), HIWORD(lParam)); case WM_DOCHOSTTASK: - return process_dochost_task(&This->doc_host, lParam); + return process_dochost_tasks(&This->doc_host); } return DefWindowProcW(hwnd, msg, wParam, lParam); diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index 118dafb..b127ec3 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -83,6 +83,7 @@ typedef void (*task_proc_t)(DocHost*, struct _task_header_t*); typedef void (*task_destr_t)(struct _task_header_t*); typedef struct _task_header_t { + struct list entry; task_proc_t proc; task_destr_t destr; } task_header_t; @@ -126,6 +127,8 @@ struct DocHost { HWND hwnd; HWND frame_hwnd; + struct list task_queue; + LPOLESTR url; VARIANT_BOOL silent; @@ -247,7 +250,7 @@ void handle_navigation_error(DocHost*,HRESULT,BSTR,IHTMLWindow2*) DECLSPEC_HIDDE #define WM_DOCHOSTTASK (WM_USER+0x300) void push_dochost_task(DocHost*,task_header_t*,task_proc_t,task_destr_t,BOOL) DECLSPEC_HIDDEN; -LRESULT process_dochost_task(DocHost*,LPARAM) DECLSPEC_HIDDEN; +LRESULT process_dochost_tasks(DocHost*) DECLSPEC_HIDDEN; HRESULT InternetExplorer_Create(IUnknown*,REFIID,void**) DECLSPEC_HIDDEN; void InternetExplorer_WebBrowser_Init(InternetExplorer*) DECLSPEC_HIDDEN;
1
0
0
0
Jacek Caban : shdocvw: Use task destructors for releasing task params.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: d9f49ba22368f6feefa9e3b09f31300f3955b864 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d9f49ba22368f6feefa9e3b09…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu May 26 17:01:31 2011 +0200 shdocvw: Use task destructors for releasing task params. --- dlls/shdocvw/dochost.c | 27 ++++++++++++++++++----- dlls/shdocvw/navigate.c | 54 ++++++++++++++++++++++++++++++---------------- dlls/shdocvw/shdocvw.h | 4 ++- 3 files changed, 59 insertions(+), 26 deletions(-) diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c index 301ea32..6d6c1e6 100644 --- a/dlls/shdocvw/dochost.c +++ b/dlls/shdocvw/dochost.c @@ -31,9 +31,10 @@ DEFINE_OLEGUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0); static ATOM doc_view_atom = 0; -void push_dochost_task(DocHost *This, task_header_t *task, task_proc_t proc, BOOL send) +void push_dochost_task(DocHost *This, task_header_t *task, task_proc_t proc, task_destr_t destr, BOOL send) { task->proc = proc; + task->destr = destr; /* FIXME: Don't use lParam */ if(send) @@ -48,7 +49,10 @@ LRESULT process_dochost_task(DocHost *This, LPARAM lparam) task->proc(This, task); - heap_free(task); + if(task->destr) + task->destr(task); + else + heap_free(task); return 0; } @@ -185,14 +189,20 @@ typedef struct { READYSTATE ready_state; } ready_state_task_t; +static void ready_state_task_destr(task_header_t *_task) +{ + ready_state_task_t *task = (ready_state_task_t*)_task; + + IUnknown_Release(task->doc); + heap_free(task); +} + static void ready_state_proc(DocHost *This, task_header_t *_task) { ready_state_task_t *task = (ready_state_task_t*)_task; if(task->doc == This->document) update_ready_state(This, task->ready_state); - - IUnknown_Release(task->doc); } static void push_ready_state_task(DocHost *This, READYSTATE ready_state) @@ -203,7 +213,12 @@ static void push_ready_state_task(DocHost *This, READYSTATE ready_state) task->doc = This->document; task->ready_state = ready_state; - push_dochost_task(This, &task->header, ready_state_proc, FALSE); + push_dochost_task(This, &task->header, ready_state_proc, ready_state_task_destr, FALSE); +} + +static void object_available_task_destr(task_header_t *task) +{ + heap_free(task); } static void object_available_proc(DocHost *This, task_header_t *task) @@ -242,7 +257,7 @@ HRESULT dochost_object_available(DocHost *This, IUnknown *doc) /* FIXME: Call SetAdvise */ task = heap_alloc(sizeof(*task)); - push_dochost_task(This, task, object_available_proc, FALSE); + push_dochost_task(This, task, object_available_proc, object_available_task_destr, FALSE); hres = get_doc_ready_state(This, &ready_state); if(SUCCEEDED(hres)) { diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c index 6b78870..32af0f1 100644 --- a/dlls/shdocvw/navigate.c +++ b/dlls/shdocvw/navigate.c @@ -674,15 +674,15 @@ typedef struct { BOOL async_notif; } task_doc_navigate_t; -static HRESULT free_doc_navigate_task(task_doc_navigate_t *task, BOOL free_task) +static void doc_navigate_task_destr(task_header_t *t) { + task_doc_navigate_t *task = (task_doc_navigate_t*)t; + SysFreeString(task->url); SysFreeString(task->headers); if(task->post_data) SafeArrayDestroy(task->post_data); - if(free_task) - heap_free(task); - return E_OUTOFMEMORY; + heap_free(task); } static void doc_navigate_proc(DocHost *This, task_header_t *t) @@ -691,15 +691,16 @@ static void doc_navigate_proc(DocHost *This, task_header_t *t) IHTMLPrivateWindow *priv_window; HRESULT hres; - if(!This->doc_navigate) + if(!This->doc_navigate) { + ERR("Skip nav\n"); return; + } if(task->async_notif) { VARIANT_BOOL cancel = VARIANT_FALSE; on_before_navigate2(This, task->url, task->post_data, task->headers, &cancel); if(cancel) { TRACE("Navigation calnceled\n"); - free_doc_navigate_task(task, FALSE); return; } } @@ -711,8 +712,6 @@ static void doc_navigate_proc(DocHost *This, task_header_t *t) }else { WARN("Could not get IHTMLPrivateWindow iface: %08x\n", hres); } - - free_doc_navigate_task(task, FALSE); } static HRESULT async_doc_navigate(DocHost *This, LPCWSTR url, LPCWSTR headers, PBYTE post_data, ULONG post_data_size, @@ -720,24 +719,33 @@ static HRESULT async_doc_navigate(DocHost *This, LPCWSTR url, LPCWSTR headers, P { task_doc_navigate_t *task; + TRACE("%s\n", debugstr_w(url)); + task = heap_alloc_zero(sizeof(*task)); if(!task) return E_OUTOFMEMORY; task->url = SysAllocString(url); - if(!task->url) - return free_doc_navigate_task(task, TRUE); + if(!task->url) { + doc_navigate_task_destr(&task->header); + return E_OUTOFMEMORY; + } if(headers) { task->headers = SysAllocString(headers); - if(!task->headers) - return free_doc_navigate_task(task, TRUE); + if(!task->headers) { + doc_navigate_task_destr(&task->header); + return E_OUTOFMEMORY; + } } if(post_data) { task->post_data = SafeArrayCreateVector(VT_UI1, 0, post_data_size); - if(!task->post_data) - return free_doc_navigate_task(task, TRUE); + if(!task->post_data) { + doc_navigate_task_destr(&task->header); + return E_OUTOFMEMORY; + } + memcpy(task->post_data->pvData, post_data, post_data_size); } @@ -747,13 +755,13 @@ static HRESULT async_doc_navigate(DocHost *This, LPCWSTR url, LPCWSTR headers, P on_before_navigate2(This, task->url, task->post_data, task->headers, &cancel); if(cancel) { TRACE("Navigation calnceled\n"); - free_doc_navigate_task(task, TRUE); + doc_navigate_task_destr(&task->header); return S_OK; } } task->async_notif = async_notif; - push_dochost_task(This, &task->header, doc_navigate_proc, FALSE); + push_dochost_task(This, &task->header, doc_navigate_proc, doc_navigate_task_destr, FALSE); return S_OK; } @@ -802,6 +810,14 @@ typedef struct { BindStatusCallback *bsc; } task_navigate_bsc_t; +static void navigate_bsc_task_destr(task_header_t *t) +{ + task_navigate_bsc_t *task = (task_navigate_bsc_t*)t; + + IBindStatusCallback_Release(&task->bsc->IBindStatusCallback_iface); + heap_free(task); +} + static void navigate_bsc_proc(DocHost *This, task_header_t *t) { task_navigate_bsc_t *task = (task_navigate_bsc_t*)t; @@ -810,8 +826,6 @@ static void navigate_bsc_proc(DocHost *This, task_header_t *t) create_doc_view_hwnd(This); navigate_bsc(This, task->bsc, NULL); - - IBindStatusCallback_Release(&task->bsc->IBindStatusCallback_iface); } @@ -868,7 +882,7 @@ HRESULT navigate_url(DocHost *This, LPCWSTR url, const VARIANT *Flags, task = heap_alloc(sizeof(*task)); task->bsc = create_callback(This, url, post_data, post_data_len, headers); - push_dochost_task(This, &task->header, navigate_bsc_proc, This->url == NULL); + push_dochost_task(This, &task->header, navigate_bsc_proc, navigate_bsc_task_destr, This->url == NULL); } if(post_data) @@ -889,6 +903,8 @@ static HRESULT navigate_hlink(DocHost *This, IMoniker *mon, IBindCtx *bindctx, DWORD bindf = 0; HRESULT hres; + TRACE("\n"); + hres = IMoniker_GetDisplayName(mon, 0, NULL, &url); if(FAILED(hres)) FIXME("GetDisplayName failed: %08x\n", hres); diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index fd234d8..118dafb 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -80,9 +80,11 @@ typedef struct { struct _task_header_t; typedef void (*task_proc_t)(DocHost*, struct _task_header_t*); +typedef void (*task_destr_t)(struct _task_header_t*); typedef struct _task_header_t { task_proc_t proc; + task_destr_t destr; } task_header_t; typedef struct _IDocHostContainerVtbl @@ -244,7 +246,7 @@ HRESULT get_location_url(DocHost*,BSTR*) DECLSPEC_HIDDEN; void handle_navigation_error(DocHost*,HRESULT,BSTR,IHTMLWindow2*) DECLSPEC_HIDDEN; #define WM_DOCHOSTTASK (WM_USER+0x300) -void push_dochost_task(DocHost*,task_header_t*,task_proc_t,BOOL) DECLSPEC_HIDDEN; +void push_dochost_task(DocHost*,task_header_t*,task_proc_t,task_destr_t,BOOL) DECLSPEC_HIDDEN; LRESULT process_dochost_task(DocHost*,LPARAM) DECLSPEC_HIDDEN; HRESULT InternetExplorer_Create(IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
1
0
0
0
Stefan Dösinger : wined3d: Call frag_pipe-> enable_extension under the GL lock.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: dda91ac02ad6b0b6a167f419692268506f27d8d6 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=dda91ac02ad6b0b6a167f4196…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Tue May 24 23:36:16 2011 +0200 wined3d: Call frag_pipe->enable_extension under the GL lock. --- dlls/wined3d/arb_program_shader.c | 4 +--- dlls/wined3d/ati_fragment_shader.c | 4 +--- dlls/wined3d/context.c | 22 ++++++++++++++-------- dlls/wined3d/nvidia_texture_shader.c | 4 +--- dlls/wined3d/state.c | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 55435d4..ee5bf86 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -5504,10 +5504,9 @@ struct arbfp_ffp_desc unsigned int num_textures_used; }; -/* Context activation is done by the caller. */ +/* Context activation and GL locking are done by the caller. */ static void arbfp_enable(BOOL enable) { - ENTER_GL(); if(enable) { glEnable(GL_FRAGMENT_PROGRAM_ARB); checkGLcall("glEnable(GL_FRAGMENT_PROGRAM_ARB)"); @@ -5515,7 +5514,6 @@ static void arbfp_enable(BOOL enable) glDisable(GL_FRAGMENT_PROGRAM_ARB); checkGLcall("glDisable(GL_FRAGMENT_PROGRAM_ARB)"); } - LEAVE_GL(); } static HRESULT arbfp_alloc(struct wined3d_device *device) diff --git a/dlls/wined3d/ati_fragment_shader.c b/dlls/wined3d/ati_fragment_shader.c index d04ce20..0281757 100644 --- a/dlls/wined3d/ati_fragment_shader.c +++ b/dlls/wined3d/ati_fragment_shader.c @@ -1054,10 +1054,9 @@ static const struct StateEntryTemplate atifs_fragmentstate_template[] = { {0 /* Terminate */, { 0, 0 }, WINED3D_GL_EXT_NONE }, }; -/* Context activation is done by the caller. */ +/* Context activation and GL locking are done by the caller. */ static void atifs_enable(BOOL enable) { - ENTER_GL(); if(enable) { glEnable(GL_FRAGMENT_SHADER_ATI); checkGLcall("glEnable(GL_FRAGMENT_SHADER_ATI)"); @@ -1065,7 +1064,6 @@ static void atifs_enable(BOOL enable) glDisable(GL_FRAGMENT_SHADER_ATI); checkGLcall("glDisable(GL_FRAGMENT_SHADER_ATI)"); } - LEAVE_GL(); } static void atifs_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index f5d237e..98f1f7d 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -1649,11 +1649,10 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, { GL_EXTCALL(glProvokingVertexEXT(GL_FIRST_VERTEX_CONVENTION_EXT)); } + device->frag_pipe->enable_extension(TRUE); LEAVE_GL(); - device->frag_pipe->enable_extension(TRUE); - TRACE("Created context %p.\n", ret); return ret; @@ -1913,14 +1912,13 @@ static void SetupForBlit(struct wined3d_device *device, struct wined3d_context * Context_MarkStateDirty(context, STATE_RENDER(WINED3DRS_CLIPPING), StateTable); set_blit_dimension(width, height); + device->frag_pipe->enable_extension(FALSE); LEAVE_GL(); context->blit_w = width; context->blit_h = height; Context_MarkStateDirty(context, STATE_VIEWPORT, StateTable); Context_MarkStateDirty(context, STATE_TRANSFORM(WINED3DTS_PROJECTION), StateTable); - - device->frag_pipe->enable_extension(FALSE); } /* Do not call while under the GL lock. */ @@ -2208,6 +2206,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, struct wined3d_d LEAVE_GL(); } + ENTER_GL(); if (context->last_was_blit) { device->frag_pipe->enable_extension(TRUE); @@ -2216,7 +2215,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, struct wined3d_d /* Blending and clearing should be orthogonal, but tests on the nvidia * driver show that disabling blending when clearing improves the clearing * performance incredibly. */ - ENTER_GL(); glDisable(GL_BLEND); glEnable(GL_SCISSOR_TEST); checkGLcall("glEnable GL_SCISSOR_TEST"); @@ -2286,12 +2284,12 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de LEAVE_GL(); } + ENTER_GL(); if (context->last_was_blit) { device->frag_pipe->enable_extension(TRUE); } - ENTER_GL(); for (i = 0; i < context->numDirtyEntries; ++i) { DWORD rep = context->dirtyArray[i]; @@ -2381,8 +2379,16 @@ struct wined3d_context *context_acquire(struct wined3d_device *device, struct wi if (context != current_context) { - if (!context_set_current(context)) ERR("Failed to activate the new context.\n"); - else device->frag_pipe->enable_extension(!context->last_was_blit); + if (!context_set_current(context)) + { + ERR("Failed to activate the new context.\n"); + } + else + { + ENTER_GL(); + device->frag_pipe->enable_extension(!context->last_was_blit); + LEAVE_GL(); + } if (context->vshader_const_dirty) { diff --git a/dlls/wined3d/nvidia_texture_shader.c b/dlls/wined3d/nvidia_texture_shader.c index 5d584f0..f20fc7a 100644 --- a/dlls/wined3d/nvidia_texture_shader.c +++ b/dlls/wined3d/nvidia_texture_shader.c @@ -623,10 +623,9 @@ static void nvrc_texfactor(DWORD state, struct wined3d_stateblock *stateblock, s /* Context activation is done by the caller. */ static void nvrc_enable(BOOL enable) {} -/* Context activation is done by the caller. */ +/* Context activation and GL locking are done by the caller. */ static void nvts_enable(BOOL enable) { - ENTER_GL(); if(enable) { glEnable(GL_TEXTURE_SHADER_NV); checkGLcall("glEnable(GL_TEXTURE_SHADER_NV)"); @@ -634,7 +633,6 @@ static void nvts_enable(BOOL enable) glDisable(GL_TEXTURE_SHADER_NV); checkGLcall("glDisable(GL_TEXTURE_SHADER_NV)"); } - LEAVE_GL(); } static void nvrc_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index 6ce6938..a2c197b 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -5578,7 +5578,7 @@ static const struct StateEntryTemplate ffp_fragmentstate_template[] = { {0 /* Terminate */, { 0, 0 }, WINED3D_GL_EXT_NONE }, }; -/* Context activation is done by the caller. */ +/* Context activation and GL locking are done by the caller. */ static void ffp_enable(BOOL enable) {} static void ffp_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps)
1
0
0
0
Jörg Höhle : mmsystem: MCI_UnMapMsg16To32W need not return a value.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: dbd058a85a38b11f6c1b690762bdf4ec61a2d708 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=dbd058a85a38b11f6c1b69076…
Author: Jörg Höhle <hoehle(a)users.sourceforge.net> Date: Wed May 25 17:43:57 2011 +0200 mmsystem: MCI_UnMapMsg16To32W need not return a value. --- dlls/mmsystem.dll16/mci16.c | 66 ++++++------------------------------------ 1 files changed, 10 insertions(+), 56 deletions(-) diff --git a/dlls/mmsystem.dll16/mci16.c b/dlls/mmsystem.dll16/mci16.c index d39a047..ad27405 100644 --- a/dlls/mmsystem.dll16/mci16.c +++ b/dlls/mmsystem.dll16/mci16.c @@ -385,38 +385,9 @@ static MMSYSTEM_MapType MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l /************************************************************************** * MCI_UnMapMsg16To32W [internal] */ -static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR lParam, DWORD result) +static void MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR lParam, DWORD result) { switch (wMsg) { - /* case MCI_CAPTURE */ - case MCI_CLOSE: - case MCI_CLOSE_DRIVER: - case MCI_CONFIGURE: - case MCI_COPY: - case MCI_CUE: - case MCI_CUT: - case MCI_DELETE: - case MCI_GETDEVCAPS: - /* case MCI_INDEX: */ - /* case MCI_MARK: */ - /* case MCI_MONITOR: */ - case MCI_PASTE: - case MCI_PAUSE: - case MCI_PLAY: - case MCI_REALIZE: - case MCI_RECORD: - case MCI_RESUME: - case MCI_SEEK: - case MCI_SET: - /* case MCI_SETTIMECODE:*/ - /* case MCI_SIGNAL:*/ - case MCI_SPIN: - case MCI_STEP: - case MCI_STOP: - /* case MCI_UNDO: */ - case MCI_UPDATE: - return MMSYSTEM_MAP_OK; - case MCI_WHERE: case MCI_FREEZE: case MCI_UNFREEZE: @@ -431,7 +402,7 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR mdrp16->rc.bottom = mdrp32->rc.bottom; HeapFree(GetProcessHeap(), 0, base); } - return MMSYSTEM_MAP_OK; + break; case MCI_STATUS: if (lParam) { LPMCI_DGV_STATUS_PARMSW mdsp32w = (LPMCI_DGV_STATUS_PARMSW)lParam; @@ -441,25 +412,24 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR HeapFree(GetProcessHeap(), 0, (LPVOID)mdsp32w->lpstrDrive); HeapFree(GetProcessHeap(), 0, base); } - return MMSYSTEM_MAP_OK; + break; case MCI_WINDOW: if (lParam) { LPMCI_OVLY_WINDOW_PARMSW mowp32w = (LPMCI_OVLY_WINDOW_PARMSW)lParam; HeapFree(GetProcessHeap(), 0, (LPVOID)mowp32w->lpstrText); HeapFree(GetProcessHeap(), 0, mowp32w); } - return MMSYSTEM_MAP_OK; - + break; case MCI_BREAK: HeapFree(GetProcessHeap(), 0, (LPVOID)lParam); - return MMSYSTEM_MAP_OK; + break; case MCI_ESCAPE: if (lParam) { LPMCI_VD_ESCAPE_PARMSW mvep32W = (LPMCI_VD_ESCAPE_PARMSW)lParam; HeapFree(GetProcessHeap(), 0, (LPVOID)mvep32W->lpstrCommand); HeapFree(GetProcessHeap(), 0, (LPVOID)lParam); } - return MMSYSTEM_MAP_OK; + break; case MCI_INFO: if (lParam) { LPMCI_INFO_PARMSW mip32w = (LPMCI_INFO_PARMSW)lParam; @@ -475,7 +445,7 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR HeapFree(GetProcessHeap(), 0, mip32w->lpstrReturn); HeapFree(GetProcessHeap(), 0, base); } - return MMSYSTEM_MAP_OK; + break; case MCI_SYSINFO: if (lParam) { MCI_SYSINFO_PARMSW *msip32w = (MCI_SYSINFO_PARMSW *)lParam; @@ -497,14 +467,14 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR HeapFree(GetProcessHeap(), 0, msip32w->lpstrReturn); HeapFree(GetProcessHeap(), 0, base); } - return MMSYSTEM_MAP_OK; + break; case MCI_SOUND: if (lParam) { LPMCI_SOUND_PARMSW msp32W = (LPMCI_SOUND_PARMSW)lParam; HeapFree(GetProcessHeap(), 0, (LPVOID)msp32W->lpstrSoundName); HeapFree(GetProcessHeap(), 0, (LPVOID)lParam); } - return MMSYSTEM_MAP_OK; + break; case MCI_OPEN: case MCI_OPEN_DRIVER: if (lParam) { @@ -521,26 +491,10 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrAlias); HeapFree(GetProcessHeap(), 0, base); } - return MMSYSTEM_MAP_OK; - case DRV_LOAD: - case DRV_ENABLE: - case DRV_OPEN: - case DRV_CLOSE: - case DRV_DISABLE: - case DRV_FREE: - case DRV_CONFIGURE: - case DRV_QUERYCONFIGURE: - case DRV_INSTALL: - case DRV_REMOVE: - case DRV_EXITSESSION: - case DRV_EXITAPPLICATION: - case DRV_POWER: - FIXME("This is a hack\n"); - return MMSYSTEM_MAP_OK; + break; default: FIXME("Map/Unmap internal error on msg=%s\n", MCI_MessageToString(wMsg)); } - return MMSYSTEM_MAP_MSGERROR; } /* ###################################################
1
0
0
0
Jörg Höhle : mmsystem: Fix some MCI mappings.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: bc9b9d53c12829d53b6b4fb3548a209cda19cc76 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=bc9b9d53c12829d53b6b4fb35…
Author: Jörg Höhle <hoehle(a)users.sourceforge.net> Date: Fri Apr 15 21:26:32 2011 +0200 mmsystem: Fix some MCI mappings. --- dlls/mmsystem.dll16/mci16.c | 53 ++++++++++++++++++++---------------------- 1 files changed, 25 insertions(+), 28 deletions(-) diff --git a/dlls/mmsystem.dll16/mci16.c b/dlls/mmsystem.dll16/mci16.c index 3d9c73f..d39a047 100644 --- a/dlls/mmsystem.dll16/mci16.c +++ b/dlls/mmsystem.dll16/mci16.c @@ -206,13 +206,15 @@ static MMSYSTEM_MapType MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l mdsp32w->dwTrack = mdsp16->dwTrack; if (dwFlags & MCI_DGV_STATUS_DISKSPACE) mdsp32w->lpstrDrive = MCI_strdupAtoW(MapSL(mdsp16->lpstrDrive)); - mdsp32w->dwReference = mdsp16->dwReference; + if (dwFlags & MCI_DGV_STATUS_REFERENCE) + mdsp32w->dwReference = mdsp16->dwReference; *lParam = (DWORD)mdsp32w; } else { return MMSYSTEM_MAP_NOMEM; } } else { *lParam = (DWORD)MapSL(*lParam); + return MMSYSTEM_MAP_OK; } } return MMSYSTEM_MAP_OKMEM; @@ -263,18 +265,17 @@ static MMSYSTEM_MapType MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l return MMSYSTEM_MAP_OKMEM; case MCI_INFO: { - LPMCI_INFO_PARMSW mip32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_OPEN_PARMS16) + sizeof(MCI_INFO_PARMSW)); - LPMCI_INFO_PARMS16 mip16 = MapSL(*lParam); + LPMCI_DGV_INFO_PARMSW mip32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_DGV_INFO_PARMS16) + sizeof(MCI_DGV_INFO_PARMSW)); + LPMCI_DGV_INFO_PARMS16 mip16 = MapSL(*lParam); - /* FIXME this is wrong if device is of type - * MCI_DEVTYPE_DIGITAL_VIDEO, some members are not mapped - */ if (mip32w) { - *(LPMCI_INFO_PARMS16*)(mip32w) = mip16; - mip32w = (LPMCI_INFO_PARMSW)((char*)mip32w + sizeof(LPMCI_INFO_PARMS16)); + *(LPMCI_DGV_INFO_PARMS16*)(mip32w) = mip16; + mip32w = (LPMCI_DGV_INFO_PARMSW)((char*)mip32w + sizeof(LPMCI_DGV_INFO_PARMS16)); mip32w->dwCallback = mip16->dwCallback; mip32w->lpstrReturn = HeapAlloc(GetProcessHeap(), 0, mip16->dwRetSize * sizeof(WCHAR)); - mip32w->dwRetSize = mip16->dwRetSize * sizeof(WCHAR); + mip32w->dwRetSize = mip16->dwRetSize; + if (dwFlags & MCI_DGV_INFO_ITEM) + mip32w->dwItem = mip16->dwItem; } else { return MMSYSTEM_MAP_NOMEM; } @@ -284,7 +285,7 @@ static MMSYSTEM_MapType MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l case MCI_OPEN: case MCI_OPEN_DRIVER: { - LPMCI_OPEN_PARMSW mop32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_OPEN_PARMS16) + sizeof(MCI_OPEN_PARMSW) + 2 * sizeof(DWORD)); + LPMCI_OPEN_PARMSW mop32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_OPEN_PARMS16) + sizeof(MCI_ANIM_OPEN_PARMSW)); LPMCI_OPEN_PARMS16 mop16 = MapSL(*lParam); if (mop32w) { @@ -312,7 +313,8 @@ static MMSYSTEM_MapType MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l * to fetch uDevType. When, this is known, the mapping for sending the * MCI_OPEN_DRIVER shall be done depending on uDevType. */ - memcpy(mop32w + 1, mop16 + 1, 2 * sizeof(DWORD)); + if (HIWORD(dwFlags)) + memcpy(mop32w + 1, mop16 + 1, sizeof(MCI_ANIM_OPEN_PARMS16) - sizeof(MCI_OPEN_PARMS16)); } else { return MMSYSTEM_MAP_NOMEM; } @@ -383,7 +385,7 @@ static MMSYSTEM_MapType MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l /************************************************************************** * MCI_UnMapMsg16To32W [internal] */ -static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR lParam) +static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR lParam, DWORD result) { switch (wMsg) { /* case MCI_CAPTURE */ @@ -423,7 +425,6 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR LPMCI_DGV_RECT_PARMS mdrp32 = (LPMCI_DGV_RECT_PARMS)lParam; char *base = (char*)lParam - sizeof(LPMCI_DGV_RECT_PARMS16); LPMCI_DGV_RECT_PARMS16 mdrp16 = *(LPMCI_DGV_RECT_PARMS16*)base; - mdrp16->dwCallback = mdrp32->dwCallback; mdrp16->rc.left = mdrp32->rc.left; mdrp16->rc.top = mdrp32->rc.top; mdrp16->rc.right = mdrp32->rc.right; @@ -432,15 +433,11 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR } return MMSYSTEM_MAP_OK; case MCI_STATUS: - if (lParam && (dwFlags & (MCI_DGV_STATUS_REFERENCE | MCI_DGV_STATUS_DISKSPACE))) { + if (lParam) { LPMCI_DGV_STATUS_PARMSW mdsp32w = (LPMCI_DGV_STATUS_PARMSW)lParam; char *base = (char*)lParam - sizeof(LPMCI_DGV_STATUS_PARMS16); LPMCI_DGV_STATUS_PARMS16 mdsp16 = *(LPMCI_DGV_STATUS_PARMS16*)base; - mdsp16->dwCallback = mdsp32w->dwCallback; mdsp16->dwReturn = mdsp32w->dwReturn; - mdsp16->dwItem = mdsp32w->dwItem; - mdsp16->dwTrack = mdsp32w->dwTrack; - mdsp16->dwReference = mdsp32w->dwReference; HeapFree(GetProcessHeap(), 0, (LPVOID)mdsp32w->lpstrDrive); HeapFree(GetProcessHeap(), 0, base); } @@ -469,10 +466,12 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR char *base = (char*)lParam - sizeof(LPMCI_INFO_PARMS16); LPMCI_INFO_PARMS16 mip16 = *(LPMCI_INFO_PARMS16*)base; - WideCharToMultiByte(CP_ACP, 0, - mip32w->lpstrReturn, mip32w->dwRetSize / sizeof(WCHAR), - MapSL(mip16->lpstrReturn), mip16->dwRetSize, - NULL, NULL); + if (result == MMSYSERR_NOERROR) + WideCharToMultiByte(CP_ACP, 0, + mip32w->lpstrReturn, mip32w->dwRetSize, + MapSL(mip16->lpstrReturn), mip16->dwRetSize, + NULL, NULL); + mip16->dwRetSize = mip32w->dwRetSize; /* never update prior to NT? */ HeapFree(GetProcessHeap(), 0, mip32w->lpstrReturn); HeapFree(GetProcessHeap(), 0, base); } @@ -488,7 +487,7 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR *quantity = *(DWORD *)msip32w->lpstrReturn; } - else { + else if (result == MMSYSERR_NOERROR) { WideCharToMultiByte(CP_ACP, 0, msip32w->lpstrReturn, msip32w->dwRetSize, MapSL(msip16->lpstrReturn), msip16->dwRetSize, @@ -520,8 +519,7 @@ static MMSYSTEM_MapType MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrElementName); if( ( dwFlags & MCI_OPEN_ALIAS)) HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrAlias); - if (!HeapFree(GetProcessHeap(), 0, base)) - FIXME("bad free line=%d\n", __LINE__); + HeapFree(GetProcessHeap(), 0, base); } return MMSYSTEM_MAP_OK; case DRV_LOAD: @@ -750,18 +748,17 @@ DWORD WINAPI mciSendCommand16(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, DWORD switch (res = MCI_MapMsg16To32W(wMsg, dwParam1, &dwParam2)) { case MMSYSTEM_MAP_MSGERROR: - TRACE("%s not handled yet\n", MCI_MessageToString(wMsg)); dwRet = MCIERR_DRIVER_INTERNAL; break; case MMSYSTEM_MAP_NOMEM: - TRACE("Problem mapping %s from 16 to 32a\n", MCI_MessageToString(wMsg)); + TRACE("Problem mapping %s from 16 to 32\n", MCI_MessageToString(wMsg)); dwRet = MCIERR_OUT_OF_MEMORY; break; case MMSYSTEM_MAP_OK: case MMSYSTEM_MAP_OKMEM: dwRet = mciSendCommandW(wDevID, wMsg, dwParam1, dwParam2); if (res == MMSYSTEM_MAP_OKMEM) - MCI_UnMapMsg16To32W(wMsg, dwParam1, dwParam2); + MCI_UnMapMsg16To32W(wMsg, dwParam1, dwParam2, dwRet); break; } }
1
0
0
0
Alexander Morozov : mshtml/tests: Fix a typo.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: f8679cfa2f3b65e68b45bdc73f499a86a57053d5 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f8679cfa2f3b65e68b45bdc73…
Author: Alexander Morozov <amorozov(a)etersoft.ru> Date: Thu May 26 18:03:56 2011 +0400 mshtml/tests: Fix a typo. --- dlls/mshtml/tests/dom.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index dcd2e21..9c9c2f8 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -5879,7 +5879,7 @@ static void test_window(IHTMLDocument2 *doc) test_disp((IUnknown*)doc2, &DIID_DispHTMLDocument, "[object]"); test_ifaces((IUnknown*)doc, doc_obj_iids); - test_disp((IUnknown*)doc2, &DIID_DispHTMLDocument, "[object]"); + test_disp((IUnknown*)doc, &DIID_DispHTMLDocument, "[object]"); unk = (void*)0xdeadbeef; hres = IHTMLDocument2_QueryInterface(doc2, &IID_ICustomDoc, (void**)&unk);
1
0
0
0
Jacek Caban : urlmon: Avoid LPWSTR to LPCWSTR cast.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: 2d1bc5b861b5c195704d204b068c27b9d40e1bc1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2d1bc5b861b5c195704d204b0…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu May 26 15:08:28 2011 +0200 urlmon: Avoid LPWSTR to LPCWSTR cast. --- dlls/urlmon/http.c | 37 ++++++++++++++++++------------------- 1 files changed, 18 insertions(+), 19 deletions(-) diff --git a/dlls/urlmon/http.c b/dlls/urlmon/http.c index 846c790..5a606ca 100644 --- a/dlls/urlmon/http.c +++ b/dlls/urlmon/http.c @@ -36,7 +36,7 @@ typedef struct { BOOL https; IHttpNegotiate *http_negotiate; - LPWSTR full_header; + WCHAR *full_header; LONG ref; } HttpProtocol; @@ -56,9 +56,8 @@ static inline HttpProtocol *impl_from_IWinInetHttpInfo(IWinInetHttpInfo *iface) return CONTAINING_RECORD(iface, HttpProtocol, IWinInetHttpInfo_iface); } -/* Default headers from native */ -static const WCHAR wszHeaders[] = {'A','c','c','e','p','t','-','E','n','c','o','d','i','n','g', - ':',' ','g','z','i','p',',',' ','d','e','f','l','a','t','e',0}; +static const WCHAR default_headersW[] = { + 'A','c','c','e','p','t','-','E','n','c','o','d','i','n','g',':',' ','g','z','i','p',',',' ','d','e','f','l','a','t','e',0}; static LPWSTR query_http_info(HttpProtocol *This, DWORD option) { @@ -277,7 +276,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, IUri *uri, DWORD reques LPOLESTR accept_mimes[257]; const WCHAR **accept_types; BYTE security_id[512]; - DWORD len = 0, port; + DWORD len, port; ULONG num, error; BOOL res, b; HRESULT hres; @@ -371,7 +370,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, IUri *uri, DWORD reques return hres; } - hres = IHttpNegotiate_BeginningTransaction(This->http_negotiate, url, wszHeaders, + hres = IHttpNegotiate_BeginningTransaction(This->http_negotiate, url, default_headersW, 0, &addl_header); SysFreeString(url); if(hres != S_OK) { @@ -380,18 +379,19 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, IUri *uri, DWORD reques return hres; } - if(addl_header) { - int len_addl_header = strlenW(addl_header); + len = addl_header ? strlenW(addl_header) : 0; - This->full_header = heap_alloc(len_addl_header*sizeof(WCHAR)+sizeof(wszHeaders)); - - lstrcpyW(This->full_header, addl_header); - lstrcpyW(&This->full_header[len_addl_header], wszHeaders); - CoTaskMemFree(addl_header); - }else { - This->full_header = (LPWSTR)wszHeaders; + This->full_header = heap_alloc(len*sizeof(WCHAR)+sizeof(default_headersW)); + if(!This->full_header) { + IServiceProvider_Release(service_provider); + return E_OUTOFMEMORY; } + if(len) + memcpy(This->full_header, addl_header, len*sizeof(WCHAR)); + CoTaskMemFree(addl_header); + memcpy(This->full_header+len, default_headersW, sizeof(default_headersW)); + hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate2, &IID_IHttpNegotiate2, (void **)&http_negotiate2); IServiceProvider_Release(service_provider); @@ -525,13 +525,12 @@ static void HttpProtocol_close_connection(Protocol *prot) if(This->http_negotiate) { IHttpNegotiate_Release(This->http_negotiate); - This->http_negotiate = 0; + This->http_negotiate = NULL; } if(This->full_header) { - if(This->full_header != wszHeaders) - heap_free(This->full_header); - This->full_header = 0; + heap_free(This->full_header); + This->full_header = NULL; } }
1
0
0
0
Jacek Caban : urlmon: Avoid multiple InternetQueryDataAvailable calls in pending state.
by Alexandre Julliard
26 May '11
26 May '11
Module: wine Branch: master Commit: dd61ebe6cf93f6d6ea270f64793a1348b3ce44d0 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=dd61ebe6cf93f6d6ea270f647…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu May 26 13:34:11 2011 +0200 urlmon: Avoid multiple InternetQueryDataAvailable calls in pending state. --- dlls/urlmon/protocol.c | 44 ++++++++++++++++++++++---------------------- 1 files changed, 22 insertions(+), 22 deletions(-) diff --git a/dlls/urlmon/protocol.c b/dlls/urlmon/protocol.c index 1b8b5e3..326564b 100644 --- a/dlls/urlmon/protocol.c +++ b/dlls/urlmon/protocol.c @@ -335,7 +335,7 @@ HRESULT protocol_continue(Protocol *protocol, PROTOCOLDATA *data) protocol->flags |= FLAG_FIRST_CONTINUE_COMPLETE; } - if(data->pData >= (LPVOID)BINDSTATUS_DOWNLOADINGDATA) { + if(data->pData >= (LPVOID)BINDSTATUS_DOWNLOADINGDATA && !protocol->available_bytes) { BOOL res; /* InternetQueryDataAvailable may immediately fork and perform its asynchronous @@ -367,33 +367,33 @@ HRESULT protocol_read(Protocol *protocol, void *buf, ULONG size, ULONG *read_ret return S_FALSE; } - if(!(protocol->flags & FLAG_REQUEST_COMPLETE)) { + if(!(protocol->flags & FLAG_REQUEST_COMPLETE) || !protocol->available_bytes) { *read_ret = 0; return E_PENDING; } - while(read < size) { - if(protocol->available_bytes) { - ULONG len; + while(read < size && protocol->available_bytes) { + ULONG len; - res = InternetReadFile(protocol->request, ((BYTE *)buf)+read, - protocol->available_bytes > size-read ? size-read : protocol->available_bytes, &len); - if(!res) { - WARN("InternetReadFile failed: %d\n", GetLastError()); - hres = INET_E_DOWNLOAD_FAILURE; - report_result(protocol, hres); - break; - } + res = InternetReadFile(protocol->request, ((BYTE *)buf)+read, + protocol->available_bytes > size-read ? size-read : protocol->available_bytes, &len); + if(!res) { + WARN("InternetReadFile failed: %d\n", GetLastError()); + hres = INET_E_DOWNLOAD_FAILURE; + report_result(protocol, hres); + break; + } - if(!len) { - all_data_read(protocol); - break; - } + if(!len) { + all_data_read(protocol); + break; + } + + read += len; + protocol->current_position += len; + protocol->available_bytes -= len; - read += len; - protocol->current_position += len; - protocol->available_bytes -= len; - }else { + if(!protocol->available_bytes) { /* InternetQueryDataAvailable may immediately fork and perform its asynchronous * read, so clear the flag _before_ calling so it does not incorrectly get cleared * after the status callback is called */
1
0
0
0
← Newer
1
...
9
10
11
12
13
14
15
...
95
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Results per page:
10
25
50
100
200