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
June
May
April
March
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
August 2009
----- 2025 -----
June 2025
May 2025
April 2025
March 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
4 participants
1042 discussions
Start a n
N
ew thread
Jacek Caban : jscript: Create Array objects from proper constructor.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 90af81f40534cb05b6f9684acd0d4fab4d949d99 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=90af81f40534cb05b6f9684ac…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Fri Aug 28 23:53:45 2009 +0200 jscript: Create Array objects from proper constructor. --- dlls/jscript/array.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index 704624e..2aea70b 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -872,7 +872,7 @@ static HRESULT alloc_array(script_ctx_t *ctx, DispatchEx *object_prototype, Arra if(object_prototype) hres = init_dispex(&array->dispex, ctx, &Array_info, object_prototype); else - hres = init_dispex_from_constr(&array->dispex, ctx, &Array_info, ctx->object_constr); + hres = init_dispex_from_constr(&array->dispex, ctx, &Array_info, ctx->array_constr); if(FAILED(hres)) { heap_free(array);
1
0
0
0
Jacek Caban : jscript: Use proper VARIANT_BOOL values in bool literals.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 73e192a6b3885b131f1284ebfea47a0b9a3b7ab5 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=73e192a6b3885b131f1284ebf…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Fri Aug 28 23:53:05 2009 +0200 jscript: Use proper VARIANT_BOOL values in bool literals. --- dlls/jscript/parser.y | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y index 748a06a..57f0744 100644 --- a/dlls/jscript/parser.y +++ b/dlls/jscript/parser.y @@ -812,8 +812,8 @@ Literal /* ECMA-262 3rd Edition 7.8.2 */ BooleanLiteral - : kTRUE { $$ = new_boolean_literal(ctx, TRUE); } - | kFALSE { $$ = new_boolean_literal(ctx, FALSE); } + : kTRUE { $$ = new_boolean_literal(ctx, VARIANT_TRUE); } + | kFALSE { $$ = new_boolean_literal(ctx, VARIANT_FALSE); } semicolon_opt : ';'
1
0
0
0
André Hentschel : wcmd: Ignore start and end quotes.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 765d9a1411cd09a4dca3955c85eb01c2df4eee43 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=765d9a1411cd09a4dca3955c8…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Fri Aug 28 18:34:32 2009 +0200 wcmd: Ignore start and end quotes. --- programs/cmd/builtins.c | 5 +++++ programs/cmd/wcmd.h | 1 + programs/cmd/wcmdmain.c | 2 +- 3 files changed, 7 insertions(+), 1 deletions(-) diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index b544a37..612e5d9 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -2072,6 +2072,8 @@ void WCMD_setshow_env (WCHAR *s) { s += 2; while (*s && *s==' ') s++; + if (*s=='\"') + WCMD_opt_s_strip_quotes(s); /* If no parameter, or no '=' sign, return an error */ if (!(*s) || ((p = strchrW (s, '=')) == NULL )) { @@ -2096,6 +2098,9 @@ void WCMD_setshow_env (WCHAR *s) { } else { DWORD gle; + + if (*s=='\"') + WCMD_opt_s_strip_quotes(s); p = strchrW (s, '='); if (p == NULL) { env = GetEnvironmentStrings (); diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 667b3b9..00bada2 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -100,6 +100,7 @@ WCHAR *WCMD_strtrim_leading_spaces (WCHAR *string); void WCMD_HandleTildaModifiers(WCHAR **start, WCHAR *forVariable, WCHAR *forValue, BOOL justFors); void WCMD_splitpath(const WCHAR* path, WCHAR* drv, WCHAR* dir, WCHAR* name, WCHAR* ext); +void WCMD_opt_s_strip_quotes(WCHAR *cmd); WCHAR *WCMD_LoadMessage(UINT id); WCHAR *WCMD_strdupW(WCHAR *input); void WCMD_strsubstW(WCHAR *start, WCHAR* next, WCHAR* insert, int len); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index d3aea6d..249526f 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -457,7 +457,7 @@ WCHAR *WCMD_strtrim_leading_spaces (WCHAR *string) { * * Remove first and last quote WCHARacters, preserving all other text */ -static void WCMD_opt_s_strip_quotes(WCHAR *cmd) { +void WCMD_opt_s_strip_quotes(WCHAR *cmd) { WCHAR *src = cmd + 1, *dest = cmd, *lastq = NULL; while((*dest=*src) != '\0') { if (*src=='\"')
1
0
0
0
Benjamin Kramer : ntdll: Fix build on MacOSX.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 2f3ac0640b43639be64312ca6d4d3a7df955f668 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2f3ac0640b43639be64312ca6…
Author: Benjamin Kramer <benny.kra(a)googlemail.com> Date: Fri Aug 28 21:15:22 2009 +0200 ntdll: Fix build on MacOSX. --- dlls/ntdll/nt.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index 279a525..c27ef00 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -1009,9 +1009,9 @@ NTSTATUS WINAPI NtQuerySystemInformation( sppi = RtlAllocateHeap(GetProcessHeap(), 0,len); for (i = 0; i < cpus; i++) { - sppi[i].liIdleTime.QuadPart = pinfo[i].cpu_ticks[CPU_STATE_IDLE]; - sppi[i].liKernelTime.QuadPart = pinfo[i].cpu_ticks[CPU_STATE_SYSTEM]; - sppi[i].liUserTime.QuadPart = pinfo[i].cpu_ticks[CPU_STATE_USER]; + sppi[i].IdleTime.QuadPart = pinfo[i].cpu_ticks[CPU_STATE_IDLE]; + sppi[i].KernelTime.QuadPart = pinfo[i].cpu_ticks[CPU_STATE_SYSTEM]; + sppi[i].UserTime.QuadPart = pinfo[i].cpu_ticks[CPU_STATE_USER]; } vm_deallocate (mach_task_self (), (vm_address_t) pinfo, info_count * sizeof(natural_t)); }
1
0
0
0
Aric Stewart : msctf: Hook up ITfTextEditSink::OnEndEdit.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 0294cbc04803d6eb65e6cb6d0ed9d1d51da4a238 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0294cbc04803d6eb65e6cb6d0…
Author: Aric Stewart <aric(a)codeweavers.com> Date: Fri Aug 28 15:08:14 2009 -0500 msctf: Hook up ITfTextEditSink::OnEndEdit. --- dlls/msctf/context.c | 26 +++++++++- dlls/msctf/tests/inputprocessor.c | 108 +++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 1 deletions(-) diff --git a/dlls/msctf/context.c b/dlls/msctf/context.c index 5335940..c13235c 100644 --- a/dlls/msctf/context.c +++ b/dlls/msctf/context.c @@ -989,8 +989,9 @@ static HRESULT WINAPI TextStoreACPSink_OnLockGranted(ITextStoreACPSink *iface, { TextStoreACPSink *This = (TextStoreACPSink *)iface; HRESULT hr; - EditCookie *cookie; + EditCookie *cookie,*sinkcookie; TfEditCookie ec; + struct list *cursor; TRACE("(%p) %x\n",This, dwLockFlags); @@ -1010,12 +1011,35 @@ static HRESULT WINAPI TextStoreACPSink_OnLockGranted(ITextStoreACPSink *iface, if (!cookie) return E_OUTOFMEMORY; + sinkcookie = HeapAlloc(GetProcessHeap(),0,sizeof(EditCookie)); + if (!sinkcookie) + return E_OUTOFMEMORY; + cookie->lockType = dwLockFlags; cookie->pOwningContext = This->pContext; ec = generate_Cookie(COOKIE_MAGIC_EDITCOOKIE, cookie); hr = ITfEditSession_DoEditSession(This->pContext->currentEditSession, ec); + if ((dwLockFlags&TS_LF_READWRITE) == TS_LF_READWRITE) + { + TfEditCookie sc; + + sinkcookie->lockType = TS_LF_READ; + sinkcookie->pOwningContext = This->pContext; + sc = generate_Cookie(COOKIE_MAGIC_EDITCOOKIE, sinkcookie); + + /*TODO: implement ITfEditRecord */ + LIST_FOR_EACH(cursor, &This->pContext->pTextEditSink) + { + ContextSink* sink = LIST_ENTRY(cursor,ContextSink,entry); + ITfTextEditSink_OnEndEdit(sink->interfaces.pITfTextEditSink, + (ITfContext*) &This->pContext, sc, NULL); + } + sinkcookie = remove_Cookie(sc); + } + HeapFree(GetProcessHeap(),0,sinkcookie); + ITfEditSession_Release(This->pContext->currentEditSession); This->pContext->currentEditSession = NULL; diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c index d35d391..6e8bbdc 100644 --- a/dlls/msctf/tests/inputprocessor.c +++ b/dlls/msctf/tests/inputprocessor.c @@ -65,6 +65,7 @@ static INT test_ACP_GetSelection = SINK_UNEXPECTED; static INT test_DoEditSession = SINK_UNEXPECTED; static INT test_ACP_InsertTextAtSelection = SINK_UNEXPECTED; static INT test_ACP_SetSelection = SINK_UNEXPECTED; +static INT test_OnEndEdit = SINK_UNEXPECTED; /********************************************************************** @@ -1181,6 +1182,90 @@ static inline int check_context_refcount(ITfContext *iface) return IUnknown_Release(iface); } + +/********************************************************************** + * ITfTextEditSink + **********************************************************************/ +typedef struct tagTextEditSink +{ + const ITfTextEditSinkVtbl *TextEditSinkVtbl; + LONG refCount; +} TextEditSink; + +static void TextEditSink_Destructor(TextEditSink *This) +{ + HeapFree(GetProcessHeap(),0,This); +} + +static HRESULT WINAPI TextEditSink_QueryInterface(ITfTextEditSink *iface, REFIID iid, LPVOID *ppvOut) +{ + TextEditSink *This = (TextEditSink *)iface; + *ppvOut = NULL; + + if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfTextEditSink)) + { + *ppvOut = This; + } + + if (*ppvOut) + { + IUnknown_AddRef(iface); + return S_OK; + } + + return E_NOINTERFACE; +} + +static ULONG WINAPI TextEditSink_AddRef(ITfTextEditSink *iface) +{ + TextEditSink *This = (TextEditSink *)iface; + return InterlockedIncrement(&This->refCount); +} + +static ULONG WINAPI TextEditSink_Release(ITfTextEditSink *iface) +{ + TextEditSink *This = (TextEditSink *)iface; + ULONG ret; + + ret = InterlockedDecrement(&This->refCount); + if (ret == 0) + TextEditSink_Destructor(This); + return ret; +} + +static HRESULT WINAPI TextEditSink_OnEndEdit(ITfTextEditSink *iface, + ITfContext *pic, TfEditCookie ecReadOnly, ITfEditRecord *pEditRecord) +{ + ok(test_OnEndEdit == SINK_EXPECTED, "Unexpected OnEndEdit\n"); + test_OnEndEdit = SINK_FIRED; + return S_OK; +} + +static const ITfTextEditSinkVtbl TextEditSink_TextEditSinkVtbl = +{ + TextEditSink_QueryInterface, + TextEditSink_AddRef, + TextEditSink_Release, + + TextEditSink_OnEndEdit +}; + +static HRESULT TextEditSink_Constructor(ITfTextEditSink **ppOut) +{ + TextEditSink *This; + + *ppOut = NULL; + This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextEditSink)); + if (This == NULL) + return E_OUTOFMEMORY; + + This->TextEditSinkVtbl = &TextEditSink_TextEditSinkVtbl; + This->refCount = 1; + + *ppOut = (ITfTextEditSink*)This; + return S_OK; +} + static void test_startSession(void) { HRESULT hr; @@ -1626,11 +1711,24 @@ static void test_TStoApplicationText(void) ITfEditSession *es; ITfContext *cxt; ITfDocumentMgr *dm; + ITfTextEditSink *sink; + ITfSource *source = NULL; + DWORD editSinkCookie = -1; ITfThreadMgr_GetFocus(g_tm, &dm); EditSession_Constructor(&es); ITfDocumentMgr_GetTop(dm,&cxt); + TextEditSink_Constructor(&sink); + hr = ITfContext_QueryInterface(cxt,&IID_ITfSource,(LPVOID*)&source); + ok(SUCCEEDED(hr),"Failed to get IID_ITfSource for Context\n"); + if (source) + { + hr = ITfSource_AdviseSink(source, &IID_ITfTextEditSink, (LPVOID)sink, &editSinkCookie); + ok(SUCCEEDED(hr),"Failed to advise Sink\n"); + ok(editSinkCookie != -1,"Failed to get sink cookie\n"); + } + hrSession = 0xfeedface; /* Test no premissions flags */ hr = ITfContext_RequestEditSession(cxt, tid, es, TF_ES_SYNC, &hrSession); @@ -1655,13 +1753,23 @@ static void test_TStoApplicationText(void) test_ACP_RequestLock = SINK_EXPECTED; test_DoEditSession = SINK_EXPECTED; hrSession = 0xfeedface; + test_OnEndEdit = SINK_EXPECTED; hr = ITfContext_RequestEditSession(cxt, tid, es, TF_ES_SYNC|TF_ES_READWRITE, &hrSession); ok(SUCCEEDED(hr),"ITfContext_RequestEditSession failed\n"); + ok(test_OnEndEdit == SINK_FIRED, "OnEndEdit not fired as expected\n"); ok(test_ACP_RequestLock == SINK_FIRED," expected RequestLock not fired\n"); ok(test_DoEditSession == SINK_FIRED," expected DoEditSession not fired\n"); ok(test_ACP_GetStatus == SINK_FIRED," expected GetStatus not fired\n"); ok(hrSession == 0xdeadcafe,"Unexpected hrSession (%x)\n",hrSession); + if (source) + { + hr = ITfSource_UnadviseSink(source, editSinkCookie); + ok(SUCCEEDED(hr),"Failed to unadvise Sink\n"); + ITfTextEditSink_Release(sink); + ITfSource_Release(source); + } + ITfContext_Release(cxt); ITfDocumentMgr_Release(dm); ITfEditSession_Release(es);
1
0
0
0
Aric Stewart : msctf: Stub implementation of ITfSourceSingle for ITfContext .
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: e00bc2d3068ef118bf9d61cbfa9eb1d5dac89b12 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e00bc2d3068ef118bf9d61cbf…
Author: Aric Stewart <aric(a)codeweavers.com> Date: Fri Aug 28 14:08:20 2009 -0500 msctf: Stub implementation of ITfSourceSingle for ITfContext. --- dlls/msctf/context.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 58 insertions(+), 1 deletions(-) diff --git a/dlls/msctf/context.c b/dlls/msctf/context.c index 5be06d3..5335940 100644 --- a/dlls/msctf/context.c +++ b/dlls/msctf/context.c @@ -64,7 +64,7 @@ typedef struct tagContext { const ITfInsertAtSelectionVtbl *InsertAtSelectionVtbl; /* const ITfMouseTrackerVtbl *MouseTrackerVtbl; */ /* const ITfQueryEmbeddedVtbl *QueryEmbeddedVtbl; */ - /* const ITfSourceSingleVtbl *SourceSingleVtbl; */ + const ITfSourceSingleVtbl *SourceSingleVtbl; LONG refCount; BOOL connected; @@ -117,6 +117,11 @@ static inline Context *impl_from_ITfInsertAtSelectionVtbl(ITfInsertAtSelection*i return (Context *)((char *)iface - FIELD_OFFSET(Context,InsertAtSelectionVtbl)); } +static inline Context *impl_from_ITfSourceSingleVtbl(ITfSourceSingle* iface) +{ + return (Context *)((char *)iface - FIELD_OFFSET(Context,SourceSingleVtbl)); +} + static void free_sink(ContextSink *sink) { IUnknown_Release(sink->interfaces.pIUnknown); @@ -204,6 +209,10 @@ static HRESULT WINAPI Context_QueryInterface(ITfContext *iface, REFIID iid, LPVO { *ppvOut = This->CompartmentMgr; } + else if (IsEqualIID(iid, &IID_ITfSourceSingle)) + { + *ppvOut = &This->SourceSingleVtbl; + } if (*ppvOut) { @@ -729,6 +738,53 @@ static const ITfInsertAtSelectionVtbl Context_InsertAtSelectionVtbl = InsertAtSelection_InsertEmbeddedAtSelection, }; +/***************************************************** + * ITfSourceSingle functions + *****************************************************/ +static HRESULT WINAPI SourceSingle_QueryInterface(ITfSourceSingle *iface, REFIID iid, LPVOID *ppvOut) +{ + Context *This = impl_from_ITfSourceSingleVtbl(iface); + return Context_QueryInterface((ITfContext *)This, iid, *ppvOut); +} + +static ULONG WINAPI SourceSingle_AddRef(ITfSourceSingle *iface) +{ + Context *This = impl_from_ITfSourceSingleVtbl(iface); + return Context_AddRef((ITfContext *)This); +} + +static ULONG WINAPI SourceSingle_Release(ITfSourceSingle *iface) +{ + Context *This = impl_from_ITfSourceSingleVtbl(iface); + return Context_Release((ITfContext *)This); +} + +static WINAPI HRESULT SourceSingle_AdviseSingleSink( ITfSourceSingle *iface, + TfClientId tid, REFIID riid, IUnknown *punk) +{ + Context *This = impl_from_ITfSourceSingleVtbl(iface); + FIXME("STUB:(%p) %i %s %p\n",This, tid, debugstr_guid(riid),punk); + return E_NOTIMPL; +} + +static WINAPI HRESULT SourceSingle_UnadviseSingleSink( ITfSourceSingle *iface, + TfClientId tid, REFIID riid) +{ + Context *This = impl_from_ITfSourceSingleVtbl(iface); + FIXME("STUB:(%p) %i %s\n",This, tid, debugstr_guid(riid)); + return E_NOTIMPL; +} + +static const ITfSourceSingleVtbl Context_SourceSingleVtbl = +{ + SourceSingle_QueryInterface, + SourceSingle_AddRef, + SourceSingle_Release, + + SourceSingle_AdviseSingleSink, + SourceSingle_UnadviseSingleSink, +}; + HRESULT Context_Constructor(TfClientId tidOwner, IUnknown *punk, ITfDocumentMgr *mgr, ITfContext **ppOut, TfEditCookie *pecTextStore) { Context *This; @@ -750,6 +806,7 @@ HRESULT Context_Constructor(TfClientId tidOwner, IUnknown *punk, ITfDocumentMgr This->ContextVtbl= &Context_ContextVtbl; This->SourceVtbl = &Context_SourceVtbl; This->InsertAtSelectionVtbl = &Context_InsertAtSelectionVtbl; + This->SourceSingleVtbl = &Context_SourceSingleVtbl; This->refCount = 1; This->tidOwner = tidOwner; This->connected = FALSE;
1
0
0
0
Aric Stewart : msctf: Define ITfSourceSingle.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 6e6dd21c8356bd46ed732f9f75d23266501e210d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6e6dd21c8356bd46ed732f9f7…
Author: Aric Stewart <aric(a)codeweavers.com> Date: Fri Aug 28 14:07:54 2009 -0500 msctf: Define ITfSourceSingle. --- include/msctf.idl | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/include/msctf.idl b/include/msctf.idl index bcd2587..204262f 100644 --- a/include/msctf.idl +++ b/include/msctf.idl @@ -1327,3 +1327,20 @@ interface IEnumTfDocumentMgrs : IUnknown HRESULT Skip( [in] ULONG ulCount); }; + +[ + object, + uuid(73131f9c-56a9-49dd-b0ee-d046633f7528), + pointer_default(unique) +] +interface ITfSourceSingle : IUnknown +{ + HRESULT AdviseSingleSink( + [in] TfClientId tid, + [in] REFIID riid, + [in, iid_is(riid)] IUnknown *punk); + + HRESULT UnadviseSingleSink( + [in] TfClientId tid, + [in] REFIID riid); +};
1
0
0
0
Alexandre Julliard : ntdll: Use a more drastic (and simpler) method for unwinding the stack on thread exit.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 690cf4a6c8cde2d693f4c47be46ac7b8e6091945 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=690cf4a6c8cde2d693f4c47be…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Sat Aug 29 12:08:11 2009 +0200 ntdll: Use a more drastic (and simpler) method for unwinding the stack on thread exit. --- dlls/ntdll/ntdll_misc.h | 4 ++ dlls/ntdll/signal_x86_64.c | 119 ++++++++++---------------------------------- 2 files changed, 31 insertions(+), 92 deletions(-) diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index faafd20..179aa20 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -201,7 +201,11 @@ struct ntdll_thread_data int reply_fd; /* 1e4/314 fd for receiving server replies */ int wait_fd[2]; /* 1e8/318 fd for sleeping server requests */ BOOL wow64_redir; /* 1f0/320 Wow64 filesystem redirection flag */ +#ifdef __i386__ void *vm86_ptr; /* 1f4/328 data for vm86 mode */ +#else + void *exit_frame; /* 1f4/328 exit frame pointer */ +#endif pthread_t pthread_id; /* 1f8/330 pthread thread id */ }; diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 50ecbe8..b5ff237 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -2880,101 +2880,45 @@ void WINAPI __regs_RtlRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context ) DEFINE_REGS_ENTRYPOINT( RtlRaiseException, 1 ) -struct topmost_frame -{ - EXCEPTION_REGISTRATION_RECORD frame; - sigjmp_buf jmp; - int exit_code; -}; - -static void DECLSPEC_NORETURN topmost_exit_unwind_target(void) -{ - struct topmost_frame *topmost_frame = (struct topmost_frame *)__wine_get_frame(); - __wine_pop_frame( &topmost_frame->frame ); - siglongjmp( topmost_frame->jmp, 1 ); -} - -static void DECLSPEC_NORETURN topmost_abort_unwind_target(void) -{ - struct topmost_frame *topmost_frame = (struct topmost_frame *)__wine_get_frame(); - __wine_pop_frame( &topmost_frame->frame ); - siglongjmp( topmost_frame->jmp, 2 ); -} - -static DWORD topmost_handler( EXCEPTION_RECORD *record, - EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, - EXCEPTION_REGISTRATION_RECORD **pdispatcher ) +/*********************************************************************** + * call_thread_func + */ +void call_thread_func( LPTHREAD_START_ROUTINE entry, void *arg, void *frame ) { - struct topmost_frame *topmost_frame = (struct topmost_frame *)frame; - EXCEPTION_POINTERS ptrs; - - if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL)) - return ExceptionContinueSearch; - - ptrs.ExceptionRecord = record; - ptrs.ContextRecord = context; - switch (unhandled_exception_filter( &ptrs )) + ntdll_get_thread_data()->exit_frame = frame; + __TRY { - case EXCEPTION_CONTINUE_SEARCH: - return ExceptionContinueSearch; - case EXCEPTION_CONTINUE_EXECUTION: - return ExceptionContinueExecution; - case EXCEPTION_EXECUTE_HANDLER: - break; + RtlExitUserThread( entry( arg )); } - /* send the exit code to the server */ - /* we can't simply call NtTerminateThread since it's a WINAPI function */ - /* and libgcc unwinding doesn't handle those correctly */ - SERVER_START_REQ( terminate_thread ) + __EXCEPT(unhandled_exception_filter) { - req->handle = wine_server_obj_handle( GetCurrentThread() ); - req->exit_code = record->ExceptionCode; - wine_server_call( req ); + NtTerminateThread( GetCurrentThread(), GetExceptionCode() ); } - SERVER_END_REQ; - topmost_frame->exit_code = record->ExceptionCode; - for (;;) RtlUnwind( frame, topmost_abort_unwind_target, record, 0 ); + __ENDTRY + abort(); /* should not be reached */ } -/*********************************************************************** - * call_thread_entry_point - */ -void call_thread_entry_point( LPTHREAD_START_ROUTINE entry, void *arg ) -{ - struct topmost_frame frame; +extern void DECLSPEC_NORETURN call_thread_entry_point( LPTHREAD_START_ROUTINE entry, void *arg ); +__ASM_GLOBAL_FUNC( call_thread_entry_point, + "subq $8,%rsp\n\t" + ".cfi_adjust_cfa_offset 8\n\t" + "movq %rsp,%rdx\n\t" + "call " __ASM_NAME("call_thread_func") ); - frame.frame.Handler = topmost_handler; - switch (sigsetjmp( frame.jmp, 0 )) - { - case 0: - __wine_push_frame( &frame.frame ); - frame.exit_code = entry( arg ); - __wine_pop_frame( &frame.frame ); - /* fall through */ - case 1: - exit_thread( frame.exit_code ); - default: - terminate_thread( frame.exit_code ); - } -} +extern void DECLSPEC_NORETURN call_thread_exit_func( int status, void (*func)(int), void *frame ); +__ASM_GLOBAL_FUNC( call_thread_exit_func, + "subq $8,%rsp\n\t" + ".cfi_adjust_cfa_offset 8\n\t" + "movq %rdx,%rsp\n\t" + "call *%rsi" ); /*********************************************************************** * RtlExitUserThread (NTDLL.@) */ void WINAPI RtlExitUserThread( ULONG status ) { - EXCEPTION_REGISTRATION_RECORD *teb_frame = NtCurrentTeb()->Tib.ExceptionList; - - /* hack: find the top TEB frame and use it as unwind target */ - if (teb_frame != (EXCEPTION_REGISTRATION_RECORD *)~0UL) - { - while (teb_frame->Prev != (EXCEPTION_REGISTRATION_RECORD *)~0UL) teb_frame = teb_frame->Prev; - TRACE( "unwinding to frame %p for thread exit\n", teb_frame ); - ((struct topmost_frame *)teb_frame)->exit_code = status; - RtlUnwind( teb_frame, topmost_exit_unwind_target, NULL, 0 ); - } - exit_thread( status ); + if (!ntdll_get_thread_data()->exit_frame) exit_thread( status ); + call_thread_exit_func( status, exit_thread, ntdll_get_thread_data()->exit_frame ); } /*********************************************************************** @@ -2982,17 +2926,8 @@ void WINAPI RtlExitUserThread( ULONG status ) */ void abort_thread( int status ) { - EXCEPTION_REGISTRATION_RECORD *teb_frame = NtCurrentTeb()->Tib.ExceptionList; - - /* hack: find the top TEB frame and use it as unwind target */ - if (teb_frame != (EXCEPTION_REGISTRATION_RECORD *)~0UL) - { - while (teb_frame->Prev != (EXCEPTION_REGISTRATION_RECORD *)~0UL) teb_frame = teb_frame->Prev; - TRACE( "unwinding to frame %p for thread exit\n", teb_frame ); - ((struct topmost_frame *)teb_frame)->exit_code = status; - RtlUnwind( teb_frame, topmost_abort_unwind_target, NULL, 0 ); - } - terminate_thread( status ); + if (!ntdll_get_thread_data()->exit_frame) terminate_thread( status ); + call_thread_exit_func( status, terminate_thread, ntdll_get_thread_data()->exit_frame ); } /**********************************************************************
1
0
0
0
Alexandre Julliard : ntdll: Route the process startup through the platform-specific thread startup code .
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: c9d85dd5760fb082c19577338632a05837eccdce URL:
http://source.winehq.org/git/wine.git/?a=commit;h=c9d85dd5760fb082c19577338…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Sat Aug 29 11:07:17 2009 +0200 ntdll: Route the process startup through the platform-specific thread startup code. --- dlls/kernel32/process.c | 50 +++++++++++++++++----------------------------- dlls/ntdll/loader.c | 13 ++++++++++- include/winternl.h | 2 +- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index ddc93f2..bf9bab4 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -47,7 +47,6 @@ #include "wine/winuser16.h" #include "winternl.h" #include "kernel_private.h" -#include "wine/exception.h" #include "wine/server.h" #include "wine/unicode.h" #include "wine/debug.h" @@ -930,38 +929,29 @@ static void start_wineboot( HANDLE handles[2] ) * * Startup routine of a new process. Runs on the new process stack. */ -static void start_process( void *arg ) +static DWORD WINAPI start_process( PEB *peb ) { - __TRY - { - PEB *peb = NtCurrentTeb()->Peb; - IMAGE_NT_HEADERS *nt; - LPTHREAD_START_ROUTINE entry; - - nt = RtlImageNtHeader( peb->ImageBaseAddress ); - entry = (LPTHREAD_START_ROUTINE)((char *)peb->ImageBaseAddress + - nt->OptionalHeader.AddressOfEntryPoint); - - if (!nt->OptionalHeader.AddressOfEntryPoint) - { - ERR( "%s doesn't have an entry point, it cannot be executed\n", - debugstr_w(peb->ProcessParameters->ImagePathName.Buffer) ); - ExitThread( 1 ); - } + IMAGE_NT_HEADERS *nt; + LPTHREAD_START_ROUTINE entry; - if (TRACE_ON(relay)) - DPRINTF( "%04x:Starting process %s (entryproc=%p)\n", GetCurrentThreadId(), - debugstr_w(peb->ProcessParameters->ImagePathName.Buffer), entry ); + nt = RtlImageNtHeader( peb->ImageBaseAddress ); + entry = (LPTHREAD_START_ROUTINE)((char *)peb->ImageBaseAddress + + nt->OptionalHeader.AddressOfEntryPoint); - SetLastError( 0 ); /* clear error code */ - if (peb->BeingDebugged) DbgBreakPoint(); - ExitThread( entry( peb ) ); - } - __EXCEPT(UnhandledExceptionFilter) + if (!nt->OptionalHeader.AddressOfEntryPoint) { - TerminateThread( GetCurrentThread(), GetExceptionCode() ); + ERR( "%s doesn't have an entry point, it cannot be executed\n", + debugstr_w(peb->ProcessParameters->ImagePathName.Buffer) ); + ExitThread( 1 ); } - __ENDTRY + + if (TRACE_ON(relay)) + DPRINTF( "%04x:Starting process %s (entryproc=%p)\n", GetCurrentThreadId(), + debugstr_w(peb->ProcessParameters->ImagePathName.Buffer), entry ); + + SetLastError( 0 ); /* clear error code */ + if (peb->BeingDebugged) DbgBreakPoint(); + return entry( peb ); } @@ -1125,9 +1115,7 @@ void CDECL __wine_kernel_init(void) ExitProcess( error ); } - LdrInitializeThunk( 0, 0, 0, 0 ); - /* switch to the new stack */ - wine_switch_to_stack( start_process, NULL, NtCurrentTeb()->Tib.StackBase ); + LdrInitializeThunk( start_process, 0, 0, 0 ); error: ExitProcess( GetLastError() ); diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index a3db3b2..df4bb01 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -2444,11 +2444,20 @@ static NTSTATUS attach_process_dlls( void *wm ) } +/*********************************************************************** + * start_process + */ +static void start_process( void *kernel_start ) +{ + call_thread_entry_point( kernel_start, NtCurrentTeb()->Peb ); +} + /****************************************************************** * LdrInitializeThunk (NTDLL.@) * */ -void WINAPI LdrInitializeThunk( ULONG unknown1, ULONG unknown2, ULONG unknown3, ULONG unknown4 ) +void WINAPI LdrInitializeThunk( void *kernel_start, ULONG_PTR unknown2, + ULONG_PTR unknown3, ULONG_PTR unknown4 ) { NTSTATUS status; WINE_MODREF *wm; @@ -2489,7 +2498,7 @@ void WINAPI LdrInitializeThunk( ULONG unknown1, ULONG unknown2, ULONG unknown3, virtual_release_address_space( nt->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE ); virtual_clear_thread_stack(); - return; + wine_switch_to_stack( start_process, kernel_start, NtCurrentTeb()->Tib.StackBase ); error: ERR( "Main exe initialization for %s failed, status %x\n", diff --git a/include/winternl.h b/include/winternl.h index aca74e5..07c778c 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1980,7 +1980,7 @@ NTSYSAPI NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE); NTSYSAPI NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*); NTSYSAPI NTSTATUS WINAPI LdrGetDllHandle(LPCWSTR, ULONG, const UNICODE_STRING*, HMODULE*); NTSYSAPI NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**); -NTSYSAPI void WINAPI LdrInitializeThunk(ULONG,ULONG,ULONG,ULONG); +NTSYSAPI void WINAPI LdrInitializeThunk(void*,ULONG_PTR,ULONG_PTR,ULONG_PTR); NTSYSAPI NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*); NTSYSAPI NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*); IMAGE_BASE_RELOCATION * WINAPI LdrProcessRelocationBlock(void*,UINT,USHORT*,INT_PTR);
1
0
0
0
Alexandre Julliard : ntdll: Add support for Dwarf expressions in call frame information.
by Alexandre Julliard
29 Aug '09
29 Aug '09
Module: wine Branch: master Commit: 8824deb6c6df9b003e85cc25908654bfbd907767 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8824deb6c6df9b003e85cc259…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Fri Aug 28 18:25:20 2009 +0200 ntdll: Add support for Dwarf expressions in call frame information. --- dlls/ntdll/signal_x86_64.c | 344 +++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 327 insertions(+), 17 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=8824deb6c6df9b003e85c…
1
0
0
0
← Newer
1
...
6
7
8
9
10
11
12
...
105
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
96
97
98
99
100
101
102
103
104
105
Results per page:
10
25
50
100
200