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
June 2015
----- 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
610 discussions
Start a n
N
ew thread
Nikolay Sivov : dwrite: Fix splitted range length, initial test for GetMetrics().
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: de2ae5e1b8f65a855d0fd62a50346042aac9bd29 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=de2ae5e1b8f65a855d0fd62a5…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Jun 15 00:36:43 2015 +0300 dwrite: Fix splitted range length, initial test for GetMetrics(). --- dlls/dwrite/layout.c | 2 +- dlls/dwrite/tests/analyzer.c | 4 +-- dlls/dwrite/tests/layout.c | 75 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index 903e53d..bdd8ad6 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -3084,7 +3084,7 @@ static HRESULT WINAPI dwritetextlayout_sink_SetBidiLevel(IDWriteTextAnalysisSink /* reduce existing run */ cur->run.bidiLevel = resolvedLevel; - cur->descr.stringLength -= length; + cur->descr.stringLength = length; list_add_after(&cur_run->entry, &run->entry); break; diff --git a/dlls/dwrite/tests/analyzer.c b/dlls/dwrite/tests/analyzer.c index 4e2e7ca..c514bec 100644 --- a/dlls/dwrite/tests/analyzer.c +++ b/dlls/dwrite/tests/analyzer.c @@ -523,8 +523,8 @@ static struct sa_test sa_tests[] = { }, { /* Arabic */ - {0x064a,0x064f,0x0633,0x0627,0x0648,0x0650,0x064a,0}, 1, - { { 0, 7, DWRITE_SCRIPT_SHAPES_DEFAULT }} + {0x064a,0x064f,0x0633,0x0627,0x0648,0x0650,0x064a,0x0661,0}, 1, + { { 0, 8, DWRITE_SCRIPT_SHAPES_DEFAULT }} }, { /* Arabic */ diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index 4093633..2b19961 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -1380,6 +1380,7 @@ static void test_typography(void) static void test_GetClusterMetrics(void) { + static const WCHAR str3W[] = {0x2066,')',')',0x661,'(',0x627,')',0}; static const WCHAR str2W[] = {0x202a,0x202c,'a',0}; static const WCHAR strW[] = {'a','b','c','d',0}; DWRITE_INLINE_OBJECT_METRICS inline_metrics; @@ -1399,6 +1400,13 @@ static void test_GetClusterMetrics(void) DWRITE_FONT_STRETCH_NORMAL, 10.0, enusW, &format); ok(hr == S_OK, "got 0x%08x\n", hr); + hr = IDWriteFactory_CreateTextLayout(factory, str3W, 7, format, 1000.0, 1000.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + hr = IDWriteTextLayout_GetClusterMetrics(layout, NULL, 0, &count); + ok(hr == E_NOT_SUFFICIENT_BUFFER, "got 0x%08x\n", hr); + ok(count == 7, "got %u\n", count); + IDWriteTextLayout_Release(layout); + hr = IDWriteFactory_CreateTextLayout(factory, strW, 4, format, 1000.0, 1000.0, &layout); ok(hr == S_OK, "got 0x%08x\n", hr); @@ -1873,6 +1881,7 @@ static void test_DetermineMinWidth(void) IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); } static void test_SetFontSize(void) @@ -1964,6 +1973,7 @@ static void test_SetFontSize(void) IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); } static void test_SetFontFamilyName(void) @@ -2044,6 +2054,7 @@ static void test_SetFontFamilyName(void) IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); } static void test_SetFontStyle(void) @@ -2131,6 +2142,7 @@ static void test_SetFontStyle(void) IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); } static void test_SetFontStretch(void) @@ -2225,6 +2237,7 @@ static void test_SetFontStretch(void) IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); } static void test_SetStrikethrough(void) @@ -2286,6 +2299,67 @@ static void test_SetStrikethrough(void) IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); +} + +static void test_GetMetrics(void) +{ + static const WCHAR str2W[] = {0x2066,')',')',0x661,'(',0x627,')',0}; + static const WCHAR strW[] = {'a','b','c','d',0}; + DWRITE_TEXT_METRICS metrics; + IDWriteTextFormat *format; + IDWriteTextLayout *layout; + IDWriteFactory *factory; + HRESULT hr; + + factory = create_factory(); + + hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, + DWRITE_FONT_STRETCH_NORMAL, 10.0, enusW, &format); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDWriteFactory_CreateTextLayout(factory, strW, 4, format, 500.0, 1000.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + memset(&metrics, 0xcc, sizeof(metrics)); + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); +todo_wine { + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(metrics.left == 0.0, "got %.2f\n", metrics.left); + ok(metrics.top == 0.0, "got %.2f\n", metrics.top); + ok(metrics.width > 0.0, "got %.2f\n", metrics.width); + ok(metrics.widthIncludingTrailingWhitespace > 0.0, "got %.2f\n", metrics.widthIncludingTrailingWhitespace); + ok(metrics.height > 0.0, "got %.2f\n", metrics.height); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth); + ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount); +} + IDWriteTextLayout_Release(layout); + + /* a string with more complex bidi sequence */ + hr = IDWriteFactory_CreateTextLayout(factory, str2W, 7, format, 500.0, 1000.0, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + + memset(&metrics, 0xcc, sizeof(metrics)); + metrics.maxBidiReorderingDepth = 0; + hr = IDWriteTextLayout_GetMetrics(layout, &metrics); +todo_wine { + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(metrics.left == 0.0, "got %.2f\n", metrics.left); + ok(metrics.top == 0.0, "got %.2f\n", metrics.top); + ok(metrics.width > 0.0, "got %.2f\n", metrics.width); + ok(metrics.widthIncludingTrailingWhitespace > 0.0, "got %.2f\n", metrics.widthIncludingTrailingWhitespace); + ok(metrics.height > 0.0, "got %.2f\n", metrics.height); + ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth); + ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight); + ok(metrics.maxBidiReorderingDepth > 1, "got %u\n", metrics.maxBidiReorderingDepth); + ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount); +} + IDWriteTextLayout_Release(layout); + + IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); } START_TEST(layout) @@ -2324,6 +2398,7 @@ START_TEST(layout) test_SetFontStyle(); test_SetFontStretch(); test_SetStrikethrough(); + test_GetMetrics(); IDWriteFactory_Release(factory); }
1
0
0
0
Nikolay Sivov : dwrite/tests: Test to show that GetCurrentTransform/ GetPixelsPerDip are not really used from Draw().
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: 4addd20aaafa9666a162a514c0a86f8cf0153310 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4addd20aaafa9666a162a514c…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Jun 15 00:34:46 2015 +0300 dwrite/tests: Test to show that GetCurrentTransform/GetPixelsPerDip are not really used from Draw(). --- dlls/dwrite/tests/layout.c | 61 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index dd574b2..4093633 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -406,20 +406,15 @@ static HRESULT WINAPI testrenderer_IsPixelSnappingDisabled(IDWriteTextRenderer * static HRESULT WINAPI testrenderer_GetCurrentTransform(IDWriteTextRenderer *iface, void *client_drawingcontext, DWRITE_MATRIX *transform) { - transform->m11 = 1.0; - transform->m12 = 0.0; - transform->m21 = 0.0; - transform->m22 = 1.0; - transform->dx = 0.0; - transform->dy = 0.0; - return S_OK; + ok(0, "unexpected call\n"); + return E_NOTIMPL; } static HRESULT WINAPI testrenderer_GetPixelsPerDip(IDWriteTextRenderer *iface, void *client_drawingcontext, FLOAT *pixels_per_dip) { - *pixels_per_dip = 1.0; - return S_OK; + ok(0, "unexpected call\n"); + return E_NOTIMPL; } static HRESULT WINAPI testrenderer_DrawGlyphRun(IDWriteTextRenderer *iface, @@ -1174,7 +1169,12 @@ static const struct drawcall_entry draw_seq5[] = { { DRAW_LAST_KIND } }; -static const struct drawcall_entry draw_seq6[] = { +static const struct drawcall_entry empty_seq[] = { + { DRAW_LAST_KIND } +}; + +static const struct drawcall_entry draw_single_run_seq[] = { + { DRAW_GLYPHRUN, {'s','t','r','i','n','g',0} }, { DRAW_LAST_KIND } }; @@ -1183,12 +1183,12 @@ static void test_Draw(void) static const WCHAR strW[] = {'s','t','r','i','n','g',0}; static const WCHAR str2W[] = {0x202a,0x202c,'a','b',0}; static const WCHAR ruW[] = {'r','u',0}; - IDWriteInlineObject *inlineobj; IDWriteTextFormat *format; IDWriteTextLayout *layout; DWRITE_TEXT_RANGE range; IDWriteFactory *factory; + DWRITE_MATRIX m; HRESULT hr; factory = create_factory(); @@ -1285,7 +1285,44 @@ static void test_Draw(void) flush_sequence(sequences, RENDERER_ID); hr = IDWriteTextLayout_Draw(layout, NULL, &testrenderer, 0.0, 0.0); ok(hr == S_OK, "got 0x%08x\n", hr); - ok_sequence(sequences, RENDERER_ID, draw_seq6, "draw test 6", FALSE); + ok_sequence(sequences, RENDERER_ID, empty_seq, "draw test 6", FALSE); + IDWriteTextLayout_Release(layout); + + /* different parameter combinations with gdi-compatible layout */ + hr = IDWriteFactory_CreateGdiCompatibleTextLayout(factory, strW, 6, format, 100.0, 100.0, 1.0, NULL, TRUE, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + flush_sequence(sequences, RENDERER_ID); + hr = IDWriteTextLayout_Draw(layout, NULL, &testrenderer, 0.0, 0.0); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok_sequence(sequences, RENDERER_ID, draw_single_run_seq, "draw test 7", FALSE); + IDWriteTextLayout_Release(layout); + + hr = IDWriteFactory_CreateGdiCompatibleTextLayout(factory, strW, 6, format, 100.0, 100.0, 1.0, NULL, FALSE, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + flush_sequence(sequences, RENDERER_ID); + hr = IDWriteTextLayout_Draw(layout, NULL, &testrenderer, 0.0, 0.0); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok_sequence(sequences, RENDERER_ID, draw_single_run_seq, "draw test 8", FALSE); + IDWriteTextLayout_Release(layout); + + m.m11 = m.m22 = 2.0; + m.m12 = m.m21 = m.dx = m.dy = 0.0; + hr = IDWriteFactory_CreateGdiCompatibleTextLayout(factory, strW, 6, format, 100.0, 100.0, 1.0, &m, TRUE, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + flush_sequence(sequences, RENDERER_ID); + hr = IDWriteTextLayout_Draw(layout, NULL, &testrenderer, 0.0, 0.0); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok_sequence(sequences, RENDERER_ID, draw_single_run_seq, "draw test 9", FALSE); + IDWriteTextLayout_Release(layout); + + m.m11 = m.m22 = 2.0; + m.m12 = m.m21 = m.dx = m.dy = 0.0; + hr = IDWriteFactory_CreateGdiCompatibleTextLayout(factory, strW, 6, format, 100.0, 100.0, 1.0, &m, FALSE, &layout); + ok(hr == S_OK, "got 0x%08x\n", hr); + flush_sequence(sequences, RENDERER_ID); + hr = IDWriteTextLayout_Draw(layout, NULL, &testrenderer, 0.0, 0.0); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok_sequence(sequences, RENDERER_ID, draw_single_run_seq, "draw test 10", FALSE); IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format);
1
0
0
0
André Hentschel : winebuild: Create stubs for ARM64.
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: d1f9067cf548085c167e9a6da296a542b6099839 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d1f9067cf548085c167e9a6da…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Sun Jun 14 23:24:06 2015 +0200 winebuild: Create stubs for ARM64. --- tools/winebuild/import.c | 17 +++++++++++++++++ tools/winebuild/parser.c | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c index 3ad5cab..13596a4 100644 --- a/tools/winebuild/import.c +++ b/tools/winebuild/import.c @@ -1270,6 +1270,23 @@ void output_stubs( DLLSPEC *spec ) if (exp_name) output( "\t.long .L%s_string-2b\n", name ); else output( "\t.long %u\n", odp->ordinal ); break; + case CPU_ARM64: + output( "\tadr x0, 2f\n" ); + output( "\tldur x0, [x0, #0]\n" ); + output( "\tadr x1, 2f+8\n" ); + output( "\tldur x1, [x1, #0]\n" ); + output( "\tadr x2, 1f\n" ); + output( "\tldur x2, [x2, #0]\n" ); + output( "\tblr x2\n" ); + output( "1:\t.quad %s\n", asm_name("__wine_spec_unimplemented_stub") ); + output( "2:\t.quad %s\n", asm_name("__wine_spec_file_name") ); + if (exp_name) + { + output( "\t.quad .L%s_string\n", name ); + count++; + } + else output( "\t.quad %u\n", odp->ordinal ); + break; default: assert(0); } diff --git a/tools/winebuild/parser.c b/tools/winebuild/parser.c index bae2b47..9252ee8 100644 --- a/tools/winebuild/parser.c +++ b/tools/winebuild/parser.c @@ -403,9 +403,9 @@ static int parse_spec_stub( ORDDEF *odp, DLLSPEC *spec ) odp->link_name = xstrdup(""); /* don't bother generating stubs for Winelib */ if (odp->flags & FLAG_CPU_MASK) - odp->flags &= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM); + odp->flags &= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM) | FLAG_CPU(CPU_ARM64); else - odp->flags |= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM); + odp->flags |= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM) | FLAG_CPU(CPU_ARM64); return parse_spec_arguments( odp, spec, 1 ); }
1
0
0
0
André Hentschel : ntdll: Fix CONTEXT_ARM in RtlCaptureContext.
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: bef85a14f6ef209f76931103ddfc5d8fb14b341f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=bef85a14f6ef209f76931103d…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Sun Jun 14 23:25:27 2015 +0200 ntdll: Fix CONTEXT_ARM in RtlCaptureContext. --- dlls/ntdll/signal_arm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index 0c51c49..7625d77 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -261,7 +261,7 @@ __ASM_GLOBAL_FUNC( __chkstk, "bx lr" ) __ASM_STDCALL_FUNC( RtlCaptureContext, 4, ".arm\n\t" "stmfd SP!, {r1}\n\t" - "mov r1, #0x40\n\t" /* CONTEXT_ARM */ + "mov r1, #0x0200000\n\t"/* CONTEXT_ARM */ "add r1, r1, #0x3\n\t" /* CONTEXT_FULL */ "str r1, [r0]\n\t" /* context->ContextFlags */ "ldmfd SP!, {r1}\n\t"
1
0
0
0
André Hentschel : ntdll: Implement RtlCaptureContext on ARM64.
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: cd258bef79f738cf53b06e813b2136fb1a3f9c3d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=cd258bef79f738cf53b06e813…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Sun Jun 14 23:24:54 2015 +0200 ntdll: Implement RtlCaptureContext on ARM64. --- dlls/ntdll/signal_arm64.c | 51 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index e8dedd3..f5c62d1 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -179,11 +179,52 @@ static inline void restore_fpu( CONTEXT *context, const ucontext_t *sigcontext ) /*********************************************************************** * RtlCaptureContext (NTDLL.@) */ -void WINAPI RtlCaptureContext( CONTEXT *context ) -{ - FIXME( "Not implemented on ARM64\n" ); - memset( context, 0, sizeof(*context) ); -} +/* FIXME: Use the Stack instead of the actual register values? */ +__ASM_STDCALL_FUNC( RtlCaptureContext, 8, + "stp x0, x1, [sp, #-32]!\n\t" + "mov w1, #0x400000\n\t" /* CONTEXT_ARM64 */ + "add w1, w1, #0x3\n\t" /* CONTEXT_FULL */ + "str w1, [x0]\n\t" /* context->ContextFlags */ /* 32-bit, look at cpsr */ + "mrs x1, DAIF\n\t" + "str w1, [x0, #0x4]\n\t" /* context->Cpsr */ + "ldp x0, x1, [sp], #32\n\t" + "str x0, [x0, #0x8]\n\t" /* context->X0 */ + "str x1, [x0, #0x10]\n\t" /* context->X1 */ + "str x2, [x0, #0x18]\n\t" /* context->X2 */ + "str x3, [x0, #0x20]\n\t" /* context->X3 */ + "str x4, [x0, #0x28]\n\t" /* context->X4 */ + "str x5, [x0, #0x30]\n\t" /* context->X5 */ + "str x6, [x0, #0x38]\n\t" /* context->X6 */ + "str x7, [x0, #0x40]\n\t" /* context->X7 */ + "str x8, [x0, #0x48]\n\t" /* context->X8 */ + "str x9, [x0, #0x50]\n\t" /* context->X9 */ + "str x10, [x0, #0x58]\n\t" /* context->X10 */ + "str x11, [x0, #0x60]\n\t" /* context->X11 */ + "str x12, [x0, #0x68]\n\t" /* context->X12 */ + "str x13, [x0, #0x70]\n\t" /* context->X13 */ + "str x14, [x0, #0x78]\n\t" /* context->X14 */ + "str x15, [x0, #0x80]\n\t" /* context->X15 */ + "str x16, [x0, #0x88]\n\t" /* context->X16 */ + "str x17, [x0, #0x90]\n\t" /* context->X17 */ + "str x18, [x0, #0x98]\n\t" /* context->X18 */ + "str x19, [x0, #0xa0]\n\t" /* context->X19 */ + "str x20, [x0, #0xa8]\n\t" /* context->X20 */ + "str x21, [x0, #0xb0]\n\t" /* context->X21 */ + "str x22, [x0, #0xb8]\n\t" /* context->X22 */ + "str x23, [x0, #0xc0]\n\t" /* context->X23 */ + "str x24, [x0, #0xc8]\n\t" /* context->X24 */ + "str x25, [x0, #0xd0]\n\t" /* context->X25 */ + "str x26, [x0, #0xd8]\n\t" /* context->X26 */ + "str x27, [x0, #0xe0]\n\t" /* context->X27 */ + "str x28, [x0, #0xe8]\n\t" /* context->X28 */ + "str x29, [x0, #0xf0]\n\t" /* context->Fp */ + "str x30, [x0, #0xf8]\n\t" /* context->Lr */ + "mov x1, sp\n\t" + "str x1, [x0, #0x100]\n\t" /* context->Sp */ + "adr x1, 1f\n\t" + "1: str x1, [x0, #0x108]\n\t" /* context->Pc */ + "ret" + ) /*********************************************************************** * set_cpu_context
1
0
0
0
André Hentschel : include: Rename 64-bit PState to 32-bit Cpsr on ARM64.
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: bd1f7ef1868dd563a82eacd1bf414bf8d1a7254e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=bd1f7ef1868dd563a82eacd1b…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Sun Jun 14 23:24:22 2015 +0200 include: Rename 64-bit PState to 32-bit Cpsr on ARM64. --- dlls/dbghelp/cpu_arm64.c | 5 ++--- dlls/ntdll/signal_arm64.c | 10 +++++----- include/winnt.h | 2 +- programs/winedbg/be_arm64.c | 12 ++++++------ programs/winedbg/gdbproxy.c | 2 +- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/dlls/dbghelp/cpu_arm64.c b/dlls/dbghelp/cpu_arm64.c index 9e77ac1..9c17e27 100644 --- a/dlls/dbghelp/cpu_arm64.c +++ b/dlls/dbghelp/cpu_arm64.c @@ -166,7 +166,7 @@ static void* arm64_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* siz #ifdef __aarch64__ switch (regno) { - + case CV_ARM64_PSTATE: *size = sizeof(ctx->Cpsr); return &ctx->Cpsr; case CV_ARM64_X0 + 0: *size = sizeof(ctx->X0); return &ctx->X0; case CV_ARM64_X0 + 1: *size = sizeof(ctx->X1); return &ctx->X1; case CV_ARM64_X0 + 2: *size = sizeof(ctx->X2); return &ctx->X2; @@ -201,7 +201,6 @@ static void* arm64_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* siz case CV_ARM64_LR: *size = sizeof(ctx->Lr); return &ctx->Lr; case CV_ARM64_SP: *size = sizeof(ctx->Sp); return &ctx->Sp; case CV_ARM64_PC: *size = sizeof(ctx->Pc); return &ctx->Pc; - case CV_ARM64_PSTATE: *size = sizeof(ctx->PState); return &ctx->PState; } #endif FIXME("Unknown register %x\n", regno); @@ -212,6 +211,7 @@ static const char* arm64_fetch_regname(unsigned regno) { switch (regno) { + case CV_ARM64_PSTATE: return "cpsr"; case CV_ARM64_X0 + 0: return "x0"; case CV_ARM64_X0 + 1: return "x1"; case CV_ARM64_X0 + 2: return "x2"; @@ -246,7 +246,6 @@ static const char* arm64_fetch_regname(unsigned regno) case CV_ARM64_LR: return "lr"; case CV_ARM64_SP: return "sp"; case CV_ARM64_PC: return "pc"; - case CV_ARM64_PSTATE: return "cpsr"; } FIXME("Unknown register %x\n", regno); return NULL; diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index a8b4816..e8dedd3 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -129,7 +129,7 @@ static void save_context( CONTEXT *context, const ucontext_t *sigcontext ) context->Lr = LR_sig(sigcontext); /* Link register */ context->Sp = SP_sig(sigcontext); /* Stack pointer */ context->Pc = PC_sig(sigcontext); /* Program Counter */ - context->PState = PSTATE_sig(sigcontext); /* Current State Register */ + context->Cpsr = PSTATE_sig(sigcontext); /* Current State Register */ } @@ -151,7 +151,7 @@ static void restore_context( const CONTEXT *context, ucontext_t *sigcontext ) LR_sig(sigcontext) = context->Lr; /* Link register */ SP_sig(sigcontext) = context->Sp; /* Stack pointer */ PC_sig(sigcontext) = context->Pc; /* Program Counter */ - PSTATE_sig(sigcontext) = context->PState; /* Current State Register */ + PSTATE_sig(sigcontext) = context->Cpsr; /* Current State Register */ } @@ -209,7 +209,7 @@ void copy_context( CONTEXT *to, const CONTEXT *from, DWORD flags ) to->Lr = from->Lr; to->Sp = from->Sp; to->Pc = from->Pc; - to->PState = from->PState; + to->Cpsr = from->Cpsr; } if (flags & CONTEXT_INTEGER) { @@ -241,7 +241,7 @@ NTSTATUS context_to_server( context_t *to, const CONTEXT *from ) to->integer.arm64_regs.x[30] = from->Lr; to->ctl.arm64_regs.sp = from->Sp; to->ctl.arm64_regs.pc = from->Pc; - to->ctl.arm64_regs.pstate = from->PState; + to->ctl.arm64_regs.pstate = from->Cpsr; } if (flags & CONTEXT_INTEGER) { @@ -274,7 +274,7 @@ NTSTATUS context_from_server( CONTEXT *to, const context_t *from ) to->Lr = from->integer.arm64_regs.x[30]; to->Sp = from->ctl.arm64_regs.sp; to->Pc = from->ctl.arm64_regs.pc; - to->PState = from->ctl.arm64_regs.pstate; + to->Cpsr = from->ctl.arm64_regs.pstate; } if (from->flags & SERVER_CTX_INTEGER) { diff --git a/include/winnt.h b/include/winnt.h index fcf65f2..08e7f48 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -1755,6 +1755,7 @@ PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_ typedef struct _CONTEXT { ULONG ContextFlags; + ULONG Cpsr; /* This section is specified/returned if the ContextFlags word contains the flag CONTEXT_INTEGER. */ @@ -1793,7 +1794,6 @@ typedef struct _CONTEXT { ULONGLONG Lr; ULONGLONG Sp; ULONGLONG Pc; - ULONGLONG PState; /* These are selected by CONTEXT_FLOATING_POINT */ /* FIXME */ diff --git a/programs/winedbg/be_arm64.c b/programs/winedbg/be_arm64.c index b68daef..80a12be 100644 --- a/programs/winedbg/be_arm64.c +++ b/programs/winedbg/be_arm64.c @@ -60,7 +60,7 @@ static void be_arm64_print_context(HANDLE hThread, const CONTEXT* ctx, int all_r int i; char buf[8]; - switch (ctx->PState & 0x0f) + switch (ctx->Cpsr & 0x0f) { case 0: strcpy(buf, "EL0t"); break; case 4: strcpy(buf, "EL1t"); break; @@ -73,15 +73,15 @@ static void be_arm64_print_context(HANDLE hThread, const CONTEXT* ctx, int all_r } dbg_printf("Register dump:\n"); - dbg_printf("%s %s Mode\n", (ctx->PState & 0x10) ? "ARM" : "ARM64", buf); + dbg_printf("%s %s Mode\n", (ctx->Cpsr & 0x10) ? "ARM" : "ARM64", buf); strcpy(buf, condflags); for (i = 0; buf[i]; i++) - if (!((ctx->PState >> 26) & (1 << (sizeof(condflags) - i)))) + if (!((ctx->Cpsr >> 26) & (1 << (sizeof(condflags) - i)))) buf[i] = '-'; - dbg_printf(" Pc:%016lx Sp:%016lx Lr:%016lx Pstate:%016lx(%s)\n", - ctx->Pc, ctx->Sp, ctx->Lr, ctx->PState, buf); + dbg_printf(" Pc:%016lx Sp:%016lx Lr:%016lx Cpsr:%08x(%s)\n", + ctx->Pc, ctx->Sp, ctx->Lr, ctx->Cpsr, buf); dbg_printf(" x0: %016lx x1: %016lx x2: %016lx x3: %016lx x4: %016lx\n", ctx->X0, ctx->X1, ctx->X2, ctx->X3, ctx->X4); dbg_printf(" x5: %016lx x6: %016lx x7: %016lx x8: %016lx x9: %016lx\n", @@ -104,6 +104,7 @@ static void be_arm64_print_segment_info(HANDLE hThread, const CONTEXT* ctx) static struct dbg_internal_var be_arm64_ctx[] = { + {CV_ARM64_PSTATE, "cpsr", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, Cpsr), dbg_itype_unsigned_int}, {CV_ARM64_X0 + 0, "x0", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, X0), dbg_itype_unsigned_long_int}, {CV_ARM64_X0 + 1, "x1", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, X1), dbg_itype_unsigned_long_int}, {CV_ARM64_X0 + 2, "x2", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, X2), dbg_itype_unsigned_long_int}, @@ -137,7 +138,6 @@ static struct dbg_internal_var be_arm64_ctx[] = {CV_ARM64_LR, "lr", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, Lr), dbg_itype_unsigned_long_int}, {CV_ARM64_SP, "sp", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, Sp), dbg_itype_unsigned_long_int}, {CV_ARM64_PC, "pc", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, Pc), dbg_itype_unsigned_long_int}, - {CV_ARM64_PSTATE, "pstate", (DWORD_PTR*)FIELD_OFFSET(CONTEXT, PState), dbg_itype_unsigned_long_int}, {0, NULL, 0, dbg_itype_none} }; diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c index fc5e8e5..dd63f7d 100644 --- a/programs/winedbg/gdbproxy.c +++ b/programs/winedbg/gdbproxy.c @@ -399,6 +399,7 @@ static struct cpu_register cpu_register_map[] = { #elif defined(__aarch64__) static const char target_xml[] = ""; static struct cpu_register cpu_register_map[] = { + REG(Cpsr, 4, CONTEXT_CONTROL), REG(X0, 8, CONTEXT_INTEGER), REG(X1, 8, CONTEXT_INTEGER), REG(X2, 8, CONTEXT_INTEGER), @@ -432,7 +433,6 @@ static struct cpu_register cpu_register_map[] = { REG(Lr, 8, CONTEXT_INTEGER), REG(Sp, 8, CONTEXT_CONTROL), REG(Pc, 8, CONTEXT_CONTROL), - REG(PState, 8, CONTEXT_CONTROL), }; #else # error Define the registers map for your CPU
1
0
0
0
Erich E. Hoover : ntdll: Fix IOCTL_DVD_READ_STRUCTURE expected output size.
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: cdefae9ef229f91b31e07f6e860a26054235787a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=cdefae9ef229f91b31e07f6e8…
Author: Erich E. Hoover <erich.e.hoover(a)wine-staging.com> Date: Sun Jun 14 15:13:40 2015 -0600 ntdll: Fix IOCTL_DVD_READ_STRUCTURE expected output size. --- dlls/ntdll/cdrom.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c index 25a3fde..4407277 100644 --- a/dlls/ntdll/cdrom.c +++ b/dlls/ntdll/cdrom.c @@ -2491,6 +2491,28 @@ static NTSTATUS DVD_GetRegion(int fd, PDVD_REGION region) #endif } +static DWORD DVD_ReadStructureSize(const DVD_READ_STRUCTURE *structure, DWORD size) +{ + if (!structure || size != sizeof(DVD_READ_STRUCTURE)) + return 0; + + switch (structure->Format) + { + case DvdPhysicalDescriptor: + return sizeof(DVD_LAYER_DESCRIPTOR); + case DvdCopyrightDescriptor: + return sizeof(DVD_COPYRIGHT_DESCRIPTOR); + case DvdDiskKeyDescriptor: + return sizeof(DVD_DISK_KEY_DESCRIPTOR); + case DvdBCADescriptor: + return sizeof(DVD_BCA_DESCRIPTOR); + case DvdManufacturerDescriptor: + return sizeof(DVD_MANUFACTURER_DESCRIPTOR); + default: + return 0; + } +} + /****************************************************************** * DVD_ReadStructure * @@ -3097,7 +3119,7 @@ NTSTATUS CDROM_DeviceIoControl(HANDLE hDevice, } break; case IOCTL_DVD_READ_STRUCTURE: - sz = sizeof(DVD_LAYER_DESCRIPTOR); + sz = DVD_ReadStructureSize(lpInBuffer, nInBufferSize); if (lpInBuffer == NULL || nInBufferSize != sizeof(DVD_READ_STRUCTURE)) status = STATUS_INVALID_PARAMETER; else if (nOutBufferSize < sz || !lpOutBuffer) status = STATUS_BUFFER_TOO_SMALL; else
1
0
0
0
Thomas Faller : cmd: Fix invalid memory access.
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: 4e91fa5f6b82109540ae16b7ed1db86e27f43394 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4e91fa5f6b82109540ae16b7e…
Author: Thomas Faller <tfaller1(a)gmx.de> Date: Sun Jun 14 21:40:26 2015 +0200 cmd: Fix invalid memory access. --- programs/cmd/wcmdmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 36d2ec1..1e42c47 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1330,7 +1330,7 @@ void WCMD_execute (const WCHAR *command, const WCHAR *redirects, * Changing default drive has to be handled as a special case. */ - if ((cmd[1] == ':') && IsCharAlphaW(cmd[0]) && (strlenW(cmd) == 2)) { + if ((strlenW(cmd) == 2) && (cmd[1] == ':') && IsCharAlphaW(cmd[0])) { WCHAR envvar[5]; WCHAR dir[MAX_PATH];
1
0
0
0
Nikolay Sivov : msxml3: Handle SafeArrayAccessData() failure in load() ( Coverity).
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: cfe52abcf46a9a36fc9ecb920df65bf98f199dfa URL:
http://source.winehq.org/git/wine.git/?a=commit;h=cfe52abcf46a9a36fc9ecb920…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Sun Jun 14 17:39:42 2015 +0300 msxml3: Handle SafeArrayAccessData() failure in load() (Coverity). --- dlls/msxml3/domdoc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index e081f1a..8344f36 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -2140,7 +2140,13 @@ static HRESULT WINAPI domdoc_load( case 1: /* Only takes UTF-8 strings. * NOT NULL-terminated. */ - SafeArrayAccessData(psa, (void**)&str); + hr = SafeArrayAccessData(psa, (void**)&str); + if (FAILED(hr)) + { + This->error = hr; + WARN("failed to access array data, 0x%08x\n", hr); + break; + } SafeArrayGetUBound(psa, 1, &len); if ((xmldoc = doparse(This, str, ++len, XML_CHAR_ENCODING_UTF8)))
1
0
0
0
Piotr Caban : msvcrt: Add _ungetwch implementation.
by Alexandre Julliard
15 Jun '15
15 Jun '15
Module: wine Branch: master Commit: 27b7ff73e47fd50b9bf745f35d356770d51e7743 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=27b7ff73e47fd50b9bf745f35…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Sun Jun 14 14:31:32 2015 +0200 msvcrt: Add _ungetwch implementation. --- dlls/msvcr100/msvcr100.spec | 4 ++-- dlls/msvcr110/msvcr110.spec | 4 ++-- dlls/msvcr120/msvcr120.spec | 4 ++-- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 4 ++-- dlls/msvcr90/msvcr90.spec | 4 ++-- dlls/msvcrt/console.c | 22 ++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 9 files changed, 35 insertions(+), 13 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index ce36cdf..b41037a 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1412,8 +1412,8 @@ @ cdecl _ungetch(long) @ cdecl _ungetch_nolock(long) @ cdecl _ungetwc_nolock(long ptr) MSVCRT__ungetwc_nolock -@ stub _ungetwch -@ stub _ungetwch_nolock +@ cdecl _ungetwch(long) +@ cdecl _ungetwch_nolock(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 8cf1202..eed8601 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1770,8 +1770,8 @@ @ cdecl _ungetch(long) @ cdecl _ungetch_nolock(long) @ cdecl _ungetwc_nolock(long ptr) MSVCRT__ungetwc_nolock -@ stub _ungetwch -@ stub _ungetwch_nolock +@ cdecl _ungetwch(long) +@ cdecl _ungetwch_nolock(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index bbf8f90..2c2b866 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1784,8 +1784,8 @@ @ cdecl _ungetch(long) @ cdecl _ungetch_nolock(long) @ cdecl _ungetwc_nolock(long ptr) MSVCRT__ungetwc_nolock -@ stub _ungetwch -@ stub _ungetwch_nolock +@ cdecl _ungetwch(long) +@ cdecl _ungetwch_nolock(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long) diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 299a645..eb3464b 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -578,7 +578,7 @@ @ cdecl _ultow(long ptr long) ntdll._ultow @ cdecl _umask(long) MSVCRT__umask @ cdecl _ungetch(long) -@ stub _ungetwch +@ cdecl _ungetwch(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long) diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 4741b85..92c71c3 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -574,7 +574,7 @@ @ cdecl _ultow(long ptr long) ntdll._ultow @ cdecl _umask(long) MSVCRT__umask @ cdecl _ungetch(long) -@ stub _ungetwch +@ cdecl _ungetwch(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 8f1f6f9..23bded4a 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1092,8 +1092,8 @@ @ cdecl _ungetch(long) @ cdecl _ungetch_nolock(long) @ cdecl _ungetwc_nolock(long ptr) MSVCRT__ungetwc_nolock -@ stub _ungetwch -@ stub _ungetwch_nolock +@ cdecl _ungetwch(long) +@ cdecl _ungetwch_nolock(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 109e2ad..32d850a 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1067,8 +1067,8 @@ @ cdecl _ungetch(long) @ cdecl _ungetch_nolock(long) @ cdecl _ungetwc_nolock(long ptr) MSVCRT__ungetwc_nolock -@ stub _ungetwch -@ stub _ungetwch_nolock +@ cdecl _ungetwch(long) +@ cdecl _ungetwch_nolock(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long) diff --git a/dlls/msvcrt/console.c b/dlls/msvcrt/console.c index 59b1dbb..154e78c 100644 --- a/dlls/msvcrt/console.c +++ b/dlls/msvcrt/console.c @@ -439,6 +439,28 @@ int CDECL _ungetch(int c) } /********************************************************************* + * _ungetwch_nolock (MSVCR80.@) + */ +MSVCRT_wchar_t CDECL _ungetwch_nolock(MSVCRT_wchar_t c) +{ + MSVCRT_wchar_t retval = MSVCRT_WEOF; + if (c != MSVCRT_WEOF && __MSVCRT_console_buffer_w == MSVCRT_WEOF) + retval = __MSVCRT_console_buffer_w = c; + return retval; +} + +/********************************************************************* + * _ungetwch (MSVCRT.@) + */ +MSVCRT_wchar_t CDECL _ungetwch(MSVCRT_wchar_t c) +{ + LOCK_CONSOLE; + c = _ungetwch_nolock(c); + UNLOCK_CONSOLE; + return c; +} + +/********************************************************************* * _kbhit (MSVCRT.@) */ int CDECL _kbhit(void) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index b81ebf9..d7a5878 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1025,7 +1025,7 @@ @ cdecl _umask(long) MSVCRT__umask # stub _umask_s(long ptr) @ cdecl _ungetch(long) -# stub _ungetwch(long) +@ cdecl _ungetwch(long) @ cdecl _unlink(str) MSVCRT__unlink @ cdecl _unloaddll(long) @ cdecl _unlock(long)
1
0
0
0
← Newer
1
...
30
31
32
33
34
35
36
...
61
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
Results per page:
10
25
50
100
200