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
December 2017
----- 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
450 discussions
Start a n
N
ew thread
Joel Holdsworth : urlmon: Support [Add.Code] sections in ActiveX INF files.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 185bcc4523c5827a78a56c63735f1a5f502e999b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=185bcc4523c5827a78a56c637…
Author: Joel Holdsworth <joel(a)airwebreathe.org.uk> Date: Wed Dec 13 13:32:22 2017 -0700 urlmon: Support [Add.Code] sections in ActiveX INF files. Signed-off-by: Joel Holdsworth <joel(a)airwebreathe.org.uk> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/urlmon/axinstall.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/dlls/urlmon/axinstall.c b/dlls/urlmon/axinstall.c index 7ee7d94..d2cf7e6 100644 --- a/dlls/urlmon/axinstall.c +++ b/dlls/urlmon/axinstall.c @@ -251,12 +251,25 @@ static HRESULT install_inf_file(install_ctx_t *ctx) len = GetPrivateProfileStringW(add_codeW, NULL, NULL, buf, sizeof(buf)/sizeof(*buf), ctx->install_file); if(len) { - FIXME("[Add.Code] section not supported\n"); + default_install = FALSE; - /* Don't throw an error if we successfully ran setup hooks; - installation is likely to be complete enough */ - if(default_install) - return E_NOTIMPL; + for(key = buf; *key; key += strlenW(key)+1) { + TRACE("[Add.Code] key: %s\n", debugstr_w(key)); + + len = GetPrivateProfileStringW(add_codeW, key, NULL, sect_name, sizeof(sect_name)/sizeof(*sect_name), + ctx->install_file); + if(!len) { + WARN("Could not get key value\n"); + return E_FAIL; + } + + hres = RunSetupCommandW(ctx->hwnd, ctx->install_file, sect_name, + ctx->tmp_dir, NULL, NULL, RSC_FLAG_INF, NULL); + if(FAILED(hres)) { + WARN("RunSetupCommandW failed: %08x\n", hres); + return hres; + } + } } if(default_install) {
1
0
0
0
Huw Davies : ole32: Correctly save the remaining formats if their data has not been set.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 33be9fc78f51f869bd2bb8ab5e7ac205eeb5af47 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=33be9fc78f51f869bd2bb8ab5…
Author: Huw Davies <huw(a)codeweavers.com> Date: Thu Dec 14 13:17:38 2017 +0000 ole32: Correctly save the remaining formats if their data has not been set. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ole32/datacache.c | 48 +++++++++++++++++++++--------------------------- dlls/ole32/tests/ole2.c | 47 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 59 insertions(+), 36 deletions(-) diff --git a/dlls/ole32/datacache.c b/dlls/ole32/datacache.c index ae05b8e..ad55c6e 100644 --- a/dlls/ole32/datacache.c +++ b/dlls/ole32/datacache.c @@ -829,17 +829,16 @@ static HRESULT save_dib(DataCacheEntry *entry, BOOL contents, IStream *stream) if (hr == S_OK && data_size) hr = IStream_Write(stream, bmi, data_size, NULL); } - else + else if(data_size) { BITMAPFILEHEADER bmp_fhdr; bmp_fhdr.bfType = 0x4d42; bmp_fhdr.bfSize = data_size + sizeof(BITMAPFILEHEADER); bmp_fhdr.bfReserved1 = bmp_fhdr.bfReserved2 = 0; - if (data_size) - bmp_fhdr.bfOffBits = bitmap_info_size(bmi, DIB_RGB_COLORS) + sizeof(BITMAPFILEHEADER); + bmp_fhdr.bfOffBits = bitmap_info_size(bmi, DIB_RGB_COLORS) + sizeof(BITMAPFILEHEADER); hr = IStream_Write(stream, &bmp_fhdr, sizeof(BITMAPFILEHEADER), NULL); - if (hr == S_OK && data_size) + if (hr == S_OK) hr = IStream_Write(stream, bmi, data_size, NULL); } @@ -897,25 +896,22 @@ static HRESULT save_mfpict(DataCacheEntry *entry, BOOL contents, IStream *stream hr = IStream_Write(stream, data, data_size, NULL); HeapFree(GetProcessHeap(), 0, data); } - else + else if (entry->stgmedium.tymed != TYMED_NULL) { struct meta_placeable meta_place_rec; WORD *check; - if (entry->stgmedium.tymed != TYMED_NULL) + mfpict = GlobalLock(entry->stgmedium.u.hMetaFilePict); + if (!mfpict) + return DV_E_STGMEDIUM; + data_size = GetMetaFileBitsEx(mfpict->hMF, 0, NULL); + data = HeapAlloc(GetProcessHeap(), 0, data_size); + if (!data) { - mfpict = GlobalLock(entry->stgmedium.u.hMetaFilePict); - if (!mfpict) - return DV_E_STGMEDIUM; - data_size = GetMetaFileBitsEx(mfpict->hMF, 0, NULL); - data = HeapAlloc(GetProcessHeap(), 0, data_size); - if (!data) - { - GlobalUnlock(entry->stgmedium.u.hMetaFilePict); - return E_OUTOFMEMORY; - } - GetMetaFileBitsEx(mfpict->hMF, data_size, data); + GlobalUnlock(entry->stgmedium.u.hMetaFilePict); + return E_OUTOFMEMORY; } + GetMetaFileBitsEx(mfpict->hMF, data_size, data); /* units are in 1/8th of a point (1 point is 1/72th of an inch) */ meta_place_rec.key = 0x9ac6cdd7; @@ -927,13 +923,12 @@ static HRESULT save_mfpict(DataCacheEntry *entry, BOOL contents, IStream *stream meta_place_rec.bounding_box[3] = 0; meta_place_rec.checksum = 0; meta_place_rec.reserved = 0; - if (mfpict) - { - /* These values are rounded down so MulDiv won't do the right thing */ - meta_place_rec.bounding_box[2] = (LONGLONG)mfpict->xExt * meta_place_rec.inch / 2540; - meta_place_rec.bounding_box[3] = (LONGLONG)mfpict->yExt * meta_place_rec.inch / 2540; - GlobalUnlock(entry->stgmedium.u.hMetaFilePict); - } + + /* These values are rounded down so MulDiv won't do the right thing */ + meta_place_rec.bounding_box[2] = (LONGLONG)mfpict->xExt * meta_place_rec.inch / 2540; + meta_place_rec.bounding_box[3] = (LONGLONG)mfpict->yExt * meta_place_rec.inch / 2540; + GlobalUnlock(entry->stgmedium.u.hMetaFilePict); + for (check = (WORD *)&meta_place_rec; check != (WORD *)&meta_place_rec.checksum; check++) meta_place_rec.checksum ^= *check; hr = IStream_Write(stream, &meta_place_rec, sizeof(struct meta_placeable), NULL); @@ -982,7 +977,7 @@ static HRESULT save_emf(DataCacheEntry *entry, BOOL contents, IStream *stream) hr = IStream_Write(stream, data, data_size, NULL); HeapFree(GetProcessHeap(), 0, data); } - else + else if (entry->stgmedium.tymed != TYMED_NULL) { data_size = GetEnhMetaFileBits(entry->stgmedium.u.hEnhMetaFile, 0, NULL); data = HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD) + sizeof(ENHMETAHEADER) + data_size); @@ -991,8 +986,7 @@ static HRESULT save_emf(DataCacheEntry *entry, BOOL contents, IStream *stream) GetEnhMetaFileBits(entry->stgmedium.u.hEnhMetaFile, data_size, data + sizeof(DWORD) + sizeof(ENHMETAHEADER)); memcpy(data + sizeof(DWORD), data + sizeof(DWORD) + sizeof(ENHMETAHEADER), sizeof(ENHMETAHEADER)); data_size += sizeof(DWORD) + sizeof(ENHMETAHEADER); - if (hr == S_OK && data_size) - hr = IStream_Write(stream, data, data_size, NULL); + hr = IStream_Write(stream, data, data_size, NULL); HeapFree(GetProcessHeap(), 0, data); } diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c index f42ebe2..fe45c6a 100644 --- a/dlls/ole32/tests/ole2.c +++ b/dlls/ole32/tests/ole2.c @@ -4226,35 +4226,64 @@ static void test_data_cache_save_data(void) { { { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, + { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, + { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, }, - 1, 1, &CLSID_WineTest, + 3, 3, &CLSID_WineTest, { - &CLSID_WineTestOld, 1, { { "\2OlePres000", CF_DIB, DVASPECT_CONTENT, 0, NULL, 0 } } + &CLSID_WineTestOld, 3, { { "\2OlePres000", CF_DIB, DVASPECT_CONTENT, 0, NULL, 0 }, + { "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, 0, NULL, 0 }, + { "\2OlePres002", CF_ENHMETAFILE, DVASPECT_CONTENT, 0, NULL, 0 } } } }, + /* without setting data */ { { + { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, + { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, + }, + 3, 0, &CLSID_WineTest, + { + &CLSID_WineTestOld, 3, { { "\2OlePres000", CF_DIB, DVASPECT_CONTENT, 0, NULL, 0 }, + { "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, 0, NULL, 0 }, + { "\2OlePres002", CF_ENHMETAFILE, DVASPECT_CONTENT, 0, NULL, 0 } } + } + }, + /* static picture clsids */ + { + { + { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, }, - 1, 1, &CLSID_WineTest, + 1, 1, &CLSID_Picture_Dib, { - &CLSID_WineTestOld, 1, { { "\2OlePres000", CF_METAFILEPICT, DVASPECT_CONTENT, 0, NULL, 0 } } + &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } + } + }, + { + { + { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, + }, + 1, 1, &CLSID_Picture_Metafile, + { + &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } } }, { { { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, }, - 1, 1, &CLSID_WineTest, + 1, 1, &CLSID_Picture_EnhMetafile, { - &CLSID_WineTestOld, 1, { { "\2OlePres000", CF_ENHMETAFILE, DVASPECT_CONTENT, 0, NULL, 0 } } + &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } } }, + /* static picture clsids without setting any data */ { { { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, }, - 1, 1, &CLSID_Picture_Dib, + 1, 0, &CLSID_Picture_Dib, { &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } } @@ -4263,7 +4292,7 @@ static void test_data_cache_save_data(void) { { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, }, - 1, 1, &CLSID_Picture_Metafile, + 1, 0, &CLSID_Picture_Metafile, { &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } } @@ -4272,7 +4301,7 @@ static void test_data_cache_save_data(void) { { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, }, - 1, 1, &CLSID_Picture_EnhMetafile, + 1, 0, &CLSID_Picture_EnhMetafile, { &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } }
1
0
0
0
Sergio Gómez Del Real : ole32: Correctly save the dib format if its data has not been set.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 179daf67a82945ee41f45f24d4bbf8f31fc2d7d1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=179daf67a82945ee41f45f24d…
Author: Sergio Gómez Del Real <sdelreal(a)codeweavers.com> Date: Thu Dec 14 13:17:37 2017 +0000 ole32: Correctly save the dib format if its data has not been set. Signed-off-by: Sergio Gómez Del Real <sdelreal(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ole32/datacache.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/ole32/datacache.c b/dlls/ole32/datacache.c index 75c9611..ae05b8e 100644 --- a/dlls/ole32/datacache.c +++ b/dlls/ole32/datacache.c @@ -792,8 +792,14 @@ static void init_stream_header(DataCacheEntry *entry, PresentationDataHeader *he static HRESULT save_dib(DataCacheEntry *entry, BOOL contents, IStream *stream) { HRESULT hr = S_OK; - int data_size = GlobalSize(entry->stgmedium.u.hGlobal); - BITMAPINFO *bmi = GlobalLock(entry->stgmedium.u.hGlobal); + int data_size = 0; + BITMAPINFO *bmi = NULL; + + if (entry->stgmedium.tymed != TYMED_NULL) + { + data_size = GlobalSize(entry->stgmedium.u.hGlobal); + bmi = GlobalLock(entry->stgmedium.u.hGlobal); + } if (!contents) {
1
0
0
0
Dmitry Timoshkov : secur32/tests: Add a test for Schannel behaviour with SECPKG_ATTR_NEGOTIATION_INFO query.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: dfb09f480780107d6b1c9beb7dadf85db4aadc67 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=dfb09f480780107d6b1c9beb7…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Thu Dec 14 17:19:06 2017 +0800 secur32/tests: Add a test for Schannel behaviour with SECPKG_ATTR_NEGOTIATION_INFO query. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/secur32/tests/schannel.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dlls/secur32/tests/schannel.c b/dlls/secur32/tests/schannel.c index b5ed169..21ebb62 100644 --- a/dlls/secur32/tests/schannel.c +++ b/dlls/secur32/tests/schannel.c @@ -686,6 +686,7 @@ static void test_communication(void) SecPkgContext_ConnectionInfo conn_info; SecPkgContext_KeyInfoA key_info; CERT_CONTEXT *cert; + SecPkgContext_NegotiationInfoA info; SecBufferDesc buffers[2]; SecBuffer *buf; @@ -939,6 +940,9 @@ todo_wine status = pQueryContextAttributesA(&context, SECPKG_ATTR_STREAM_SIZES, &sizes); ok(status == SEC_E_OK, "QueryContextAttributesW(SECPKG_ATTR_STREAM_SIZES) failed: %08x\n", status); + status = QueryContextAttributesA(&context, SECPKG_ATTR_NEGOTIATION_INFO, &info); + ok(status == SEC_E_UNSUPPORTED_FUNCTION, "QueryContextAttributesA returned %08x\n", status); + reset_buffers(&buffers[0]); /* Send a simple request so we get data for testing DecryptMessage */
1
0
0
0
Dmitry Timoshkov : secur32/tests: Add a test for NTLM behaviour with SECPKG_ATTR_NEGOTIATION_INFO query.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 09f6e200d9b220e28a98a74f466d69bb243c9e22 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=09f6e200d9b220e28a98a74f4…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Thu Dec 14 17:18:04 2017 +0800 secur32/tests: Add a test for NTLM behaviour with SECPKG_ATTR_NEGOTIATION_INFO query. To show that QueryContextAttributes(SECPKG_ATTR_NEGOTIATION_INFO) allocates flat memory block for the PackageInfo structure. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/secur32/tests/ntlm.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/dlls/secur32/tests/ntlm.c b/dlls/secur32/tests/ntlm.c index 355af5a..c060420 100644 --- a/dlls/secur32/tests/ntlm.c +++ b/dlls/secur32/tests/ntlm.c @@ -36,6 +36,29 @@ #include "wine/test.h" +#define NEGOTIATE_BASE_CAPS ( \ + SECPKG_FLAG_INTEGRITY | \ + SECPKG_FLAG_PRIVACY | \ + SECPKG_FLAG_CONNECTION | \ + SECPKG_FLAG_MULTI_REQUIRED | \ + SECPKG_FLAG_EXTENDED_ERROR | \ + SECPKG_FLAG_IMPERSONATION | \ + SECPKG_FLAG_ACCEPT_WIN32_NAME | \ + SECPKG_FLAG_NEGOTIABLE | \ + SECPKG_FLAG_GSS_COMPATIBLE | \ + SECPKG_FLAG_LOGON ) + +#define NTLM_BASE_CAPS ( \ + SECPKG_FLAG_INTEGRITY | \ + SECPKG_FLAG_PRIVACY | \ + SECPKG_FLAG_TOKEN_ONLY | \ + SECPKG_FLAG_CONNECTION | \ + SECPKG_FLAG_MULTI_REQUIRED | \ + SECPKG_FLAG_IMPERSONATION | \ + SECPKG_FLAG_ACCEPT_WIN32_NAME | \ + SECPKG_FLAG_NEGOTIABLE | \ + SECPKG_FLAG_LOGON ) + static HMODULE secdll; static PSecurityFunctionTableA (SEC_ENTRY * pInitSecurityInterfaceA)(void); static SECURITY_STATUS (SEC_ENTRY * pFreeContextBuffer)(PVOID pv); @@ -797,6 +820,8 @@ static void testAuth(ULONG data_rep, BOOL fake) SspiData client = {{0}}, server = {{0}}; SEC_WINNT_AUTH_IDENTITY_A id; SecPkgContext_Sizes ctxt_sizes; + SecPkgContext_NegotiationInfoA info; + SecPkgInfoA *pi; if(pQuerySecurityPackageInfoA( sec_pkg_name, &pkg_info)!= SEC_E_OK) { @@ -889,6 +914,41 @@ static void testAuth(ULONG data_rep, BOOL fake) "cbBlockSize should be 0 but is %u\n", ctxt_sizes.cbBlockSize); + memset(&info, 0, sizeof(info)); + sec_status = QueryContextAttributesA(&client.ctxt, SECPKG_ATTR_NEGOTIATION_INFO, &info); +todo_wine + ok(sec_status == SEC_E_OK, "QueryContextAttributesA returned %08x\n", sec_status); + + pi = info.PackageInfo; + ok(info.NegotiationState == SECPKG_NEGOTIATION_COMPLETE, "got %u\n", info.NegotiationState); +todo_wine + ok(pi != NULL, "expected non-NULL PackageInfo\n"); + if (pi) + { + UINT expected, got; + char *eob; + + ok(pi->fCapabilities == NTLM_BASE_CAPS || + pi->fCapabilities == (NTLM_BASE_CAPS|SECPKG_FLAG_READONLY_WITH_CHECKSUM) || + pi->fCapabilities == (NTLM_BASE_CAPS|SECPKG_FLAG_RESTRICTED_TOKENS) || + pi->fCapabilities == (NTLM_BASE_CAPS|SECPKG_FLAG_RESTRICTED_TOKENS| + SECPKG_FLAG_APPCONTAINER_CHECKS), + "got %08x\n", pi->fCapabilities); + ok(pi->wVersion == 1, "got %u\n", pi->wVersion); + ok(pi->wRPCID == RPC_C_AUTHN_WINNT, "got %u\n", pi->wRPCID); + ok(!lstrcmpA( pi->Name, "NTLM" ), "got %s\n", pi->Name); + + expected = sizeof(*pi) + lstrlenA(pi->Name) + 1 + lstrlenA(pi->Comment) + 1; + got = HeapSize(GetProcessHeap(), 0, pi); + ok(got == expected, "got %u, expected %u\n", got, expected); + eob = (char *)pi + expected; + ok(pi->Name + lstrlenA(pi->Name) < eob, "Name doesn't fit into allocated block\n"); + ok(pi->Comment + lstrlenA(pi->Comment) < eob, "Comment doesn't fit into allocated block\n"); + + sec_status = FreeContextBuffer(pi); + ok(sec_status == SEC_E_OK, "FreeContextBuffer error %#x\n", sec_status); + } + tAuthend: cleanupBuffers(&client); cleanupBuffers(&server);
1
0
0
0
Dmitry Timoshkov : secur32/tests: Add a test for Negotiate behaviour with SECPKG_ATTR_NEGOTIATION_INFO query.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 8d4d7c7251e6f0279757a6f0cba0a654db5fb9c2 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8d4d7c7251e6f0279757a6f0c…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Thu Dec 14 17:17:02 2017 +0800 secur32/tests: Add a test for Negotiate behaviour with SECPKG_ATTR_NEGOTIATION_INFO query. To show that QueryContextAttributes(SECPKG_ATTR_NEGOTIATION_INFO) allocates flat memory block for the PackageInfo structure. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/secur32/tests/negotiate.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/dlls/secur32/tests/negotiate.c b/dlls/secur32/tests/negotiate.c index a1c430d..2f1228c 100644 --- a/dlls/secur32/tests/negotiate.c +++ b/dlls/secur32/tests/negotiate.c @@ -284,13 +284,16 @@ static void test_authentication(void) memset( &info, 0, sizeof(info) ); status_c = QueryContextAttributesA( &client.ctxt, SECPKG_ATTR_NEGOTIATION_INFO, &info ); - ok( status_c == SEC_E_OK, "pQueryContextAttributesA returned %08x\n", status_c ); + ok( status_c == SEC_E_OK, "QueryContextAttributesA returned %08x\n", status_c ); pi = info.PackageInfo; ok( info.NegotiationState == SECPKG_NEGOTIATION_COMPLETE, "got %u\n", info.NegotiationState ); ok( pi != NULL, "expected non-NULL PackageInfo\n" ); if (pi) { + UINT expected, got; + char *eob; + ok( pi->fCapabilities == NTLM_BASE_CAPS || pi->fCapabilities == (NTLM_BASE_CAPS|SECPKG_FLAG_READONLY_WITH_CHECKSUM) || pi->fCapabilities == (NTLM_BASE_CAPS|SECPKG_FLAG_RESTRICTED_TOKENS) || @@ -300,6 +303,19 @@ static void test_authentication(void) ok( pi->wVersion == 1, "got %u\n", pi->wVersion ); ok( pi->wRPCID == RPC_C_AUTHN_WINNT, "got %u\n", pi->wRPCID ); ok( !lstrcmpA( pi->Name, "NTLM" ), "got %s\n", pi->Name ); + + expected = sizeof(*pi) + lstrlenA(pi->Name) + 1 + lstrlenA(pi->Comment) + 1; + got = HeapSize(GetProcessHeap(), 0, pi); +todo_wine + ok( got == expected, "got %u, expected %u\n", got, expected ); + eob = (char *)pi + expected; +todo_wine + ok( pi->Name + lstrlenA(pi->Name) < eob, "Name doesn't fit into allocated block\n" ); +todo_wine + ok( pi->Comment + lstrlenA(pi->Comment) < eob, "Comment doesn't fit into allocated block\n" ); + + status = FreeContextBuffer( pi ); + ok( status == SEC_E_OK, "FreeContextBuffer error %#x\n", status ); } done:
1
0
0
0
Martin Payne : user.exe16: Fix handling of 16-bit HBITMAPs in InsertMenu16.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 81fb745e407fa297fdb8167d4f3b8acbe327308c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=81fb745e407fa297fdb8167d4…
Author: Martin Payne <development(a)martinpayne.me.uk> Date: Wed Dec 13 10:24:32 2017 +0000 user.exe16: Fix handling of 16-bit HBITMAPs in InsertMenu16. Signed-off-by: Martin Payne <development(a)martinpayne.me.uk> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user.exe16/user.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dlls/user.exe16/user.c b/dlls/user.exe16/user.c index 729e973..f7d4109 100644 --- a/dlls/user.exe16/user.c +++ b/dlls/user.exe16/user.c @@ -2405,6 +2405,10 @@ BOOL16 WINAPI InsertMenu16( HMENU16 hMenu, UINT16 pos, UINT16 flags, if ((pos == (UINT16)-1) && (flags & MF_BYPOSITION)) pos32 = (UINT)-1; if (IS_MENU_STRING_ITEM(flags) && data) return InsertMenuA( HMENU_32(hMenu), pos32, flags, id, MapSL(data) ); + + /* If "data" is an HBITMAP, the high WORD will contain the application's DGROUP selector if the + * application cast (LPSTR)hBitmap rather than (LPSTR)(LONG)hBitmap. */ + if (flags & MF_BITMAP) data = (SEGPTR)HBITMAP_32(LOWORD(data)); return InsertMenuA( HMENU_32(hMenu), pos32, flags, id, (LPSTR)data ); }
1
0
0
0
Zebediah Figura : po: Fix some MSI translations.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: b9f32e16722fab5c6b9acf3e99c8a4720c7e14b1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b9f32e16722fab5c6b9acf3e9…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Wed Dec 13 18:39:59 2017 -0600 po: Fix some MSI translations. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- po/ar.po | 16 ++++------------ po/bg.po | 4 +--- po/ca.po | 16 ++++------------ po/cs.po | 16 ++++------------ po/da.po | 16 ++++------------ po/el.po | 4 +--- po/eo.po | 12 +++--------- po/es.po | 16 ++++------------ po/fr.po | 16 ++++------------ po/he.po | 12 +++--------- po/hr.po | 16 ++++------------ po/hu.po | 16 ++++------------ po/it.po | 16 ++++------------ po/ko.po | 16 ++++------------ po/nb_NO.po | 12 ++++++------ po/nl.po | 16 ++++------------ po/pl.po | 12 ++++-------- po/pt_BR.po | 16 ++++------------ po/pt_PT.po | 16 ++++------------ po/ro.po | 16 ++++------------ po/sk.po | 4 +--- po/sl.po | 16 ++++------------ po/sr_RS(a)cyrillic.po | 12 +++--------- po/sr_RS(a)latin.po | 11 +++-------- po/sv.po | 16 ++++------------ po/th.po | 4 +--- po/uk.po | 24 ++++++------------------ po/wa.po | 7 ++----- po/zh_CN.po | 8 ++++---- po/zh_TW.po | 16 ++++------------ 30 files changed, 106 insertions(+), 292 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=b9f32e16722fab5c6b9ac…
1
0
0
0
Alexandre Julliard : ntdll: Fix handling of floating point arguments in relay debugging on ARM.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 5e3534ee411a8c5baea5022705eac0e3c7f3cc70 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5e3534ee411a8c5baea502270…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Dec 14 11:44:57 2017 +0100 ntdll: Fix handling of floating point arguments in relay debugging on ARM. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/relay.c | 114 ++++++++++++++++++++++++++++++++++------------- tools/winebuild/spec32.c | 16 +++---- 2 files changed, 92 insertions(+), 38 deletions(-) diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c index 5d78420..a0c3cb1 100644 --- a/dlls/ntdll/relay.c +++ b/dlls/ntdll/relay.c @@ -468,6 +468,10 @@ DECLSPEC_HIDDEN void * WINAPI relay_trace_entry( struct relay_descr *descr, unsi struct relay_private_data *data = descr->private; struct relay_entry_point *entry_point = data->entry_points + ordinal; unsigned int i, pos; +#ifndef __SOFTFP__ + unsigned int float_pos = 0, double_pos = 0; + const union fpregs { float s[16]; double d[8]; } *fpstack = (const union fpregs *)stack - 1; +#endif TRACE( "\1Call %s(", func_name( data, ordinal )); @@ -476,6 +480,7 @@ DECLSPEC_HIDDEN void * WINAPI relay_trace_entry( struct relay_descr *descr, unsi switch (arg_types[i]) { case 'j': /* int64 */ + pos = (pos + 1) & ~1; TRACE( "%x%08x", stack[pos+1], stack[pos] ); pos += 2; break; @@ -489,6 +494,30 @@ DECLSPEC_HIDDEN void * WINAPI relay_trace_entry( struct relay_descr *descr, unsi case 'w': /* wstr */ trace_string_w( stack[pos++] ); break; + case 'f': /* float */ +#ifndef __SOFTFP__ + if (!(float_pos % 2)) float_pos = max( float_pos, double_pos * 2 ); + if (float_pos < 16) + { + TRACE( "%g", fpstack->s[float_pos++] ); + break; + } +#endif + TRACE( "%g", *(const float *)&stack[pos++] ); + break; + case 'd': /* double */ +#ifndef __SOFTFP__ + double_pos = max( (float_pos + 1) / 2, double_pos ); + if (double_pos < 8) + { + TRACE( "%g", fpstack->d[double_pos++] ); + break; + } +#endif + pos = (pos + 1) & ~1; + TRACE( "%g", *(const double *)&stack[pos] ); + pos += 2; + break; case 'i': /* long */ default: TRACE( "%08x", stack[pos++] ); @@ -496,6 +525,14 @@ DECLSPEC_HIDDEN void * WINAPI relay_trace_entry( struct relay_descr *descr, unsi } if (!is_ret_val( arg_types[i+1] )) TRACE( "," ); } + +#ifndef __SOFTFP__ + if (float_pos || double_pos) + { + pos |= 0x80000000; + stack = (const DWORD *)fpstack; /* retaddr is below the fp regs */ + } +#endif *nb_args = pos; TRACE( ") ret=%08x\n", stack[-1] ); return entry_point->orig_func; @@ -519,39 +556,56 @@ DECLSPEC_HIDDEN void WINAPI relay_trace_exit( struct relay_descr *descr, unsigne TRACE( " retval=%08x ret=%08x\n", (UINT)retval, retaddr ); } -extern LONGLONG CDECL call_entry_point( void *func, int nb_args, const DWORD *args ); -__ASM_GLOBAL_FUNC( call_entry_point, +extern LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx, const DWORD *stack ); +__ASM_GLOBAL_FUNC( relay_call, ".arm\n\t" - "push {r4, r5, LR}\n\t" - "mov r4, r0\n\t" - "mov r5, SP\n\t" + "push {r4-r8,lr}\n\t" + "sub sp, #16\n\t" + "mov r6, r2\n\t" + "add r3, sp, #12\n\t" + "mov r7, r0\n\t" + "mov r8, r1\n\t" + "bl " __ASM_NAME("relay_trace_entry") "\n\t" + "mov ip, r0\n\t" /* entry point */ + "mov r5, sp\n\t" + "ldr r1, [sp, #12]\n\t" /* number of args */ "lsl r3, r1, #2\n\t" - "sub SP, SP, r3\n\t" - "and SP, SP, #~7\n" - "1:\tsub r3, r3, #4\n\t" + "subs r3, #16\n\t" /* first 4 args are in registers */ + "ble 2f\n\t" + "sub sp, r3\n\t" + "and sp, #~7\n" + "add r2, r6, #16\n\t" /* skip r0-r3 */ + "1:\tsubs r3, r3, #4\n\t" "ldr r0, [r2, r3]\n\t" - "str r0, [SP, r3]\n\t" - "cmp r3, #0\n\t" - "bgt 1b\n\t" - "cmp r1, #0\n\t" - "beq 3f\n\t" - "cmp r1, #2\n\t" - "bgt 2f\n\t" - "pop {r0-r1}\n\t" - "b 3f\n" - "2:\tpop {r0-r3}\n" - "3:\tblx r4\n\t" - "mov SP, r5\n\t" - "pop {r4, r5, PC}" ) - -static LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx, const DWORD *stack ) -{ - unsigned int nb_args; - void *func = relay_trace_entry( descr, idx, stack, &nb_args ); - LONGLONG ret = call_entry_point( func, nb_args, stack ); - relay_trace_exit( descr, idx, stack[-1], ret ); - return ret; -} + "str r0, [sp, r3]\n\t" + "bgt 1b\n" + "2:\t" +#ifndef __SOFTFP__ + "tst r1, #0x80000000\n\t" + "ldm r6, {r0-r3}\n\t" + "vldmdbne r6!, {s0-s15}\n\t" +#else + "ldm r6, {r0-r3}\n\t" +#endif + "blx ip\n\t" + "mov sp, r5\n\t" + "ldr r2, [r6, #-4]\n\t" /* retaddr */ + "mov r4, r0\n\t" + "mov r5, r1\n\t" + "mov r0, r7\n\t" + "mov r1, r8\n\t" + "strd r4, [sp]\n\t" +#ifndef __SOFTFP__ + "vstr d0, [sp, #8]\n\t" /* preserve floating point retval */ + "bl " __ASM_NAME("relay_trace_exit") "\n\t" + "vldr d0, [sp, #8]\n\t" +#else + "bl " __ASM_NAME("relay_trace_exit") "\n\t" +#endif + "mov r0, r4\n\t" + "mov r1, r5\n\t" + "add sp, #16\n\t" + "pop {r4-r8,pc}" ) #elif defined(__aarch64__) diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c index d028726..3552eca 100644 --- a/tools/winebuild/spec32.c +++ b/tools/winebuild/spec32.c @@ -255,16 +255,16 @@ static void output_relay_debug( DLLSPEC *spec ) case CPU_ARM: { unsigned int mask, val, count = 0; - unsigned int stack_size = min( 16, (get_args_size( odp ) + 7) & ~7 ); + int j, has_float = 0; + + if (strcmp( float_abi_option, "soft" )) + for (j = 0; j < odp->u.func.nb_args && !has_float; j++) + has_float = is_float_arg( odp, j ); val = (odp->u.func.args_str_offset << 16) | (i - spec->base); - switch (stack_size) - { - case 16: output( "\tpush {r0-r3}\n" ); break; - case 8: output( "\tpush {r0-r1}\n" ); break; - case 0: break; - } + output( "\tpush {r0-r3}\n" ); output( "\tmov r2, SP\n"); + if (has_float) output( "\tvpush {s0-s15}\n" ); output( "\tpush {LR}\n" ); output( "\tsub SP, #4\n"); for (mask = 0xff; mask; mask <<= 8) @@ -275,7 +275,7 @@ static void output_relay_debug( DLLSPEC *spec ) output( "\tldr IP, [r0, #4]\n"); output( "1:\tblx IP\n"); output( "\tldr IP, [SP, #4]\n" ); - output( "\tadd SP, #%u\n", stack_size + 8 ); + output( "\tadd SP, #%u\n", 24 + (has_float ? 64 : 0) ); output( "\tbx IP\n"); output( "2:\t.long .L__wine_spec_relay_descr-1b\n" ); break;
1
0
0
0
Alexandre Julliard : ntdll: Run the thread/ process detach code on the thread stack.
by Alexandre Julliard
14 Dec '17
14 Dec '17
Module: wine Branch: master Commit: 7e9f1878dbaa5729c47b3b373e20fc22d2311a88 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=7e9f1878dbaa5729c47b3b373…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Dec 14 10:54:56 2017 +0100 ntdll: Run the thread/process detach code on the thread stack. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/ntdll_misc.h | 3 ++- dlls/ntdll/signal_arm.c | 12 ++++++------ dlls/ntdll/signal_arm64.c | 12 ++++++------ dlls/ntdll/signal_i386.c | 12 ++++++------ dlls/ntdll/signal_powerpc.c | 12 ++++++------ dlls/ntdll/signal_x86_64.c | 12 ++++++------ dlls/ntdll/thread.c | 24 ++++++++++++++---------- 7 files changed, 46 insertions(+), 41 deletions(-) diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index c9c79fb..80bca0c 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -69,6 +69,8 @@ extern void signal_init_thread( TEB *teb ) DECLSPEC_HIDDEN; extern void signal_init_process(void) DECLSPEC_HIDDEN; extern void signal_start_thread( LPTHREAD_START_ROUTINE entry, void *arg, BOOL suspend ) DECLSPEC_HIDDEN; extern void signal_start_process( LPTHREAD_START_ROUTINE entry, BOOL suspend ) DECLSPEC_HIDDEN; +extern void DECLSPEC_NORETURN signal_exit_thread( int status ) DECLSPEC_HIDDEN; +extern void DECLSPEC_NORETURN signal_exit_process( int status ) DECLSPEC_HIDDEN; extern void version_init( const WCHAR *appname ) DECLSPEC_HIDDEN; extern void debug_init(void) DECLSPEC_HIDDEN; extern HANDLE thread_init(void) DECLSPEC_HIDDEN; @@ -86,7 +88,6 @@ extern void server_init_process(void) DECLSPEC_HIDDEN; extern void server_init_process_done(void) DECLSPEC_HIDDEN; extern size_t server_init_thread( void *entry_point, BOOL *suspend ) DECLSPEC_HIDDEN; extern void DECLSPEC_NORETURN abort_thread( int status ) DECLSPEC_HIDDEN; -extern void DECLSPEC_NORETURN terminate_thread( int status ) DECLSPEC_HIDDEN; extern void DECLSPEC_NORETURN exit_thread( int status ) DECLSPEC_HIDDEN; extern sigset_t server_block_set DECLSPEC_HIDDEN; extern unsigned int server_call_unlocked( void *req_ptr ) DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index 64ff1e0..dcb4564 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -1233,7 +1233,7 @@ static void call_thread_entry_point( LPTHREAD_START_ROUTINE entry, void *arg ) __TRY { TRACE_(relay)( "\1Starting thread proc %p (arg=%p)\n", entry, arg ); - exit_thread( entry( arg )); + RtlExitUserThread( entry( arg )); } __EXCEPT(unhandled_exception_filter) { @@ -1302,19 +1302,19 @@ void signal_start_process( LPTHREAD_START_ROUTINE entry, BOOL suspend ) } /*********************************************************************** - * RtlExitUserThread (NTDLL.@) + * signal_exit_thread */ -void WINAPI RtlExitUserThread( ULONG status ) +void signal_exit_thread( int status ) { exit_thread( status ); } /*********************************************************************** - * abort_thread + * signal_exit_process */ -void abort_thread( int status ) +void signal_exit_process( int status ) { - terminate_thread( status ); + exit( status ); } /********************************************************************** diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index 6905ab4..a04fe93 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -965,7 +965,7 @@ static void WINAPI call_thread_entry_point( LPTHREAD_START_ROUTINE entry, void * __TRY { TRACE_(relay)( "\1Starting thread proc %p (arg=%p)\n", entry, arg ); - exit_thread( entry( arg )); + RtlExitUserThread( entry( arg )); } __EXCEPT(unhandled_exception_filter) { @@ -1034,19 +1034,19 @@ void signal_start_process( LPTHREAD_START_ROUTINE entry, BOOL suspend ) } /*********************************************************************** - * RtlExitUserThread (NTDLL.@) + * signal_exit_thread */ -void WINAPI RtlExitUserThread( ULONG status ) +void signal_exit_thread( int status ) { exit_thread( status ); } /*********************************************************************** - * abort_thread + * signal_exit_process */ -void abort_thread( int status ) +void signal_exit_process( int status ) { - terminate_thread( status ); + exit( status ); } /********************************************************************** diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 351b67c..4be573e 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -2989,21 +2989,21 @@ void signal_start_process( LPTHREAD_START_ROUTINE entry, BOOL suspend ) /*********************************************************************** - * RtlExitUserThread (NTDLL.@) + * signal_exit_thread */ -void WINAPI RtlExitUserThread( ULONG status ) +void signal_exit_thread( int status ) { if (!x86_thread_data()->exit_frame) exit_thread( status ); call_thread_exit_func( status, exit_thread, x86_thread_data()->exit_frame ); } /*********************************************************************** - * abort_thread + * signal_exit_process */ -void abort_thread( int status ) +void signal_exit_process( int status ) { - if (!x86_thread_data()->exit_frame) terminate_thread( status ); - call_thread_exit_func( status, terminate_thread, x86_thread_data()->exit_frame ); + if (!x86_thread_data()->exit_frame) exit( status ); + call_thread_exit_func( status, exit, x86_thread_data()->exit_frame ); } /********************************************************************** diff --git a/dlls/ntdll/signal_powerpc.c b/dlls/ntdll/signal_powerpc.c index 234fdc4..3182a13 100644 --- a/dlls/ntdll/signal_powerpc.c +++ b/dlls/ntdll/signal_powerpc.c @@ -1143,7 +1143,7 @@ static void WINAPI call_thread_entry_point( LPTHREAD_START_ROUTINE entry, void * __TRY { TRACE_(relay)( "\1Starting thread proc %p (arg=%p)\n", entry, arg ); - exit_thread( entry( arg )); + RtlExitUserThread( entry( arg )); } __EXCEPT(unhandled_exception_filter) { @@ -1212,19 +1212,19 @@ void signal_start_process( LPTHREAD_START_ROUTINE entry, BOOL suspend ) } /*********************************************************************** - * RtlExitUserThread (NTDLL.@) + * signal_exit_thread */ -void WINAPI RtlExitUserThread( ULONG status ) +void signal_exit_thread( int status ) { exit_thread( status ); } /*********************************************************************** - * abort_thread + * signal_exit_process */ -void abort_thread( int status ) +void signal_exit_process( int status ) { - terminate_thread( status ); + exit( status ); } /********************************************************************** diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index c955c4c..1f76640 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -4160,21 +4160,21 @@ void signal_start_process( LPTHREAD_START_ROUTINE entry, BOOL suspend ) /*********************************************************************** - * RtlExitUserThread (NTDLL.@) + * signal_exit_thread */ -void WINAPI RtlExitUserThread( ULONG status ) +void signal_exit_thread( int status ) { if (!amd64_thread_data()->exit_frame) exit_thread( status ); call_thread_exit_func( status, exit_thread, amd64_thread_data()->exit_frame ); } /*********************************************************************** - * abort_thread + * signal_exit_process */ -void abort_thread( int status ) +void signal_exit_process( int status ) { - if (!amd64_thread_data()->exit_frame) terminate_thread( status ); - call_thread_exit_func( status, terminate_thread, amd64_thread_data()->exit_frame ); + if (!amd64_thread_data()->exit_frame) exit( status ); + call_thread_exit_func( status, exit, amd64_thread_data()->exit_frame ); } /********************************************************************** diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c index 7b726ab..6abfd85 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -426,13 +426,21 @@ static void free_thread_data( TEB *teb ) /*********************************************************************** - * terminate_thread + * abort_thread */ -void terminate_thread( int status ) +void abort_thread( int status ) { pthread_sigmask( SIG_BLOCK, &server_block_set, NULL ); if (interlocked_xchg_add( &nb_threads, -1 ) <= 1) _exit( status ); + signal_exit_thread( status ); +} + +/*********************************************************************** + * exit_thread + */ +void exit_thread( int status ) +{ close( ntdll_get_thread_data()->wait_fd[0] ); close( ntdll_get_thread_data()->wait_fd[1] ); close( ntdll_get_thread_data()->reply_fd ); @@ -442,9 +450,9 @@ void terminate_thread( int status ) /*********************************************************************** - * exit_thread + * RtlExitUserThread (NTDLL.@) */ -void exit_thread( int status ) +void WINAPI RtlExitUserThread( ULONG status ) { static void *prev_teb; TEB *teb; @@ -463,7 +471,7 @@ void exit_thread( int status ) if (interlocked_xchg_add( &nb_threads, -1 ) <= 1) { LdrShutdownProcess(); - exit( status ); + signal_exit_process( status ); } LdrShutdownThread(); @@ -482,11 +490,7 @@ void exit_thread( int status ) } } - close( ntdll_get_thread_data()->wait_fd[0] ); - close( ntdll_get_thread_data()->wait_fd[1] ); - close( ntdll_get_thread_data()->reply_fd ); - close( ntdll_get_thread_data()->request_fd ); - pthread_exit( UIntToPtr(status) ); + signal_exit_thread( status ); }
1
0
0
0
← Newer
1
...
13
14
15
16
17
18
19
...
45
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
Results per page:
10
25
50
100
200