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
July 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
1 participants
826 discussions
Start a n
N
ew thread
Piotr Caban : msvcrt: Copy wcschr implementation from ntdll.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: 5d9d0b84655c8a400a9f7339c404842b194aa9f2 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=5d9d0b84655c8a400a9f7339…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:45 2020 +0200 msvcrt: Copy wcschr implementation from ntdll. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcrt/wcs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 31ec0dd33f..e193c08593 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -2663,7 +2663,8 @@ int CDECL MSVCRT_towupper(MSVCRT_wint_t c) */ MSVCRT_wchar_t* CDECL MSVCRT_wcschr(const MSVCRT_wchar_t *str, MSVCRT_wchar_t ch) { - return strchrW(str, ch); + do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++); + return NULL; } /*********************************************************************
1
0
0
0
Piotr Caban : msvcrt: Copy wcscat implementation from ntdll.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: 2c5bf68a5e7525ae9c50ee0dfc6d819da79c4861 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2c5bf68a5e7525ae9c50ee0d…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:39 2020 +0200 msvcrt: Copy wcscat implementation from ntdll. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/crtdll/crtdll.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/msvcrt.h | 1 + dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/wcs.c | 9 +++++++++ dlls/msvcrtd/msvcrtd.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 13 files changed, 21 insertions(+), 11 deletions(-) diff --git a/dlls/crtdll/crtdll.spec b/dlls/crtdll/crtdll.spec index 45491455d0..aae66d828c 100644 --- a/dlls/crtdll/crtdll.spec +++ b/dlls/crtdll/crtdll.spec @@ -504,7 +504,7 @@ @ cdecl vsprintf(ptr str ptr) MSVCRT_vsprintf @ cdecl vswprintf(ptr wstr ptr) MSVCRT_vswprintf @ cdecl vwprintf(wstr ptr) MSVCRT_vwprintf -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index e37c0dbe5e..68d1ee3f0f 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1854,7 +1854,7 @@ @ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s @ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb @ cdecl wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 8f1d9f9397..13abe6ad64 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -2212,7 +2212,7 @@ @ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s @ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb @ cdecl wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 731e001ac2..7181184938 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -2447,7 +2447,7 @@ @ stub vwscanf_s @ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb @ cdecl wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 2aa111cab5..d4114a24fe 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -850,7 +850,7 @@ @ cdecl vsprintf(ptr str ptr) MSVCRT_vsprintf @ cdecl vswprintf(ptr wstr ptr) MSVCRT_vswprintf @ cdecl vwprintf(wstr ptr) MSVCRT_vwprintf -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index da6827789e..c1b1c68f1f 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -846,7 +846,7 @@ @ cdecl vsprintf(ptr str ptr) MSVCRT_vsprintf @ cdecl vswprintf(ptr wstr ptr) MSVCRT_vswprintf @ cdecl vwprintf(wstr ptr) MSVCRT_vwprintf -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 1847a93c71..916245cb26 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1534,7 +1534,7 @@ @ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s @ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb @ cdecl wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 8a53cf47a5..b2967858bc 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1507,7 +1507,7 @@ @ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s @ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb @ cdecl wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 7e854704b1..7449cbb2de 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -1210,6 +1210,7 @@ int __cdecl MSVCRT__iswlower_l(MSVCRT_wchar_t, MSVCRT__locale_t); int __cdecl MSVCRT__iswupper_l(MSVCRT_wchar_t, MSVCRT__locale_t); int __cdecl MSVCRT__iswprint_l(MSVCRT_wchar_t, MSVCRT__locale_t); int __cdecl MSVCRT__iswpunct_l(MSVCRT_wchar_t, MSVCRT__locale_t); +MSVCRT_size_t __cdecl MSVCRT_wcslen(const MSVCRT_wchar_t*); /* Maybe one day we'll enable the invalid parameter handlers with the full set of information (msvcrXXd) * #define MSVCRT_INVALID_PMT(x) MSVCRT_call_invalid_parameter_handler(x, __FUNCTION__, __FILE__, __LINE__, 0) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index ac1269c53f..51ecb095db 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1481,7 +1481,7 @@ @ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s @ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb @ cdecl wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index b553f27d27..31ec0dd33f 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -2255,6 +2255,15 @@ INT CDECL MSVCRT_wcscat_s(MSVCRT_wchar_t* dst, MSVCRT_size_t elem, const MSVCRT_ return MSVCRT_ERANGE; } +/*********************************************************************** + * wcscat (MSVCRT.@) + */ +MSVCRT_wchar_t* __cdecl MSVCRT_wcscat( MSVCRT_wchar_t *dst, const MSVCRT_wchar_t *src ) +{ + MSVCRT_wcscpy( dst + MSVCRT_wcslen(dst), src ); + return dst; +} + /********************************************************************* * wcsncat_s (MSVCRT.@) * diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec index 0f6af7cce7..8c775c61a4 100644 --- a/dlls/msvcrtd/msvcrtd.spec +++ b/dlls/msvcrtd/msvcrtd.spec @@ -802,7 +802,7 @@ @ cdecl vsprintf(ptr str ptr) MSVCRT_vsprintf @ cdecl vswprintf(ptr wstr ptr) MSVCRT_vswprintf @ cdecl vwprintf(wstr ptr) MSVCRT_vwprintf -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 2367e5a08d..2577649421 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -2554,7 +2554,7 @@ @ cdecl ungetwc(long ptr) MSVCRT_ungetwc @ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb @ cdecl wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s -@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcscat(wstr wstr) MSVCRT_wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp
1
0
0
0
Piotr Caban : msvcrt: Copy wcscpy implementation from ntdll.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: cf580265e36c33f29c389c85c076a6539bad62de URL:
https://source.winehq.org/git/wine.git/?a=commit;h=cf580265e36c33f29c389c85…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:33 2020 +0200 msvcrt: Copy wcscpy implementation from ntdll. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/crtdll/crtdll.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/wcs.c | 10 ++++++++++ dlls/msvcrtd/msvcrtd.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 12 files changed, 22 insertions(+), 12 deletions(-) diff --git a/dlls/crtdll/crtdll.spec b/dlls/crtdll/crtdll.spec index 3acd20e1f6..45491455d0 100644 --- a/dlls/crtdll/crtdll.spec +++ b/dlls/crtdll/crtdll.spec @@ -508,7 +508,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime @ cdecl wcslen(wstr) MSVCRT_wcslen diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 0a0d06b4da..e37c0dbe5e 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1859,7 +1859,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 171cd49652..8f1d9f9397 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -2217,7 +2217,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 01608639b5..731e001ac2 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -2452,7 +2452,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 627bcbb72e..2aa111cab5 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -854,7 +854,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime @ cdecl wcslen(wstr) MSVCRT_wcslen diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index bae1f7fcdb..da6827789e 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -850,7 +850,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime @ cdecl wcslen(wstr) MSVCRT_wcslen diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index fff542a337..1847a93c71 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1539,7 +1539,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 8854495454..8a53cf47a5 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1512,7 +1512,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index c88e146461..ac1269c53f 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1486,7 +1486,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index affded2438..b553f27d27 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -2162,6 +2162,16 @@ INT CDECL MSVCRT_wcscpy_s( MSVCRT_wchar_t* wcDest, MSVCRT_size_t numElement, con return 0; } +/*********************************************************************** + * wcscpy (MSVCRT.@) + */ +MSVCRT_wchar_t* __cdecl MSVCRT_wcscpy( MSVCRT_wchar_t *dst, const MSVCRT_wchar_t *src ) +{ + WCHAR *p = dst; + while ((*p++ = *src++)); + return dst; +} + /****************************************************************** * wcsncpy (MSVCRT.@) */ diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec index 7b082494d7..0f6af7cce7 100644 --- a/dlls/msvcrtd/msvcrtd.spec +++ b/dlls/msvcrtd/msvcrtd.spec @@ -806,7 +806,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime @ cdecl wcslen(wstr) MSVCRT_wcslen diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 7aebd81e02..2367e5a08d 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -1816,7 +1816,7 @@ @ cdecl _o_wcrtomb_s(ptr ptr long long ptr) MSVCRT_wcrtomb_s @ cdecl _o_wcscat_s(wstr long wstr) MSVCRT_wcscat_s @ cdecl _o_wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl _o_wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl _o_wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl _o_wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl _o_wcsftime(ptr long wstr ptr) MSVCRT_wcsftime @ cdecl _o_wcsncat_s(wstr long wstr long) MSVCRT_wcsncat_s @@ -2559,7 +2559,7 @@ @ cdecl wcschr(wstr long) MSVCRT_wcschr @ cdecl wcscmp(wstr wstr) MSVCRT_wcscmp @ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll -@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscpy(ptr wstr) MSVCRT_wcscpy @ cdecl wcscpy_s(ptr long wstr) MSVCRT_wcscpy_s @ cdecl wcscspn(wstr wstr) ntdll.wcscspn @ cdecl wcsftime(ptr long wstr ptr) MSVCRT_wcsftime
1
0
0
0
Piotr Caban : msvcrt: Copy wcslen implementation from ntdll.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: a88d75f4f610080e0f59e71d4c49684917984ede URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a88d75f4f610080e0f59e71d…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:27 2020 +0200 msvcrt: Copy wcslen implementation from ntdll. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcrt/wcs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 4be3de5b2d..affded2438 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -2658,9 +2658,11 @@ MSVCRT_wchar_t* CDECL MSVCRT_wcsrchr(const MSVCRT_wchar_t *str, MSVCRT_wchar_t c /*********************************************************************** * wcslen (MSVCRT.@) */ -int CDECL MSVCRT_wcslen(const MSVCRT_wchar_t *str) +MSVCRT_size_t CDECL MSVCRT_wcslen(const MSVCRT_wchar_t *str) { - return strlenW(str); + const MSVCRT_wchar_t *s = str; + while (*s) s++; + return s - str; } /*********************************************************************
1
0
0
0
Piotr Caban : msvcrt: Don't use get_char_typeW in _iswctype_l.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: 068a419e4219c5bb5d8156ff9177676d9c174021 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=068a419e4219c5bb5d8156ff…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:20 2020 +0200 msvcrt: Don't use get_char_typeW in _iswctype_l. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcrt/msvcrt.h | 1 + dlls/msvcrt/wcs.c | 14 ++++++++++++-- dlls/ucrtbase/tests/misc.c | 10 ++++------ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 9395b7ecac..7e854704b1 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -314,6 +314,7 @@ extern unsigned int MSVCRT___lc_codepage; extern int MSVCRT___lc_collate_cp; extern WORD MSVCRT__ctype [257]; extern BOOL initial_locale DECLSPEC_HIDDEN; +extern WORD *MSVCRT__pwctype; void msvcrt_set_errno(int) DECLSPEC_HIDDEN; #if _MSVCR_VER >= 80 diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 5188d4f860..4be3de5b2d 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1919,7 +1919,17 @@ MSVCRT_size_t CDECL MSVCRT_wcrtomb( char *dst, MSVCRT_wchar_t ch, MSVCRT_mbstate */ INT CDECL MSVCRT__iswctype_l( MSVCRT_wchar_t wc, MSVCRT_wctype_t type, MSVCRT__locale_t locale ) { - return (get_char_typeW(wc) & 0xffff) & type; + WORD ct; + + if (wc == MSVCRT_WEOF) return 0; + if (wc < 256) return MSVCRT__pwctype[wc] & type; + + if (!GetStringTypeW(CT_CTYPE1, &wc, 1, &ct)) + { + ERR("GetStringTypeW failed for %x\n", wc); + return 0; + } + return ct & type; } /********************************************************************* @@ -1927,7 +1937,7 @@ INT CDECL MSVCRT__iswctype_l( MSVCRT_wchar_t wc, MSVCRT_wctype_t type, MSVCRT__l */ INT CDECL MSVCRT_iswctype( MSVCRT_wchar_t wc, MSVCRT_wctype_t type ) { - return (get_char_typeW(wc) & 0xfff) & type; + return MSVCRT__iswctype_l( wc, type, NULL ); } /********************************************************************* diff --git a/dlls/ucrtbase/tests/misc.c b/dlls/ucrtbase/tests/misc.c index e4928b194f..a5f78925fd 100644 --- a/dlls/ucrtbase/tests/misc.c +++ b/dlls/ucrtbase/tests/misc.c @@ -557,17 +557,15 @@ static void test_isblank(void) for(c = 0; c <= 0xffff; c++) { if(c == '\t' || c == ' ' || c == 0x3000 || c == 0xfeff) { if(c == '\t') - todo_wine ok(!_iswctype_l(c, _BLANK, NULL), "tab shouldn't be blank\n"); + ok(!_iswctype_l(c, _BLANK, NULL), "tab shouldn't be blank\n"); else ok(_iswctype_l(c, _BLANK, NULL), "%d should be blank\n", c); ok(iswblank(c), "%d should be blank\n", c); ok(_iswblank_l(c, NULL), "%d should be blank\n", c); } else { - todo_wine_if(c == 0xa0) { - ok(!_iswctype_l(c, _BLANK, NULL), "%d shouldn't be blank\n", c); - ok(!iswblank(c), "%d shouldn't be blank\n", c); - ok(!_iswblank_l(c, NULL), "%d shouldn't be blank\n", c); - } + ok(!_iswctype_l(c, _BLANK, NULL), "%d shouldn't be blank\n", c); + ok(!iswblank(c), "%d shouldn't be blank\n", c); + ok(!_iswblank_l(c, NULL), "%d shouldn't be blank\n", c); } } }
1
0
0
0
Piotr Caban : msvcrt: Export _pwctype table.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: d0c795596b6453fd9fd36815d8143ba947c15af6 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=d0c795596b6453fd9fd36815…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:16 2020 +0200 msvcrt: Export _pwctype table. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/ctype.c | 2 ++ dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt20/msvcrt20.spec | 2 +- dlls/msvcrt40/msvcrt40.spec | 2 +- dlls/msvcrtd/msvcrtd.spec | 2 +- 13 files changed, 14 insertions(+), 12 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index df3f1784e5..0a0d06b4da 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1243,7 +1243,7 @@ @ cdecl _putwch(long) @ cdecl _putwch_nolock(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _realloc_crt(ptr long) MSVCRT_realloc @ cdecl _recalloc(ptr long long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index e449b14f29..171cd49652 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1600,7 +1600,7 @@ @ cdecl _putwch(long) @ cdecl _putwch_nolock(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _realloc_crt(ptr long) MSVCRT_realloc @ cdecl _recalloc(ptr long long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 5c3bcfe9b9..01608639b5 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1610,7 +1610,7 @@ @ cdecl _putwch(long) @ cdecl _putwch_nolock(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _realloc_crt(ptr long) MSVCRT_realloc @ cdecl _recalloc(ptr long long) diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 0cfd4bbf5e..100599e2b2 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1336,7 +1336,7 @@ @ cdecl _putw(long ptr) msvcr120._putw @ cdecl _putwc_nolock(long ptr) msvcr120._putwc_nolock @ cdecl _putws(wstr) msvcr120._putws -# extern _pwctype +@ extern _pwctype msvcr120._pwctype @ cdecl _read(long ptr long) msvcr120._read @ cdecl _realloc_crt(ptr long) msvcr120._realloc_crt @ cdecl _recalloc(ptr long long) msvcr120._recalloc diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 12ca4ac47c..627bcbb72e 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -497,7 +497,7 @@ @ cdecl _putw(long ptr) MSVCRT__putw @ cdecl _putwch(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _resetstkoflw() MSVCRT__resetstkoflw @ cdecl _rmdir(str) MSVCRT__rmdir diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 009b3237c8..bae1f7fcdb 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -492,7 +492,7 @@ @ cdecl _putw(long ptr) MSVCRT__putw @ cdecl _putwch(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _resetstkoflw() MSVCRT__resetstkoflw @ cdecl _rmdir(str) MSVCRT__rmdir diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 121b1110ee..fff542a337 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -917,7 +917,7 @@ @ cdecl _putwch(long) @ cdecl _putwch_nolock(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _realloc_crt(ptr long) MSVCRT_realloc @ cdecl _recalloc(ptr long long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index ca44f28932..8854495454 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -893,7 +893,7 @@ @ cdecl _putwch(long) @ cdecl _putwch_nolock(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _realloc_crt(ptr long) MSVCRT_realloc @ cdecl _recalloc(ptr long long) diff --git a/dlls/msvcrt/ctype.c b/dlls/msvcrt/ctype.c index b8e41a2c4d..3789cd7d75 100644 --- a/dlls/msvcrt/ctype.c +++ b/dlls/msvcrt/ctype.c @@ -125,6 +125,8 @@ WORD MSVCRT__wctype[257] = 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102 }; +WORD *MSVCRT__pwctype = MSVCRT__wctype + 1; + /********************************************************************* * __p__pctype (MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 58149de285..c88e146461 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -862,7 +862,7 @@ @ cdecl _putw(long ptr) MSVCRT__putw @ cdecl _putwch(long) @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read # stub _realloc_dbg(ptr long long str long) @ cdecl _resetstkoflw() MSVCRT__resetstkoflw diff --git a/dlls/msvcrt20/msvcrt20.spec b/dlls/msvcrt20/msvcrt20.spec index 69c6775eac..f06a53cc60 100644 --- a/dlls/msvcrt20/msvcrt20.spec +++ b/dlls/msvcrt20/msvcrt20.spec @@ -1089,7 +1089,7 @@ @ cdecl _putenv(str) msvcrt._putenv @ cdecl _putw(long ptr) msvcrt._putw @ cdecl _putws(wstr) msvcrt._putws -# extern _pwctype +@ extern _pwctype msvcrt._pwctype @ cdecl _read(long ptr long) msvcrt._read @ cdecl _rmdir(str) msvcrt._rmdir @ cdecl _rmtmp() msvcrt._rmtmp diff --git a/dlls/msvcrt40/msvcrt40.spec b/dlls/msvcrt40/msvcrt40.spec index f1e73bc4ba..f0d966acd7 100644 --- a/dlls/msvcrt40/msvcrt40.spec +++ b/dlls/msvcrt40/msvcrt40.spec @@ -1183,7 +1183,7 @@ @ cdecl _putenv(str) msvcrt._putenv @ cdecl _putw(long ptr) msvcrt._putw @ cdecl _putws(wstr) msvcrt._putws -# extern _pwctype +@ extern _pwctype msvcrt._pwctype @ cdecl _read(long ptr long) msvcrt._read @ cdecl _rmdir(str) msvcrt._rmdir @ cdecl _rmtmp() msvcrt._rmtmp diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec index 45f5888922..7b082494d7 100644 --- a/dlls/msvcrtd/msvcrtd.spec +++ b/dlls/msvcrtd/msvcrtd.spec @@ -472,7 +472,7 @@ @ cdecl _putenv(str) @ cdecl _putw(long ptr) MSVCRT__putw @ cdecl _putws(wstr) MSVCRT__putws -# extern _pwctype +@ extern _pwctype MSVCRT__pwctype @ cdecl _read(long ptr long) MSVCRT__read @ cdecl _realloc_dbg(ptr long) MSVCRT_realloc @ cdecl _rmdir(str) MSVCRT__rmdir
1
0
0
0
Piotr Caban : msvcrt: Add _wctype table.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: 144803a54571a6a514b06f4719ff6215eb325e5c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=144803a54571a6a514b06f47…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:08 2020 +0200 msvcrt: Add _wctype table. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- .../api-ms-win-crt-string-l1-1-0.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/ctype.c | 74 ++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 12 files changed, 85 insertions(+), 11 deletions(-) diff --git a/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec b/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec index 6a68274479..ec984da1e8 100644 --- a/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec +++ b/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec @@ -96,7 +96,7 @@ @ cdecl _wcsupr_s(wstr long) ucrtbase._wcsupr_s @ cdecl _wcsupr_s_l(wstr long ptr) ucrtbase._wcsupr_s_l @ cdecl _wcsxfrm_l(ptr wstr long ptr) ucrtbase._wcsxfrm_l -@ stub _wctype +@ extern _wctype ucrtbase._wctype @ cdecl is_wctype(long long) ucrtbase.is_wctype @ cdecl isalnum(long) ucrtbase.isalnum @ cdecl isalpha(long) ucrtbase.isalpha diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 6451fda152..df3f1784e5 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1531,7 +1531,7 @@ @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l -# extern _wctype +@ extern _wctype MSVCRT__wctype @ cdecl _wdupenv_s(ptr ptr wstr) @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index abfbb846b3..e449b14f29 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1889,7 +1889,7 @@ @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l -# extern _wctype +@ extern _wctype MSVCRT__wctype @ cdecl _wdupenv_s(ptr ptr wstr) @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 00a1c3e49e..5c3bcfe9b9 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1913,7 +1913,7 @@ @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l -# extern _wctype +@ extern _wctype MSVCRT__wctype @ cdecl _wdupenv_s(ptr ptr wstr) @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index e622f95af1..0cfd4bbf5e 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1606,7 +1606,7 @@ @ cdecl _wctime64_s(ptr long ptr) msvcr120._wctime64_s @ cdecl _wctomb_l(ptr long ptr) msvcr120._wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) msvcr120._wctomb_s_l -# extern _wctype +@ extern _wctype msvcr120._wctype @ extern _wenviron msvcr120._wenviron @ cdecl _wfdopen(long wstr) msvcr120._wfdopen @ cdecl _wfindfirst32(wstr ptr) msvcr120._wfindfirst32 diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 2649034abd..12ca4ac47c 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -610,7 +610,7 @@ @ cdecl _wcsupr(wstr) MSVCRT__wcsupr @ cdecl _wctime(ptr) MSVCRT__wctime @ cdecl _wctime64(ptr) MSVCRT__wctime64 -# extern _wctype +@ extern _wctype MSVCRT__wctype @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) @ varargs _wexecle(wstr wstr) diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 9d3e2b2ebe..009b3237c8 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -606,7 +606,7 @@ @ cdecl _wcsupr(wstr) MSVCRT__wcsupr @ cdecl _wctime(ptr) MSVCRT__wctime @ cdecl _wctime64(ptr) MSVCRT__wctime64 -# extern _wctype +@ extern _wctype MSVCRT__wctype @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) @ varargs _wexecle(wstr wstr) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index aaa1b499c5..121b1110ee 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1210,7 +1210,7 @@ @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l -# extern _wctype +@ extern _wctype MSVCRT__wctype @ cdecl _wdupenv_s(ptr ptr wstr) @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 9267c5b1dd..ca44f28932 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1186,7 +1186,7 @@ @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l -# extern _wctype +@ extern _wctype MSVCRT__wctype @ cdecl _wdupenv_s(ptr ptr wstr) @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) diff --git a/dlls/msvcrt/ctype.c b/dlls/msvcrt/ctype.c index e051c01521..b8e41a2c4d 100644 --- a/dlls/msvcrt/ctype.c +++ b/dlls/msvcrt/ctype.c @@ -51,6 +51,80 @@ WORD MSVCRT__ctype [257] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +#if _MSVCR_VER <= 110 +# define B110 MSVCRT__BLANK +#else +# define B110 0 +#endif + +#if _MSVCR_VER == 120 +# define D120 0 +#else +# define D120 4 +#endif + +#if _MSVCR_VER >= 140 +# define S140 MSVCRT__SPACE +# define L140 MSVCRT__LOWER | 0x100 +# define C140 MSVCRT__CONTROL +#else +# define S140 0 +# define L140 0 +# define C140 0 +#endif +WORD MSVCRT__wctype[257] = +{ + 0, + /* 00 */ + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0028 | B110, 0x0028, 0x0028, 0x0028, 0x0028, 0x0020, 0x0020, + /* 10 */ + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + /* 20 */ + 0x0048, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + /* 30 */ + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + /* 40 */ + 0x0010, 0x0181, 0x0181, 0x0181, 0x0181, 0x0181, 0x0181, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + /* 50 */ + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + /* 60 */ + 0x0010, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0102, + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + /* 70 */ + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0102, 0x0102, 0x0102, 0x0010, 0x0010, 0x0010, 0x0010, 0x0020, + /* 80 */ + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020 | S140, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + /* 90 */ + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + /* a0 */ + 0x0008 | B110, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010 | L140, 0x0010, 0x0010, 0x0010 | C140, 0x0010, 0x0010, + /* b0 */ + 0x0010, 0x0010, 0x0010 | D120, 0x0010 | D120, 0x0010, 0x0010 | L140, 0x0010, 0x0010, + 0x0010, 0x0010 | D120, 0x0010 | L140, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + /* c0 */ + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + /* d0 */ + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0010, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0102, + /* e0 */ + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + /* f0 */ + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0010, + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102 +}; + /********************************************************************* * __p__pctype (MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 1d26169cc1..58149de285 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1141,7 +1141,7 @@ @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l -# extern _wctype +@ extern _wctype MSVCRT__wctype @ extern _wenviron MSVCRT__wenviron @ varargs _wexecl(wstr wstr) @ varargs _wexecle(wstr wstr) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 8493ae79ba..7aebd81e02 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -2062,7 +2062,7 @@ @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l -@ stub _wctype +@ extern _wctype MSVCRT__wctype @ cdecl _wdupenv_s(ptr ptr wstr) @ varargs _wexecl(wstr wstr) @ varargs _wexecle(wstr wstr)
1
0
0
0
Piotr Caban : comctl32: Fix non printable characters handling in SB_SETTEXT.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: 1bd27e50d25fd057a57fec89f06d6e20176c5ef4 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=1bd27e50d25fd057a57fec89…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Jul 21 12:21:00 2020 +0200 comctl32: Fix non printable characters handling in SB_SETTEXT. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/comctl32/status.c | 2 +- dlls/comctl32/tests/status.c | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/dlls/comctl32/status.c b/dlls/comctl32/status.c index cad56c7e2a..f76f6262cc 100644 --- a/dlls/comctl32/status.c +++ b/dlls/comctl32/status.c @@ -744,7 +744,7 @@ STATUSBAR_SetTextT (STATUS_INFO *infoPtr, INT nPart, WORD style, if (ntext) { idx = ntext; while (*idx) { - if(!iswprint(*idx)) + if(*idx < ' ' && *idx != '\t') *idx = ' '; idx++; } diff --git a/dlls/comctl32/tests/status.c b/dlls/comctl32/tests/status.c index c7d9989218..f7eec88c61 100644 --- a/dlls/comctl32/tests/status.c +++ b/dlls/comctl32/tests/status.c @@ -261,6 +261,7 @@ static void test_status_control(void) char ch; char chstr[10] = "Inval id"; COLORREF crColor = RGB(0,0,0); + WCHAR wbuf[20]; hWndStatus = create_status_control(WS_VISIBLE | SBT_TOOLTIPS, 0); @@ -316,28 +317,33 @@ static void test_status_control(void) expect(2,borders[2]); /* Test resetting text with different characters */ + r = SendMessageA(hWndStatus, SB_SETPARTS, 4, (LPARAM)nParts); + expect(TRUE,r); r = SendMessageA(hWndStatus, SB_SETTEXTA, 0, (LPARAM)"First@Again"); expect(TRUE,r); r = SendMessageA(hWndStatus, SB_SETTEXTA, 1, (LPARAM)"Invalid\tChars\\7\7"); - expect(TRUE,r); + expect(TRUE,r); r = SendMessageA(hWndStatus, SB_SETTEXTA, 2, (LPARAM)"InvalidChars\\n\n"); - expect(TRUE,r); + expect(TRUE,r); + r = SendMessageW(hWndStatus, SB_SETTEXTW, 3, (LPARAM)L"Non printable\x80"); + expect(TRUE,r); /* Get text again */ r = SendMessageA(hWndStatus, SB_GETTEXTA, 0, (LPARAM) charArray); ok(strcmp(charArray,"First@Again") == 0, "Expected First@Again, got %s\n", charArray); - expect(11,LOWORD(r)); - expect(0,HIWORD(r)); + ok(r == 11, "r = %d\n", r); + r = SendMessageA(hWndStatus, SB_GETTEXTA, 1, (LPARAM) charArray); ok(strcmp(charArray,"Invalid\tChars\\7 ") == 0, "Expected Invalid\tChars\\7 , got %s\n", charArray); + ok(r == 16, "r = %d\n", r); - expect(16,LOWORD(r)); - expect(0,HIWORD(r)); r = SendMessageA(hWndStatus, SB_GETTEXTA, 2, (LPARAM) charArray); ok(strcmp(charArray,"InvalidChars\\n ") == 0, "Expected InvalidChars\\n , got %s\n", charArray); + ok(r == 15, "r = %d\n", r); - expect(15,LOWORD(r)); - expect(0,HIWORD(r)); + r = SendMessageW(hWndStatus, SB_GETTEXTW, 3, (LPARAM) wbuf); + ok(wcscmp(wbuf, L"Non printable\x80") == 0, "got %s\n", wine_dbgstr_w(wbuf)); + ok(r == 14, "r = %d\n", r); /* test more nonprintable chars */ for(ch = 0x00; ch < 0x7F; ch++) {
1
0
0
0
Zebediah Figura : quartz: Return the stop position from GetCurrentPosition() after all filters return EC_COMPLETE.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: 8c9d60c308c20e92bbbb204008082dad7ad160c9 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=8c9d60c308c20e92bbbb2040…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Mon Jul 20 17:49:10 2020 -0500 quartz: Return the stop position from GetCurrentPosition() after all filters return EC_COMPLETE. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/quartz/filtergraph.c | 15 +++++++++++++-- dlls/quartz/tests/filtergraph.c | 5 ++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index 22d7f7b445..7d6463c1f3 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -219,10 +219,11 @@ struct filter_graph /* Respectively: the last timestamp at which we started streaming, and the * current offset within the stream. */ REFERENCE_TIME stream_start, stream_elapsed; - + REFERENCE_TIME stream_stop; LONGLONG current_pos; unsigned int needs_async_run : 1; + unsigned int got_ec_complete : 1; }; struct enum_filters @@ -1739,6 +1740,7 @@ static void update_render_count(struct filter_graph *graph) /* Perform the paused -> running transition. The caller must hold graph->cs. */ static HRESULT graph_start(struct filter_graph *graph, REFERENCE_TIME stream_start) { + REFERENCE_TIME stream_stop; struct filter *filter; HRESULT hr = S_OK; @@ -1757,6 +1759,9 @@ static HRESULT graph_start(struct filter_graph *graph, REFERENCE_TIME stream_sta stream_start += 200 * 10000; } + if (SUCCEEDED(IMediaSeeking_GetStopPosition(&graph->IMediaSeeking_iface, &stream_stop))) + graph->stream_stop = stream_stop; + LIST_FOR_EACH_ENTRY(filter, &graph->filters, struct filter, entry) { HRESULT filter_hr = IBaseFilter_Run(filter->filter, stream_start); @@ -2322,7 +2327,11 @@ static HRESULT WINAPI MediaSeeking_GetCurrentPosition(IMediaSeeking *iface, LONG EnterCriticalSection(&graph->cs); - if (graph->state == State_Running && graph->refClock) + if (graph->got_ec_complete) + { + ret = graph->stream_stop; + } + else if (graph->state == State_Running && graph->refClock) { REFERENCE_TIME time; IReferenceClock_GetTime(graph->refClock, &time); @@ -4982,6 +4991,7 @@ static HRESULT WINAPI MediaFilter_Stop(IMediaFilter *iface) graph->state = State_Stopped; graph->needs_async_run = 0; work = graph->async_run_work; + graph->got_ec_complete = 0; /* Update the current position, probably to synchronize multiple streams. */ IMediaSeeking_SetPositions(&graph->IMediaSeeking_iface, &graph->current_pos, @@ -5281,6 +5291,7 @@ static HRESULT WINAPI MediaEventSink_Notify(IMediaEventSink *iface, LONG EventCo PostMessageW(This->notif.hWnd, This->notif.msg, 0, This->notif.instance); } This->CompletionStatus = EC_COMPLETE; + This->got_ec_complete = 1; SetEvent(This->hEventCompletion); } } diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c index 1eecd0483b..9219b30cec 100644 --- a/dlls/quartz/tests/filtergraph.c +++ b/dlls/quartz/tests/filtergraph.c @@ -530,7 +530,6 @@ static void test_media_event(IFilterGraph2 *graph) hr = IMediaSeeking_GetCurrentPosition(seeking, ¤t); ok(hr == S_OK, "GetCurrentPosition() failed: %#x\n", hr); -todo_wine ok(current == stop, "expected %s, got %s\n", wine_dbgstr_longlong(stop), wine_dbgstr_longlong(current)); hr = IMediaControl_Stop(control); @@ -4512,7 +4511,7 @@ static void test_graph_seeking(void) hr = IMediaSeeking_GetCurrentPosition(seeking, &time); ok(hr == S_OK, "Got hr %#x.\n", hr); - todo_wine ok(time == 6000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); + ok(time == 6000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -4535,7 +4534,7 @@ static void test_graph_seeking(void) hr = IMediaSeeking_GetCurrentPosition(seeking, &time); ok(hr == S_OK, "Got hr %#x.\n", hr); - todo_wine ok(time == 6000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); + ok(time == 6000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr);
1
0
0
0
Zebediah Figura : quartz/tests: Add tests for IMediaSeeking::GetCurrentPosition() and EC_COMPLETE interaction.
by Alexandre Julliard
21 Jul '20
21 Jul '20
Module: wine Branch: master Commit: a6d539381e23fa117367033618b4ab340c7c7620 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a6d539381e23fa1173670336…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Mon Jul 20 17:49:09 2020 -0500 quartz/tests: Add tests for IMediaSeeking::GetCurrentPosition() and EC_COMPLETE interaction. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/quartz/tests/filtergraph.c | 59 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c index bd6562b0ed..1eecd0483b 100644 --- a/dlls/quartz/tests/filtergraph.c +++ b/dlls/quartz/tests/filtergraph.c @@ -3939,6 +3939,7 @@ static void test_graph_seeking(void) LONGLONG time, current, stop, earliest, latest; IFilterGraph2 *graph = create_graph(); + IMediaEventSink *eventsink; IMediaControl *control; IMediaSeeking *seeking; IMediaFilter *filter; @@ -3976,6 +3977,7 @@ static void test_graph_seeking(void) IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); IFilterGraph2_QueryInterface(graph, &IID_IMediaSeeking, (void **)&seeking); IFilterGraph2_QueryInterface(graph, &IID_IMediaFilter, (void **)&filter); + IFilterGraph2_QueryInterface(graph, &IID_IMediaEventSink, (void **)&eventsink); hr = IMediaSeeking_GetCapabilities(seeking, &caps); todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -4482,9 +4484,66 @@ static void test_graph_seeking(void) hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); + /* GetCurrentPositions() will return the stop position once all renderers + * report EC_COMPLETE. Atelier Sophie depends on this behaviour. */ + + hr = IFilterGraph2_SetDefaultSyncSource(graph); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + filter1.seek_stop = 5000 * 10000; + filter2.seek_stop = 6000 * 10000; + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaSeeking_GetCurrentPosition(seeking, &time); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(time < 5000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); + + hr = IMediaEventSink_Notify(eventsink, EC_COMPLETE, S_OK, (LONG_PTR)&filter1.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaSeeking_GetCurrentPosition(seeking, &time); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(time < 5000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); + + hr = IMediaEventSink_Notify(eventsink, EC_COMPLETE, S_OK, (LONG_PTR)&filter2.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaSeeking_GetCurrentPosition(seeking, &time); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(time == 6000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + filter1.seek_hr = filter2.seek_hr = E_NOTIMPL; + filter1.seek_stop = filter2.seek_stop = 0xdeadbeef; + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaSeeking_GetCurrentPosition(seeking, &time); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(time < 5000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); + + hr = IMediaEventSink_Notify(eventsink, EC_COMPLETE, S_OK, (LONG_PTR)&filter1.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaEventSink_Notify(eventsink, EC_COMPLETE, S_OK, (LONG_PTR)&filter2.IBaseFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaSeeking_GetCurrentPosition(seeking, &time); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(time == 6000 * 10000, "Got time %s.\n", wine_dbgstr_longlong(time)); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + IMediaFilter_Release(filter); IMediaControl_Release(control); IMediaSeeking_Release(seeking); + IMediaEventSink_Release(eventsink); ok(filter1.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref); ok(filter2.seeking_ref > 0, "Unexpected seeking refcount %d.\n", filter2.seeking_ref);
1
0
0
0
← Newer
1
...
23
24
25
26
27
28
29
...
83
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
Results per page:
10
25
50
100
200