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
April 2020
----- 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
1016 discussions
Start a n
N
ew thread
Dmitry Timoshkov : wldap32: Locally cache "supportedControl" rootDSE attribute, and check it in ldap_set_option(LDAP_OPT_SERVER_CONTROLS).
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: 07b18a7672308ddc5124749603ea7f5c8b5ee254 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=07b18a7672308ddc51247496…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Fri Apr 3 16:57:03 2020 +0800 wldap32: Locally cache "supportedControl" rootDSE attribute, and check it in ldap_set_option(LDAP_OPT_SERVER_CONTROLS). Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/adsldp/tests/ldap.c | 3 --- dlls/wldap32/bind.c | 4 +++ dlls/wldap32/option.c | 57 +++++++++++++++++++++++++++++++++++++++++- dlls/wldap32/tests/parse.c | 2 -- dlls/wldap32/winldap_private.h | 1 + 5 files changed, 61 insertions(+), 6 deletions(-) diff --git a/dlls/adsldp/tests/ldap.c b/dlls/adsldp/tests/ldap.c index 80815b07a0..208a9fa2fe 100644 --- a/dlls/adsldp/tests/ldap.c +++ b/dlls/adsldp/tests/ldap.c @@ -498,15 +498,12 @@ todo_wine pref[1].vValue.Integer = ADS_SECURITY_INFO_OWNER | ADS_SECURITY_INFO_GROUP | ADS_SECURITY_INFO_DACL; pref[1].dwStatus = 0xdeadbeef; hr = IDirectorySearch_SetSearchPreference(ds, pref, ARRAY_SIZE(pref)); -todo_wine ok(hr == S_ADS_ERRORSOCCURRED, "got %#x\n", hr); ok(pref[0].dwStatus == ADS_STATUS_S_OK, "got %d\n", pref[0].dwStatus); /*
ldap.forumsys.com
doesn't support NT security, real ADs DC - does */ -todo_wine ok(pref[1].dwStatus == ADS_STATUS_INVALID_SEARCHPREF, "got %d\n", pref[1].dwStatus); hr = IDirectorySearch_ExecuteSearch(ds, (WCHAR *)L"(objectClass=*)", NULL, ~0, &sh); -todo_wine ok(hr == S_OK, "got %#x\n", hr); if (hr != S_OK) goto fail; diff --git a/dlls/wldap32/bind.c b/dlls/wldap32/bind.c index aedda13634..1498dc49fe 100644 --- a/dlls/wldap32/bind.c +++ b/dlls/wldap32/bind.c @@ -766,6 +766,8 @@ ULONG CDECL WLDAP32_ldap_unbind( WLDAP32_LDAP *ld ) if (ld) { ret = map_error( ldap_unbind_ext( ld->ld, NULL, NULL )); + if ( ld->ld_server_ctrls ) + ldap_value_free_len( ld->ld_server_ctrls ); heap_free( ld ); } else @@ -797,6 +799,8 @@ ULONG CDECL WLDAP32_ldap_unbind_s( WLDAP32_LDAP *ld ) if (ld) { ret = map_error( ldap_unbind_ext_s( ld->ld, NULL, NULL )); + if ( ld->ld_server_ctrls ) + ldap_value_free_len( ld->ld_server_ctrls ); heap_free( ld ); } else diff --git a/dlls/wldap32/option.c b/dlls/wldap32/option.c index 8a8a86b579..87eb779953 100644 --- a/dlls/wldap32/option.c +++ b/dlls/wldap32/option.c @@ -398,6 +398,58 @@ ULONG CDECL ldap_set_optionA( WLDAP32_LDAP *ld, int option, void *value ) return ret; } +#ifdef HAVE_LDAP + +static BOOL query_supported_server_ctrls( WLDAP32_LDAP *ld ) +{ + char *attrs[] = { (char *)"supportedControl", NULL }; + LDAPMessage *res, *entry; + + if ( ld->ld_server_ctrls ) return TRUE; + + if (ldap_search_ext_s( ld->ld, (char *)"", LDAP_SCOPE_BASE, (char *)"(objectClass=*)", attrs, FALSE, + NULL, NULL, NULL, 0, &res ) != LDAP_SUCCESS) + return FALSE; + + entry = ldap_first_entry( ld->ld, res ); + if (entry) + { + ULONG count, i; + + ld->ld_server_ctrls = ldap_get_values_len( ld->ld, entry, attrs[0] ); + count = ldap_count_values_len( ld->ld_server_ctrls ); + for (i = 0; i < count; i++) + TRACE("%u: %s\n", i, debugstr_an( ld->ld_server_ctrls[i]->bv_val, ld->ld_server_ctrls[i]->bv_len )); + } + + ldap_msgfree( res ); + + return ld->ld_server_ctrls != NULL; +} + +static BOOL is_supported_server_ctrls( WLDAP32_LDAP *ld, LDAPControl **ctrls ) +{ + ULONG user_count, server_count, i, n, supported = 0; + + if (!query_supported_server_ctrls( ld )) + return TRUE; /* can't verify, let the server handle it on next query */ + + user_count = controlarraylenU( ctrls ); + server_count = ldap_count_values_len( ld->ld_server_ctrls ); + + for (n = 0; n < user_count; n++) + { + for (i = 0; i < server_count; i++) + { + if (!strncmp( ctrls[n]->ldctl_oid, ld->ld_server_ctrls[i]->bv_val, ld->ld_server_ctrls[i]->bv_len)) + supported++; + } + } + + return supported == user_count; +} +#endif + /*********************************************************************** * ldap_set_optionW (WLDAP32.@) * @@ -433,7 +485,10 @@ ULONG CDECL ldap_set_optionW( WLDAP32_LDAP *ld, int option, void *value ) ctrlsU = controlarrayWtoU( value ); if (!ctrlsU) return WLDAP32_LDAP_NO_MEMORY; - ret = map_error( ldap_set_option( ld->ld, option, ctrlsU )); + if (!is_supported_server_ctrls( ld, ctrlsU )) + ret = WLDAP32_LDAP_PARAM_ERROR; + else + ret = map_error( ldap_set_option( ld->ld, option, ctrlsU )); controlarrayfreeU( ctrlsU ); return ret; } diff --git a/dlls/wldap32/tests/parse.c b/dlls/wldap32/tests/parse.c index c2435809d2..5a49b9c69d 100644 --- a/dlls/wldap32/tests/parse.c +++ b/dlls/wldap32/tests/parse.c @@ -201,12 +201,10 @@ static void test_ldap_server_control( void ) ctrls[0] = &mask; ctrls[1] = NULL; ret = ldap_set_optionW(ld, LDAP_OPT_SERVER_CONTROLS, ctrls); -todo_wine ok( ret == LDAP_PARAM_ERROR, "ldap_set_optionW should fail: 0x%x\n", ret ); res = NULL; ret = ldap_search_sA( ld, (char *)"OU=scientists,DC=example,DC=com", LDAP_SCOPE_BASE, (char *)"(objectclass=*)", NULL, FALSE, &res ); -todo_wine ok( !ret, "ldap_search_sA failed 0x%x\n", ret ); ok( res != NULL, "expected res != NULL\n" ); diff --git a/dlls/wldap32/winldap_private.h b/dlls/wldap32/winldap_private.h index 0332deafa2..30c12a909c 100644 --- a/dlls/wldap32/winldap_private.h +++ b/dlls/wldap32/winldap_private.h @@ -131,6 +131,7 @@ typedef struct wldap32 ULONG ld_cldaptimeout; ULONG ld_refhoplimit; ULONG ld_options; + struct berval **ld_server_ctrls; } WLDAP32_LDAP, *WLDAP32_PLDAP; typedef struct ldapmodA {
1
0
0
0
Dmitry Timoshkov : wldap32: Actually use private LDAP structure for internal storage.
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: 57cb1900b63ff98b3865e0259452cde2f9a2643a URL:
https://source.winehq.org/git/wine.git/?a=commit;h=57cb1900b63ff98b3865e025…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Fri Apr 3 16:56:57 2020 +0800 wldap32: Actually use private LDAP structure for internal storage. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wldap32/add.c | 8 ++++---- dlls/wldap32/bind.c | 24 +++++++++++++++--------- dlls/wldap32/compare.c | 8 ++++---- dlls/wldap32/control.c | 4 ++-- dlls/wldap32/delete.c | 8 ++++---- dlls/wldap32/dn.c | 2 +- dlls/wldap32/error.c | 2 +- dlls/wldap32/extended.c | 4 ++-- dlls/wldap32/init.c | 25 ++++++++++++++++--------- dlls/wldap32/misc.c | 20 ++++++++++---------- dlls/wldap32/modify.c | 8 ++++---- dlls/wldap32/modrdn.c | 8 ++++---- dlls/wldap32/option.c | 10 +++++----- dlls/wldap32/parse.c | 16 ++++++++-------- dlls/wldap32/rename.c | 4 ++-- dlls/wldap32/search.c | 10 +++++----- dlls/wldap32/value.c | 4 ++-- dlls/wldap32/winldap_private.h | 5 ++++- 18 files changed, 93 insertions(+), 77 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=57cb1900b63ff98b3865…
1
0
0
0
Dmitry Timoshkov : wldap32/tests: Test setting a not supported server control.
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: 4ebd194694cd725441173442e74914d54043f445 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4ebd194694cd725441173442…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Fri Apr 3 16:56:53 2020 +0800 wldap32/tests: Test setting a not supported server control. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wldap32/tests/parse.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/dlls/wldap32/tests/parse.c b/dlls/wldap32/tests/parse.c index d96ae654bf..c2435809d2 100644 --- a/dlls/wldap32/tests/parse.c +++ b/dlls/wldap32/tests/parse.c @@ -31,6 +31,10 @@ #define LDAP_AUTH_SIMPLE 0x80 #endif +#ifndef LDAP_OPT_SERVER_CONTROLS +#define LDAP_OPT_SERVER_CONTROLS 0x0012 +#endif + static void test_ldap_parse_sort_control( LDAP *ld ) { ULONG ret, result; @@ -164,10 +168,57 @@ static void test_ldap_bind_sA( void ) ldap_unbind( ld ); } +static void test_ldap_server_control( void ) +{ + /* SEQUENCE { INTEGER :: 0x07 } */ + static char mask_ber[5] = {0x30,0x03,0x02,0x01,0x07}; + LDAP *ld; + ULONG ret; + int version; + LDAPControlW *ctrls[2], mask; + LDAPMessage *res; + + ld = ldap_initA( (char *)"
ldap.forumsys.com
", 389 ); + ok( ld != NULL, "ldap_init failed\n" ); + + version = LDAP_VERSION3; + ret = ldap_set_optionW( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + if (ret == LDAP_SERVER_DOWN || ret == LDAP_UNAVAILABLE) + { + skip( "test server can't be reached\n" ); + ldap_unbind( ld ); + return; + } + + ret = ldap_connect( ld, NULL ); + ok( !ret, "ldap_connect failed 0x%08x\n", ret ); + + /* test setting a not supported server control */ + mask.ldctl_oid = (WCHAR *)L"1.2.840.113556.1.4.801"; + mask.ldctl_iscritical = TRUE; + mask.ldctl_value.bv_val = mask_ber; + mask.ldctl_value.bv_len = sizeof(mask_ber); + ctrls[0] = &mask; + ctrls[1] = NULL; + ret = ldap_set_optionW(ld, LDAP_OPT_SERVER_CONTROLS, ctrls); +todo_wine + ok( ret == LDAP_PARAM_ERROR, "ldap_set_optionW should fail: 0x%x\n", ret ); + + res = NULL; + ret = ldap_search_sA( ld, (char *)"OU=scientists,DC=example,DC=com", LDAP_SCOPE_BASE, (char *)"(objectclass=*)", NULL, FALSE, &res ); +todo_wine + ok( !ret, "ldap_search_sA failed 0x%x\n", ret ); + ok( res != NULL, "expected res != NULL\n" ); + + ldap_msgfree( res ); + ldap_unbind( ld ); +} + START_TEST (parse) { LDAP *ld; + test_ldap_server_control(); test_ldap_bind_sA(); ld = ldap_initA((char *)"
ldap.itd.umich.edu
", 389 );
1
0
0
0
Alexandre Julliard : libwine: Make the LDT functions obsolete.
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: 3b16f35413f3a6641df42b782ead294f343e7d5e URL:
https://source.winehq.org/git/wine.git/?a=commit;h=3b16f35413f3a6641df42b78…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Fri Apr 3 10:48:41 2020 +0200 libwine: Make the LDT functions obsolete. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/wine/library.h | 110 ------------------------------ libs/wine/ldt.c | 177 +++++++++++++++++++++++++++++++++++-------------- libs/wine/wine.map | 40 +++++------ 3 files changed, 149 insertions(+), 178 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=3b16f35413f3a6641df4…
1
0
0
0
Alexandre Julliard : ntdll: Avoid using the selector functions from libwine.
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: 1124236c20c16eb129919cd02d2fae2b73570741 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=1124236c20c16eb129919cd0…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Fri Apr 3 10:47:58 2020 +0200 ntdll: Avoid using the selector functions from libwine. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/signal_i386.c | 81 ++++++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 0e033d53ba..c953d18a65 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -550,6 +550,13 @@ static inline struct x86_thread_data *x86_thread_data(void) return (struct x86_thread_data *)NtCurrentTeb()->SystemReserved2; } +static inline WORD get_cs(void) { WORD res; __asm__( "movw %%cs,%0" : "=r" (res) ); return res; } +static inline WORD get_ds(void) { WORD res; __asm__( "movw %%ds,%0" : "=r" (res) ); return res; } +static inline WORD get_fs(void) { WORD res; __asm__( "movw %%fs,%0" : "=r" (res) ); return res; } +static inline WORD get_gs(void) { WORD res; __asm__( "movw %%gs,%0" : "=r" (res) ); return res; } +static inline void set_fs( WORD val ) { __asm__( "mov %0,%%fs" :: "r" (val)); } +static inline void set_gs( WORD val ) { __asm__( "mov %0,%%gs" :: "r" (val)); } + /* Exception record for handling exceptions happening inside exception handlers */ typedef struct { @@ -836,8 +843,8 @@ static void wine_sigacthandler( int signal, siginfo_t *siginfo, void *sigcontext __asm__ __volatile__("mov %ss,%ax; mov %ax,%ds; mov %ax,%es"); thread_data = (struct x86_thread_data *)get_current_teb()->SystemReserved2; - wine_set_fs( thread_data->fs ); - wine_set_gs( thread_data->gs ); + set_fs( thread_data->fs ); + set_gs( thread_data->gs ); libc_sigacthandler( signal, siginfo, sigcontext ); } @@ -885,19 +892,19 @@ static inline void *init_handler( const ucontext_t *sigcontext, WORD *fs, WORD * #ifdef FS_sig *fs = LOWORD(FS_sig(sigcontext)); #else - *fs = wine_get_fs(); + *fs = get_fs(); #endif #ifdef GS_sig *gs = LOWORD(GS_sig(sigcontext)); #else - *gs = wine_get_gs(); + *gs = get_gs(); #endif #ifndef __sun /* see above for Solaris handling */ { struct x86_thread_data *thread_data = (struct x86_thread_data *)teb->SystemReserved2; - wine_set_fs( thread_data->fs ); - wine_set_gs( thread_data->gs ); + set_fs( thread_data->fs ); + set_gs( thread_data->gs ); } #endif @@ -1133,12 +1140,12 @@ static inline void restore_context( const CONTEXT *context, ucontext_t *sigconte #ifdef GS_sig GS_sig(sigcontext) = context->SegGs; #else - wine_set_gs( context->SegGs ); + set_gs( context->SegGs ); #endif #ifdef FS_sig FS_sig(sigcontext) = context->SegFs; #else - wine_set_fs( context->SegFs ); + set_fs( context->SegFs ); #endif if (fpu) *fpu = context->FloatSave; @@ -1266,10 +1273,10 @@ void DECLSPEC_HIDDEN set_cpu_context( const CONTEXT *context ) else { CONTEXT newcontext = *context; - newcontext.SegDs = wine_get_ds(); - newcontext.SegEs = wine_get_es(); - newcontext.SegFs = wine_get_fs(); - newcontext.SegGs = wine_get_gs(); + newcontext.SegDs = get_ds(); + newcontext.SegEs = get_ds(); + newcontext.SegFs = get_fs(); + newcontext.SegGs = get_gs(); set_full_cpu_context( &newcontext ); } } @@ -1513,17 +1520,17 @@ NTSTATUS CDECL DECLSPEC_HIDDEN __regs_NtGetContextThread( DWORD edi, DWORD esi, context->Ebp = ebp; context->Esp = (DWORD)&retaddr; context->Eip = *(&edi - 1); - context->SegCs = wine_get_cs(); - context->SegSs = wine_get_ss(); + context->SegCs = get_cs(); + context->SegSs = get_ds(); context->EFlags = eflags; context->ContextFlags |= CONTEXT_CONTROL; } if (needed_flags & CONTEXT_SEGMENTS) { - context->SegDs = wine_get_ds(); - context->SegEs = wine_get_es(); - context->SegFs = wine_get_fs(); - context->SegGs = wine_get_gs(); + context->SegDs = get_ds(); + context->SegEs = get_ds(); + context->SegFs = get_fs(); + context->SegGs = get_gs(); context->ContextFlags |= CONTEXT_SEGMENTS; } if (needed_flags & CONTEXT_FLOATING_POINT) save_fpu( context ); @@ -1937,12 +1944,12 @@ static void setup_raise_exception( ucontext_t *sigcontext, struct stack_layout * EIP_sig(sigcontext) = (DWORD)raise_generic_exception; /* clear single-step, direction, and align check flag */ EFL_sig(sigcontext) &= ~(0x100|0x400|0x40000); - CS_sig(sigcontext) = wine_get_cs(); - DS_sig(sigcontext) = wine_get_ds(); - ES_sig(sigcontext) = wine_get_es(); - FS_sig(sigcontext) = wine_get_fs(); - GS_sig(sigcontext) = wine_get_gs(); - SS_sig(sigcontext) = wine_get_ss(); + CS_sig(sigcontext) = get_cs(); + DS_sig(sigcontext) = get_ds(); + ES_sig(sigcontext) = get_ds(); + FS_sig(sigcontext) = get_fs(); + GS_sig(sigcontext) = get_gs(); + SS_sig(sigcontext) = get_ds(); stack->ret_addr = (void *)0xdeadbabe; /* raise_generic_exception must not return */ stack->rec_ptr = &stack->rec; /* arguments for raise_generic_exception */ stack->context_ptr = &stack->context; @@ -2435,7 +2442,7 @@ static void ldt_init(void) { #ifdef __linux__ /* the preloader may have allocated it already */ - gdt_fs_sel = wine_get_fs(); + gdt_fs_sel = get_fs(); if (!gdt_fs_sel || !is_gdt_sel( gdt_fs_sel )) { struct modify_ldt_s ldt_info = { -1 }; @@ -2462,7 +2469,7 @@ WORD ldt_alloc_fs( TEB *teb, int first_thread ) if (first_thread) /* no locking for first thread */ { /* leave some space if libc is using the LDT for %gs */ - if (!is_gdt_sel( wine_get_gs() )) first_ldt_entry = 512; + if (!is_gdt_sel( get_gs() )) first_ldt_entry = 512; idx = first_ldt_entry; ldt_set_entry( (idx << 3) | 7, entry ); } @@ -2505,7 +2512,7 @@ static void ldt_set_fs( WORD sel, TEB *teb ) i386_set_fsbase( teb ); #endif } - wine_set_fs( sel ); + set_fs( sel ); } @@ -2524,11 +2531,11 @@ NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_ { if (!(info->Selector & ~3)) info->Entry = null_entry; - else if ((info->Selector | 3) == wine_get_cs()) + else if ((info->Selector | 3) == get_cs()) info->Entry = ldt_make_entry( 0, ~0u, LDT_FLAGS_CODE | LDT_FLAGS_32BIT ); - else if ((info->Selector | 3) == wine_get_ds()) + else if ((info->Selector | 3) == get_ds()) info->Entry = ldt_make_entry( 0, ~0u, LDT_FLAGS_DATA | LDT_FLAGS_32BIT ); - else if ((info->Selector | 3) == wine_get_fs()) + else if ((info->Selector | 3) == get_fs()) info->Entry = ldt_make_entry( NtCurrentTeb(), 0xfff, LDT_FLAGS_DATA | LDT_FLAGS_32BIT ); else return STATUS_UNSUCCESSFUL; @@ -2654,7 +2661,7 @@ void signal_init_thread( TEB *teb ) if (sigaltstack(&ss, NULL) == -1) perror( "sigaltstack" ); ldt_set_fs( thread_data->fs, teb ); - thread_data->gs = wine_get_gs(); + thread_data->gs = get_gs(); #ifdef __GNUC__ __asm__ volatile ("fninit; fldcw %0" : : "m" (fpu_cw)); @@ -3000,12 +3007,12 @@ void DECLSPEC_HIDDEN call_thread_func( LPTHREAD_START_ROUTINE entry, void *arg ) */ static void init_thread_context( CONTEXT *context, LPTHREAD_START_ROUTINE entry, void *arg, void *relay ) { - context->SegCs = wine_get_cs(); - context->SegDs = wine_get_ds(); - context->SegEs = wine_get_es(); - context->SegFs = wine_get_fs(); - context->SegGs = wine_get_gs(); - context->SegSs = wine_get_ss(); + context->SegCs = get_cs(); + context->SegDs = get_ds(); + context->SegEs = get_ds(); + context->SegFs = get_fs(); + context->SegGs = get_gs(); + context->SegSs = get_ds(); context->EFlags = 0x202; context->Eax = (DWORD)entry; context->Ebx = (DWORD)arg;
1
0
0
0
Alexandre Julliard : libwine: Avoid using wine_get/set_fs().
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: a698750630f6849dd175474975d1e78794f276cf URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a698750630f6849dd1754749…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Fri Apr 3 10:47:33 2020 +0200 libwine: Avoid using wine_get/set_fs(). Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/wine/ldt.c | 11 +++++++---- libs/wine/loader.c | 7 ++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libs/wine/ldt.c b/libs/wine/ldt.c index baf12a2e3a..5fabd1968d 100644 --- a/libs/wine/ldt.c +++ b/libs/wine/ldt.c @@ -382,7 +382,7 @@ unsigned short wine_ldt_alloc_fs(void) int ret; /* the preloader may have allocated it already */ - global_fs_sel = wine_get_fs(); + __asm__( "mov %%fs,%0" : "=r" (global_fs_sel) ); if (global_fs_sel && is_gdt_sel(global_fs_sel)) return global_fs_sel; memset( &ldt_info, 0, sizeof(ldt_info) ); @@ -431,7 +431,7 @@ void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry ) { internal_set_entry( sel, entry ); } - wine_set_fs( sel ); + __asm__( "mov %0,%%fs" :: "r" (sel) ); } @@ -442,11 +442,14 @@ void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry ) */ void wine_ldt_free_fs( unsigned short sel ) { + WORD fs; + if (is_gdt_sel(sel)) return; /* nothing to do */ - if (!((wine_get_fs() ^ sel) & ~3)) + __asm__( "mov %%fs,%0" : "=r" (fs) ); + if (!((fs ^ sel) & ~3)) { /* FIXME: if freeing current %fs we cannot acquire locks */ - wine_set_fs( 0 ); + __asm__( "mov %0,%%fs" :: "r" (0) ); internal_set_entry( sel, &null_entry ); wine_ldt_copy.flags[sel >> 3] = 0; } diff --git a/libs/wine/loader.c b/libs/wine/loader.c index 2a569f5b73..53e33c496a 100644 --- a/libs/wine/loader.c +++ b/libs/wine/loader.c @@ -923,10 +923,11 @@ static jstring wine_init_jni( JNIEnv *env, jobject obj, jobjectArray cmdline, jo #ifdef __i386__ { - unsigned short java_fs = wine_get_fs(); - wine_set_fs( 0 ); + unsigned short java_fs; + __asm__( "mov %%fs,%0" : "=r" (java_fs) ); + __asm__( "mov %0,%%fs" :: "r" (0) ); wine_init( argc, argv, error, sizeof(error) ); - wine_set_fs( java_fs ); + __asm__( "mov %0,%%fs" :: "r" (java_fs) ); } #else wine_init( argc, argv, error, sizeof(error) );
1
0
0
0
Alexandre Julliard : winex11: Avoid using wine_get/set_fs().
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: f82a5b610f0278450f7213c717e022c8206cfa86 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f82a5b610f0278450f7213c7…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Fri Apr 3 10:47:00 2020 +0200 winex11: Avoid using wine_get/set_fs(). Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winex11.drv/opengl.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index 7fb97f5f44..119da425d9 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -440,12 +440,14 @@ static BOOL X11DRV_WineGL_InitOpenglInfo(void) vis = pglXChooseVisual(gdi_display, screen, attribList); if (vis) { #ifdef __i386__ - WORD old_fs = wine_get_fs(); + WORD old_fs, new_fs; + __asm__( "mov %%fs,%0" : "=r" (old_fs) ); /* Create a GLX Context. Without one we can't query GL information */ ctx = pglXCreateContext(gdi_display, vis, None, GL_TRUE); - if (wine_get_fs() != old_fs) + __asm__( "mov %%fs,%0" : "=r" (new_fs) ); + __asm__( "mov %0,%%fs" :: "r" (old_fs) ); + if (old_fs != new_fs) { - wine_set_fs( old_fs ); ERR( "%%fs register corrupted, probably broken ATI driver, disabling OpenGL.\n" ); ERR( "You need to set the \"UseFastTls\" option to \"2\" in your X config file.\n" ); goto done;
1
0
0
0
Alexandre Julliard : wineandroid: Avoid using wine_get/set_fs().
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: 44c9355676d391a80c40e44897bb95566596cce1 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=44c9355676d391a80c40e448…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Fri Apr 3 10:46:29 2020 +0200 wineandroid: Avoid using wine_get/set_fs(). Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wineandroid.drv/device.c | 11 +++++------ dlls/wineandroid.drv/init.c | 6 ++++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index 0b8bf67ef1..c9321c4899 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -39,7 +39,6 @@ #include "ddk/wdm.h" #include "android.h" #include "wine/server.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(android); @@ -255,14 +254,14 @@ static inline BOOL is_client_in_process(void) #ifdef __i386__ /* the Java VM uses %fs/%gs for its own purposes, so we need to wrap the calls */ static WORD orig_fs, java_fs; -static inline void wrap_java_call(void) { wine_set_fs( java_fs ); } -static inline void unwrap_java_call(void) { wine_set_fs( orig_fs ); } +static inline void wrap_java_call(void) { __asm__( "mov %0,%%fs" :: "r" (java_fs) ); } +static inline void unwrap_java_call(void) { __asm__( "mov %0,%%fs" :: "r" (orig_fs) ); } static inline void init_java_thread( JavaVM *java_vm ) { - orig_fs = wine_get_fs(); + __asm__( "mov %%fs,%0" : "=r" (orig_fs) ); (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); - java_fs = wine_get_fs(); - wine_set_fs( orig_fs ); + __asm__( "mov %%fs,%0" : "=r" (java_fs) ); + __asm__( "mov %0,%%fs" :: "r" (orig_fs) ); } #elif defined(__x86_64__) diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c index 97cdb515d5..f02b163831 100644 --- a/dlls/wineandroid.drv/init.c +++ b/dlls/wineandroid.drv/init.c @@ -635,7 +635,8 @@ static BOOL process_attach(void) if ((java_vm = wine_get_java_vm())) /* running under Java */ { #ifdef __i386__ - WORD old_fs = wine_get_fs(); + WORD old_fs; + __asm__( "mov %%fs,%0" : "=r" (old_fs) ); #endif load_android_libs(); (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); @@ -643,7 +644,8 @@ static BOOL process_attach(void) (*jni_env)->RegisterNatives( jni_env, class, methods, ARRAY_SIZE( methods )); (*jni_env)->DeleteLocalRef( jni_env, class ); #ifdef __i386__ - wine_set_fs( old_fs ); /* the Java VM hijacks %fs for its own purposes, restore it */ + /* the Java VM hijacks %fs for its own purposes, restore it */ + __asm__( "mov %0,%%fs" :: "r" (old_fs) ); #endif } return TRUE;
1
0
0
0
Zebediah Figura : quartz: Merge the BaseWindow structure into video_window.
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: e3160986d0aaed865da1d52fe61735b61f1108cd URL:
https://source.winehq.org/git/wine.git/?a=commit;h=e3160986d0aaed865da1d52f…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Thu Apr 2 23:20:48 2020 -0500 quartz: Merge the BaseWindow structure into video_window. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/quartz/quartz_private.h | 43 ++---- dlls/quartz/videorenderer.c | 86 ++++++----- dlls/quartz/vmr9.c | 62 ++++---- dlls/quartz/window.c | 359 ++++++++++++++++++------------------------- 4 files changed, 240 insertions(+), 310 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=e3160986d0aaed865da1…
1
0
0
0
Zebediah Figura : quartz: Get rid of the BaseWindowFuncTable typedef.
by Alexandre Julliard
03 Apr '20
03 Apr '20
Module: wine Branch: master Commit: f9653494a9a6c9b4eff6563a4428b42b4d4423b1 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f9653494a9a6c9b4eff6563a…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Thu Apr 2 23:20:47 2020 -0500 quartz: Get rid of the BaseWindowFuncTable typedef. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/quartz/quartz_private.h | 10 +++++----- dlls/quartz/videorenderer.c | 6 +++--- dlls/quartz/vmr9.c | 5 +++-- dlls/quartz/window.c | 4 ++-- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/dlls/quartz/quartz_private.h b/dlls/quartz/quartz_private.h index cf696f7936..dafdc82d06 100644 --- a/dlls/quartz/quartz_private.h +++ b/dlls/quartz/quartz_private.h @@ -93,21 +93,21 @@ typedef struct tagBaseWindow LONG Width; LONG Height; - const struct BaseWindowFuncTable* pFuncsTable; + const struct video_window_ops *pFuncsTable; } BaseWindow; typedef RECT (WINAPI *BaseWindow_GetDefaultRect)(BaseWindow *This); typedef BOOL (WINAPI *BaseWindow_OnSize)(BaseWindow *This, LONG Height, LONG Width); -typedef struct BaseWindowFuncTable +struct video_window_ops { /* Required */ BaseWindow_GetDefaultRect pfnGetDefaultRect; /* Optional, WinProc Related */ BaseWindow_OnSize pfnOnSize; -} BaseWindowFuncTable; +}; -HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable* pFuncsTable) DECLSPEC_HIDDEN; +HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const struct video_window_ops *pFuncsTable) DECLSPEC_HIDDEN; HRESULT WINAPI BaseWindow_Destroy(BaseWindow *pBaseWindow) DECLSPEC_HIDDEN; HRESULT WINAPI BaseWindowImpl_PrepareWindow(BaseWindow *This) DECLSPEC_HIDDEN; @@ -126,7 +126,7 @@ struct video_window }; HRESULT video_window_init(struct video_window *window, const IVideoWindowVtbl *vtbl, - struct strmbase_filter *filter, struct strmbase_pin *pin, const BaseWindowFuncTable *func_table) DECLSPEC_HIDDEN; + struct strmbase_filter *filter, struct strmbase_pin *pin, const struct video_window_ops *ops) DECLSPEC_HIDDEN; void video_window_unregister_class(void) DECLSPEC_HIDDEN; HRESULT WINAPI BaseControlWindow_Destroy(struct video_window *window) DECLSPEC_HIDDEN; diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c index ef27a8a87d..24d734892c 100644 --- a/dlls/quartz/videorenderer.c +++ b/dlls/quartz/videorenderer.c @@ -344,7 +344,8 @@ static const struct strmbase_renderer_ops renderer_ops = .renderer_pin_query_interface = video_renderer_pin_query_interface, }; -static const BaseWindowFuncTable renderer_BaseWindowFuncTable = { +static const struct video_window_ops window_ops = +{ VideoRenderer_GetDefaultRect, VideoRenderer_OnSize }; @@ -710,8 +711,7 @@ HRESULT video_renderer_create(IUnknown *outer, IUnknown **out) object->IOverlay_iface.lpVtbl = &overlay_vtbl; hr = video_window_init(&object->baseControlWindow, &IVideoWindow_VTable, - &object->renderer.filter, &object->renderer.sink.pin, - &renderer_BaseWindowFuncTable); + &object->renderer.filter, &object->renderer.sink.pin, &window_ops); if (FAILED(hr)) goto fail; diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c index 3db6a82f6a..3778a8cee0 100644 --- a/dlls/quartz/vmr9.c +++ b/dlls/quartz/vmr9.c @@ -689,7 +689,8 @@ static BOOL WINAPI VMR9_OnSize(BaseWindow *This, LONG Width, LONG Height) return TRUE; } -static const BaseWindowFuncTable renderer_BaseWindowFuncTable = { +static const struct video_window_ops window_ops = +{ VMR9_GetDefaultRect, VMR9_OnSize, }; @@ -2319,7 +2320,7 @@ static HRESULT vmr_create(IUnknown *outer, IUnknown **out, const CLSID *clsid) object->IOverlay_iface.lpVtbl = &overlay_vtbl; hr = video_window_init(&object->baseControlWindow, &IVideoWindow_VTable, - &object->renderer.filter, &object->renderer.sink.pin, &renderer_BaseWindowFuncTable); + &object->renderer.filter, &object->renderer.sink.pin, &window_ops); if (FAILED(hr)) goto fail; diff --git a/dlls/quartz/window.c b/dlls/quartz/window.c index 1144d2e340..7aaf2ea2f8 100644 --- a/dlls/quartz/window.c +++ b/dlls/quartz/window.c @@ -84,7 +84,7 @@ static LRESULT CALLBACK WndProcW(HWND hwnd, UINT message, WPARAM wparam, LPARAM return DefWindowProcW(hwnd, message, wparam, lparam); } -HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable* pFuncsTable) +HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const struct video_window_ops *pFuncsTable) { if (!pFuncsTable) return E_INVALIDARG; @@ -153,7 +153,7 @@ HRESULT WINAPI BaseWindowImpl_DoneWithWindow(BaseWindow *This) HRESULT video_window_init(struct video_window *pControlWindow, const IVideoWindowVtbl *lpVtbl, struct strmbase_filter *owner, - struct strmbase_pin *pPin, const BaseWindowFuncTable *pFuncsTable) + struct strmbase_pin *pPin, const struct video_window_ops *pFuncsTable) { HRESULT hr;
1
0
0
0
← Newer
1
...
90
91
92
93
94
95
96
...
102
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
Results per page:
10
25
50
100
200