Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
April 2016
- 53 participants
- 568 messages
Re: [PATCH 1/3] user32/tests: Moved creating .ico file into a helper function.
by Marvin
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at
https://testbot.winehq.org/JobDetails.pl?Key=22746
Your paranoid android.
=== w864 (32 bit cursoricon) ===
cursoricon.c:1436: Test failed: Create cursor failed.
cursoricon.c:1441: Test failed: GetIconInfo() failed.
cursoricon.c:1443: Test failed: Last error: 1402
cursoricon.c:1458: Test failed: DestroyCursor() failed.
cursoricon.c:1460: Test failed: Last error: 1402
cursoricon.c:1593: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1600: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1601: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0x0).
cursoricon.c:1602: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 1).
cursoricon.c:1608: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1620: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1626: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1660: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1666: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1672: Test failed: Unexpected number of steps in cursor (0 != 1)
cursoricon.c:1679: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1681: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1682: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1685: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != ~0).
cursoricon.c:1702: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1714: Test failed: Create cursor failed (error = deadbeef).
cursoricon.c:1720: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xc0de).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xcafe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbabe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1745: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
=== w1064 (32 bit cursoricon) ===
cursoricon.c:1436: Test failed: Create cursor failed.
cursoricon.c:1441: Test failed: GetIconInfo() failed.
cursoricon.c:1443: Test failed: Last error: 1402
cursoricon.c:1458: Test failed: DestroyCursor() failed.
cursoricon.c:1460: Test failed: Last error: 1402
cursoricon.c:1593: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1600: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1601: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0x0).
cursoricon.c:1602: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 1).
cursoricon.c:1608: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1620: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1626: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1660: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1666: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1672: Test failed: Unexpected number of steps in cursor (0 != 1)
cursoricon.c:1679: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1681: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1682: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1685: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != ~0).
cursoricon.c:1702: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1714: Test failed: Create cursor failed (error = deadbeef).
cursoricon.c:1720: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xc0de).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xcafe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 00000000: (00000000, 00000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbabe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1745: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
=== w864 (64 bit cursoricon) ===
cursoricon.c:1436: Test failed: Create cursor failed.
cursoricon.c:1441: Test failed: GetIconInfo() failed.
cursoricon.c:1443: Test failed: Last error: 1402
cursoricon.c:1458: Test failed: DestroyCursor() failed.
cursoricon.c:1460: Test failed: Last error: 1402
cursoricon.c:1593: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1600: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1601: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0x0).
cursoricon.c:1602: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 1).
cursoricon.c:1608: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1620: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1626: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1660: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1666: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1672: Test failed: Unexpected number of steps in cursor (0 != 1)
cursoricon.c:1679: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1681: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1682: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1685: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != ~0).
cursoricon.c:1702: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1714: Test failed: Create cursor failed (error = deadbeef).
cursoricon.c:1720: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xc0de).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xcafe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbabe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1745: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
=== w1064 (64 bit cursoricon) ===
cursoricon.c:1436: Test failed: Create cursor failed.
cursoricon.c:1441: Test failed: GetIconInfo() failed.
cursoricon.c:1443: Test failed: Last error: 1402
cursoricon.c:1458: Test failed: DestroyCursor() failed.
cursoricon.c:1460: Test failed: Last error: 1402
cursoricon.c:1593: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1600: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1601: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0x0).
cursoricon.c:1602: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 1).
cursoricon.c:1608: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1620: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1626: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1635: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1637: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1638: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1641: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1660: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1666: Test failed: Create cursor failed (error = -559038737).
cursoricon.c:1672: Test failed: Unexpected number of steps in cursor (0 != 1)
cursoricon.c:1679: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1681: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1682: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbeef).
cursoricon.c:1685: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != ~0).
cursoricon.c:1702: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:1714: Test failed: Create cursor failed (error = deadbeef).
cursoricon.c:1720: Test failed: Unexpected number of steps in cursor (0 != 3)
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 0.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xc0de).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 1.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xcafe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1731: Test failed: GetCursorFrameInfo() failed for cursor 0000000000000000: (0000000000000000, 0000000000000000).
cursoricon.c:1472: Test failed: GetIconInfo() failed
cursoricon.c:1733: Test failed: GetCursorFrameInfo() returned wrong cursor data for frame 2.
cursoricon.c:1734: Test failed: GetCursorFrameInfo() unexpected param 4 value (0xdead != 0xbabe).
cursoricon.c:1737: Test failed: GetCursorFrameInfo() unexpected param 5 value (57005 != 3).
cursoricon.c:1745: Test failed: DestroyCursor() failed (error = 1402).
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
cursoricon.c:2603: Test failed: LoadImage() failed with 0.
April 29, 2016
Re: Experimental 64 bit OS X packages ready for testing
by Diego Vicioso
Can anyone tell me what this means?
I tried to run a 64bit app in wine, here is what I got.
.wine/drive_c/Program\ Files\ \(x86\)/Grand\ Theft\ Auto\ V/GTAVLauncher.exe
fixme:winediag:start_process Wine Staging 1.9.8 is a testing version containing experimental patches.
fixme:winediag:start_process Please mention your exact version when filing bug reports on winehq.org.
fixme:ntdll:NtCreateNamedPipeFile Message mode not supported, falling back to byte mode.
fixme:ntdll:NtCreateNamedPipeFile Message mode not supported, falling back to byte mode.
fixme:ntdll:NtCreateNamedPipeFile Message mode not supported, falling back to byte mode.
fixme:ntdll:NtCreateNamedPipeFile Message mode not supported, falling back to byte mode.
err:seh:setup_exception stack overflow 1632 bytes in thread 0024 eip 000000007bc42691 esp 0000000000130fa0 stack 0x130000-0x131000-0x230000
Sent from my mac
April 29, 2016
Re: [PATCH v2] kernel32/tests: Add more tests for GetConsoleFontInfo
by Hugh McMaster
On Friday, 29 April 2016 11:40 PM, Hugh McMaster wrote:
>On Friday, 29 April 2016 11:07 PM, Sebastian Lackner wrote:
>
>On 29.04.2016 13:29, Hugh McMaster wrote:
>>> SetLastError(0xdeadbeef);
>>> ret = pGetConsoleFontInfo(NULL, FALSE, 0, cfi);
>>> ok(!ret, "got %d, expected zero\n", ret);
>>> todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError());
>>> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
>>> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
>>> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
>>
>> Those tests do not add much value. Without initializing cfi before each call,
>> its impossible to tell if GetConsoleFontInfo() nulled the struct or if it wasn't
>> touched at all. However, I'm also not sure if we have to care about the struct
>> content in case of a failure.
>
>The values in the struct weren't altered from zero after the first failed call. But I take your point.
>I'll try memset-ing another value and checking the returned values.
I tried doing a memset with values 1, 5 and 10. Each test returned junk values.
Only a memset with zero did not return a junk value (as in the original patch).
So it definitely looks as though GetConsoleFontInfo does not null the struct on error or before
performing an operation. In this case, I'll remove those !cfi[0].element tests.
April 29, 2016
Re: [PATCH v2] kernel32/tests: Add more tests for GetConsoleFontInfo
by Hugh McMaster
On Friday, 29 April 2016 11:07 PM, Sebastian Lackner wrote:
On 29.04.2016 13:29, Hugh McMaster wrote:
>> SetLastError(0xdeadbeef);
>> ret = pGetConsoleFontInfo(NULL, FALSE, 0, cfi);
>> ok(!ret, "got %d, expected zero\n", ret);
>> todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError());
>> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
>> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
>> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
>
> Those tests do not add much value. Without initializing cfi before each call,
> its impossible to tell if GetConsoleFontInfo() nulled the struct or if it wasn't
> touched at all. However, I'm also not sure if we have to care about the struct
> content in case of a failure.
The values in the struct weren't altered from zero after the first failed call. But I take your point.
I'll try memset-ing another value and checking the returned values.
> for (i = 0; i < num_fonts; i++)
> {
> tmp_font = GetConsoleFontSize(std_output, cfi[i].nFont);
> tmp_w = (double)orig_font.X / tmp_font.X * win_width;
> tmp_h = (double)orig_font.Y / tmp_font.Y * win_height;
> - ok(cfi[i].dwFontSize.X == tmp_w, "got %d, expected %d\n", cfi[i].dwFontSize.X, tmp_w);
> - ok(cfi[i].dwFontSize.Y == tmp_h, "got %d, expected %d\n", cfi[i].dwFontSize.Y, tmp_h);
> + todo_wine ok(cfi[i].dwFontSize.X == tmp_w, "got %d, expected %d\n", cfi[i].dwFontSize.X, tmp_w);
> + todo_wine ok(cfi[i].dwFontSize.Y == tmp_h, "got %d, expected %d\n", cfi[i].dwFontSize.Y, tmp_h);
> As mentioned in one of the previous mails, I still think it would be useful to have a test like
> ok(cfi[i].nFont == i, "...\n"); to show that the elements are returned in sorted order, and that
> the font index matches the array index. Otherwise accessing by index (as done in the test above)
> would not work. Did you defer it to a later patch or was there anything unclear?
This was on my 'to do' list. Anyway, I've never seen behaviour to suggest the elements aren't
sorted, but I'll add the test to each loop to make certain.
April 29, 2016
Re: comctl32: Use SetRect() instead of open coding it.
by Sebastian Lackner
On 29.04.2016 15:29, Michael Stefaniuc wrote:
> On 04/29/2016 03:24 PM, Sebastian Lackner wrote:
>> On 29.04.2016 15:21, Michael Stefaniuc wrote:
>>> - rcDragIcon.left = rcListBox.left - DRAGICON_HOTSPOT_X;
>>> - rcDragIcon.top = rcItem.top - DRAGICON_HOTSPOT_Y;
>>> - rcDragIcon.right = rcListBox.left;
>>> - rcDragIcon.bottom = rcDragIcon.top + DRAGICON_HEIGHT;
>>> + SetRect(&rcDragIcon, rcListBox.left - DRAGICON_HOTSPOT_X, rcItem.top - DRAGICON_HOTSPOT_Y,
>>> + rcListBox.left, rcDragIcon.top + DRAGICON_HEIGHT);
>>
>> This won't work as expected. Haven't checked if there are more similar cases.
> Argghh! Missed that one.
> For whatever reason the coccinelle rule to prevent this isn't catching
> it if it happens in the last argument to the function call. I had
> manually eliminated two other cases like this but missed this one.
>
> bye
> michael
>
Seems like its not the only one ;)
> @@ -2136,10 +2135,7 @@ static void TAB_DrawItem(const TAB_INFO *infoPtr, HDC hdc, INT iItem)
>
> /* Now erase the top corner and draw diagonal edge */
> SetBkColor(hdc, corner);
> - r1.left = r.right - ROUND_CORNER_SIZE - 1;
> - r1.top = r.top;
> - r1.right = r.right;
> - r1.bottom = r1.top + ROUND_CORNER_SIZE;
> + SetRect(&r1, r.right - ROUND_CORNER_SIZE - 1, r.top, r.right, r1.top + ROUND_CORNER_SIZE);
> ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0);
> r1.right--;
> DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDTOPLEFT);
April 29, 2016
Re: comctl32: Use SetRect() instead of open coding it.
by Michael Stefaniuc
On 04/29/2016 03:24 PM, Sebastian Lackner wrote:
> On 29.04.2016 15:21, Michael Stefaniuc wrote:
>> - rcDragIcon.left = rcListBox.left - DRAGICON_HOTSPOT_X;
>> - rcDragIcon.top = rcItem.top - DRAGICON_HOTSPOT_Y;
>> - rcDragIcon.right = rcListBox.left;
>> - rcDragIcon.bottom = rcDragIcon.top + DRAGICON_HEIGHT;
>> + SetRect(&rcDragIcon, rcListBox.left - DRAGICON_HOTSPOT_X, rcItem.top - DRAGICON_HOTSPOT_Y,
>> + rcListBox.left, rcDragIcon.top + DRAGICON_HEIGHT);
>
> This won't work as expected. Haven't checked if there are more similar cases.
Argghh! Missed that one.
For whatever reason the coccinelle rule to prevent this isn't catching
it if it happens in the last argument to the function call. I had
manually eliminated two other cases like this but missed this one.
bye
michael
April 29, 2016
Re: comctl32: Use SetRect() instead of open coding it.
by Sebastian Lackner
On 29.04.2016 15:21, Michael Stefaniuc wrote:
> - rcDragIcon.left = rcListBox.left - DRAGICON_HOTSPOT_X;
> - rcDragIcon.top = rcItem.top - DRAGICON_HOTSPOT_Y;
> - rcDragIcon.right = rcListBox.left;
> - rcDragIcon.bottom = rcDragIcon.top + DRAGICON_HEIGHT;
> + SetRect(&rcDragIcon, rcListBox.left - DRAGICON_HOTSPOT_X, rcItem.top - DRAGICON_HOTSPOT_Y,
> + rcListBox.left, rcDragIcon.top + DRAGICON_HEIGHT);
This won't work as expected. Haven't checked if there are more similar cases.
April 29, 2016
Re: [PATCH v2] kernel32/tests: Add more tests for GetConsoleFontInfo
by Sebastian Lackner
On 29.04.2016 13:29, Hugh McMaster wrote:
> Signed-off-by: Hugh McMaster <hugh.mcmaster(a)outlook.com>
> ---
> dlls/kernel32/tests/console.c | 76 ++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 71 insertions(+), 5 deletions(-)
>
> diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
> index 3f627be..756eaba 100644
> --- a/dlls/kernel32/tests/console.c
> +++ b/dlls/kernel32/tests/console.c
> @@ -2789,7 +2789,7 @@ static void test_GetConsoleFontInfo(HANDLE std_output)
> CONSOLE_FONT_INFO *cfi;
> BOOL ret;
> CONSOLE_SCREEN_BUFFER_INFO csbi;
> - COORD orig_font, tmp_font;
> + COORD orig_sb_size, tmp_sb_size, orig_font, tmp_font;
>
> hmod = GetModuleHandleA("kernel32.dll");
> pGetConsoleFontInfo = (void *)GetProcAddress(hmod, "GetConsoleFontInfo");
> @@ -2811,20 +2811,35 @@ static void test_GetConsoleFontInfo(HANDLE std_output)
> cfi = HeapAlloc(GetProcessHeap(), 0, memsize);
> memset(cfi, 0, memsize);
>
> + GetConsoleScreenBufferInfo(std_output, &csbi);
> + orig_sb_size = csbi.dwSize;
> + tmp_sb_size.X = csbi.dwSize.X + 3;
> + tmp_sb_size.Y = csbi.dwSize.Y + 5;
> + SetConsoleScreenBufferSize(std_output, tmp_sb_size);
> +
> SetLastError(0xdeadbeef);
> ret = pGetConsoleFontInfo(NULL, FALSE, 0, cfi);
> ok(!ret, "got %d, expected zero\n", ret);
> todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError());
> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
Those tests do not add much value. Without initializing cfi before each call,
its impossible to tell if GetConsoleFontInfo() nulled the struct or if it wasn't
touched at all. However, I'm also not sure if we have to care about the struct
content in case of a failure.
>
> SetLastError(0xdeadbeef);
> ret = pGetConsoleFontInfo(GetStdHandle(STD_INPUT_HANDLE), FALSE, 0, cfi);
> ok(!ret, "got %d, expected zero\n", ret);
> todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError());
> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
>
> SetLastError(0xdeadbeef);
> ret = pGetConsoleFontInfo(std_output, FALSE, 0, cfi);
> ok(!ret, "got %d, expected zero\n", ret);
> todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
>
> GetConsoleScreenBufferInfo(std_output, &csbi);
> win_width = csbi.srWindow.Right - csbi.srWindow.Left + 1;
> @@ -2834,22 +2849,73 @@ static void test_GetConsoleFontInfo(HANDLE std_output)
> index = cfi[0].nFont;
> orig_font = GetConsoleFontSize(std_output, index);
>
> + memset(cfi, 0, memsize);
> SetLastError(0xdeadbeef);
> ret = pGetConsoleFontInfo(std_output, FALSE, num_fonts, cfi);
> todo_wine ok(ret, "got %d, expected non-zero\n", ret);
> todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
>
> - ok(cfi[index].dwFontSize.X == win_width, "got %d, expected %d\n", cfi[index].dwFontSize.X, win_width);
> - ok(cfi[index].dwFontSize.Y == win_height, "got %d, expected %d\n", cfi[index].dwFontSize.Y, win_height);
> + todo_wine ok(cfi[index].dwFontSize.X == win_width, "got %d, expected %d\n",
> + cfi[index].dwFontSize.X, win_width);
> + todo_wine ok(cfi[index].dwFontSize.Y == win_height, "got %d, expected %d\n",
> + cfi[index].dwFontSize.Y, win_height);
>
> for (i = 0; i < num_fonts; i++)
> {
> tmp_font = GetConsoleFontSize(std_output, cfi[i].nFont);
> tmp_w = (double)orig_font.X / tmp_font.X * win_width;
> tmp_h = (double)orig_font.Y / tmp_font.Y * win_height;
> - ok(cfi[i].dwFontSize.X == tmp_w, "got %d, expected %d\n", cfi[i].dwFontSize.X, tmp_w);
> - ok(cfi[i].dwFontSize.Y == tmp_h, "got %d, expected %d\n", cfi[i].dwFontSize.Y, tmp_h);
> + todo_wine ok(cfi[i].dwFontSize.X == tmp_w, "got %d, expected %d\n", cfi[i].dwFontSize.X, tmp_w);
> + todo_wine ok(cfi[i].dwFontSize.Y == tmp_h, "got %d, expected %d\n", cfi[i].dwFontSize.Y, tmp_h);
As mentioned in one of the previous mails, I still think it would be useful to have a test like
ok(cfi[i].nFont == i, "...\n"); to show that the elements are returned in sorted order, and that
the font index matches the array index. Otherwise accessing by index (as done in the test above)
would not work. Did you defer it to a later patch or was there anything unclear?
> + }
> +
> + memset(cfi, 0, memsize);
> + SetLastError(0xdeadbeef);
> + ret = pGetConsoleFontInfo(NULL, TRUE, 0, cfi);
> + ok(!ret, "got %d, expected zero\n", ret);
> + todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError());
> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
> +
> + SetLastError(0xdeadbeef);
> + ret = pGetConsoleFontInfo(GetStdHandle(STD_INPUT_HANDLE), TRUE, 0, cfi);
> + ok(!ret, "got %d, expected zero\n", ret);
> + todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError());
> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
> +
> + SetLastError(0xdeadbeef);
> + ret = pGetConsoleFontInfo(std_output, TRUE, 0, cfi);
> + ok(!ret, "got %d, expected zero\n", ret);
> + todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
> + ok(!cfi[0].nFont, "got %d, expected 0\n", cfi[0].nFont);
> + ok(!cfi[0].dwFontSize.X, "got %d, expected 0\n", cfi[0].dwFontSize.X);
> + ok(!cfi[0].dwFontSize.Y, "got %d, expected 0\n", cfi[0].dwFontSize.Y);
> +
> + memset(cfi, 0, memsize);
> + SetLastError(0xdeadbeef);
> + ret = pGetConsoleFontInfo(std_output, TRUE, num_fonts, cfi);
> + todo_wine ok(ret, "got %d, expected non-zero\n", ret);
> + todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
> +
> + todo_wine ok(cfi[index].dwFontSize.X == csbi.dwMaximumWindowSize.X, "got %d, expected %d\n",
> + cfi[index].dwFontSize.X, csbi.dwMaximumWindowSize.X);
> + todo_wine ok(cfi[index].dwFontSize.Y == csbi.dwMaximumWindowSize.Y, "got %d, expected %d\n",
> + cfi[index].dwFontSize.Y, csbi.dwMaximumWindowSize.Y);
> +
> + for (i = 0; i < num_fonts; i++)
> + {
> + tmp_font = GetConsoleFontSize(std_output, cfi[i].nFont);
> + tmp_w = (double)orig_font.X / tmp_font.X * csbi.dwMaximumWindowSize.X;
> + tmp_h = (double)orig_font.Y / tmp_font.Y * csbi.dwMaximumWindowSize.Y;
> + todo_wine ok(cfi[i].dwFontSize.X == tmp_w, "got %d, expected %d\n", cfi[i].dwFontSize.X, tmp_w);
> + todo_wine ok(cfi[i].dwFontSize.Y == tmp_h, "got %d, expected %d\n", cfi[i].dwFontSize.Y, tmp_h);
> }
> +
> + HeapFree(GetProcessHeap(), 0, cfi);
> + SetConsoleScreenBufferSize(std_output, orig_sb_size);
> }
>
> START_TEST(console)
>
April 29, 2016
Re: [PATCH 1/2] ntdll: Add NtQueryMutant
by Sebastian Lackner
Hi Daniel,
thanks for working on this. I have a couple of remarks, see below.
On 29.04.2016 03:53, Daniel Lehman wrote:
> Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com>
> ---
> dlls/ntdll/sync.c | 38 +++++++++++++----
> dlls/ntdll/tests/om.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++
> server/mutex.c | 16 ++++++++
> server/protocol.def | 10 +++++
> 4 files changed, 167 insertions(+), 9 deletions(-)
>
> diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c
> index e87e672..576593f 100644
> --- a/dlls/ntdll/sync.c
> +++ b/dlls/ntdll/sync.c
> @@ -520,15 +520,35 @@ NTSTATUS WINAPI NtReleaseMutant( IN HANDLE handle, OUT PLONG prev_count OPTIONAL
> * NtQueryMutant [NTDLL.@]
> * ZwQueryMutant [NTDLL.@]
> */
> -NTSTATUS WINAPI NtQueryMutant(IN HANDLE handle,
> - IN MUTANT_INFORMATION_CLASS MutantInformationClass,
> - OUT PVOID MutantInformation,
> - IN ULONG MutantInformationLength,
> - OUT PULONG ResultLength OPTIONAL )
> -{
> - FIXME("(%p %u %p %u %p): stub!\n",
> - handle, MutantInformationClass, MutantInformation, MutantInformationLength, ResultLength);
Please convert the FIXME to a TRACE instead of removing it.
> - return STATUS_NOT_IMPLEMENTED;
> +NTSTATUS WINAPI NtQueryMutant( HANDLE handle, MUTANT_INFORMATION_CLASS class,
> + void *info, ULONG len, ULONG *ret_len )
> +{
> + NTSTATUS ret;
> + MUTANT_BASIC_INFORMATION *out = info;
> +
> + if (class != MutantBasicInformation)
> + {
> + FIXME("(%p, %d, %d) Unknown class\n",
> + handle, class, len);
> + return STATUS_INVALID_INFO_CLASS;
> + }
> +
> + if (len != sizeof(MUTANT_BASIC_INFORMATION)) return STATUS_INFO_LENGTH_MISMATCH;
> +
> + SERVER_START_REQ( query_mutex )
> + {
> + req->handle = wine_server_obj_handle( handle );
> + if (!(ret = wine_server_call( req )))
> + {
> + out->CurrentCount = 1 - reply->count;
> + out->OwnedByCaller = reply->owned;
> + out->AbandonedState = reply->abandoned;
> + if (ret_len) *ret_len = sizeof(MUTANT_BASIC_INFORMATION);
> + }
> + }
> + SERVER_END_REQ;
> +
> + return ret;
> }
>
> /*
> diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
> index c05f31d..ee850d3 100644
> --- a/dlls/ntdll/tests/om.c
> +++ b/dlls/ntdll/tests/om.c
> @@ -43,6 +43,8 @@ static NTSTATUS (WINAPI *pNtCreateMailslotFile)( PHANDLE, ACCESS_MASK, POBJECT_A
> ULONG, ULONG, ULONG, PLARGE_INTEGER );
> static NTSTATUS (WINAPI *pNtCreateMutant)( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES, BOOLEAN );
> static NTSTATUS (WINAPI *pNtOpenMutant) ( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES );
> +static NTSTATUS (WINAPI *pNtQueryMutant) ( HANDLE, MUTANT_INFORMATION_CLASS, PVOID, ULONG, PULONG );
> +static NTSTATUS (WINAPI *pNtReleaseMutant)( HANDLE, PLONG );
> static NTSTATUS (WINAPI *pNtCreateSemaphore)( PHANDLE, ACCESS_MASK,const POBJECT_ATTRIBUTES,LONG,LONG );
> static NTSTATUS (WINAPI *pNtOpenSemaphore)( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES );
> static NTSTATUS (WINAPI *pNtCreateTimer) ( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES, TIMER_TYPE );
> @@ -1865,6 +1867,113 @@ static void test_null_device(void)
> CloseHandle(ov.hEvent);
> }
>
> +static DWORD WINAPI mutant_thread( void *arg )
> +{
> + MUTANT_BASIC_INFORMATION info;
> + NTSTATUS status;
> + HANDLE mutant;
> +
> + mutant = arg;
> + status = WaitForSingleObject( mutant, 1000 );
> + ok( status == STATUS_SUCCESS, "WaitForSingleObject failed %08x\n", status );
WaitForSingleObject does not return STATUS_* values.
This error also appears a couple more times below.
> +
> + status = pNtQueryMutant(mutant, MutantBasicInformation, &info, sizeof(info), NULL);
> + ok( status == STATUS_SUCCESS, "NtQueryMutant failed %08x\n", status );
> + ok( info.CurrentCount == 0, "NtQueryMutant failed, expected 0, got %d\n", info.CurrentCount );
> + ok( info.OwnedByCaller == TRUE, "NtQueryMutant failed, expected TRUE, got %d\n", info.OwnedByCaller );
> + ok( info.AbandonedState == FALSE, "NtQueryMutant failed, expected FALSE, got %d\n", info.AbandonedState );
Its a matter of taste, but I am not sure if it makes sense to duplicate the "NtQueryMutant failed".
Better print the variable which was tested, for example "expected CurrentCount == 0, got %d\n", and so on.
> + /* abandon mutant */
> +
> + return 0;
> +}
> +
> +static void test_mutant(void)
> +{
> + static const WCHAR name[] = {'\\','B','a','s','e','N','a','m','e','d','O','b','j','e','c','t','s',
> + '\\','t','e','s','t','_','m','u','t','a','n','t',0};
> + MUTANT_BASIC_INFORMATION info;
> + OBJECT_ATTRIBUTES attr;
> + UNICODE_STRING str;
> + NTSTATUS status;
> + HANDLE mutant;
> + HANDLE thread;
> + ULONG len;
> + LONG prev;
> +
> + pRtlInitUnicodeString(&str, name);
> + InitializeObjectAttributes(&attr, &str, 0, 0, NULL);
> + status = pNtCreateMutant(&mutant, GENERIC_ALL, &attr, TRUE);
> + ok( status == STATUS_SUCCESS, "Failed to create Mutant(%08x)\n", status );
> +
> + /* bogus */
> + status = pNtQueryMutant(mutant, MutantBasicInformation, &info, 0, NULL);
> + ok( status == STATUS_INFO_LENGTH_MISMATCH,
> + "Failed to NtQueryMutant, expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status );
> + status = pNtQueryMutant(mutant, 0x42, &info, sizeof(info), NULL);
> + ok( status == STATUS_INVALID_INFO_CLASS,
> + "Failed to NtQueryMutant, expected STATUS_INVALID_INFO_CLASS, got %08x\n", status );
> + status = pNtQueryMutant((HANDLE)0xdeadbeef, MutantBasicInformation, &info, sizeof(info), NULL);
> + ok( status == STATUS_INVALID_HANDLE,
> + "Failed to NtQueryMutant, expected STATUS_INVALID_HANDLE, got %08x\n", status );
Not sure if you have seen it, but your patch causes new test failures, see:
http://newtestbot.winehq.org/JobDetails.pl?Key=22713
> +
> + /* new */
> + len = -1;
> + status = pNtQueryMutant(mutant, MutantBasicInformation, &info, sizeof(info), &len);
> + ok( status == STATUS_SUCCESS, "NtQueryMutant failed %08x\n", status );
> + ok( info.CurrentCount == 0, "NtQueryMutant failed, expected 0, got %d\n", info.CurrentCount );
> + ok( info.OwnedByCaller == TRUE, "NtQueryMutant failed, expected TRUE, got %d\n", info.OwnedByCaller );
> + ok( info.AbandonedState == FALSE, "NtQueryMutant failed, expected FALSE, got %d\n", info.AbandonedState );
> + ok( len == sizeof(info), "NtQueryMutant failed, expected %u, got %u\n", (DWORD)sizeof(info), len );
Its better to avoid printing sizeof() values, only print the "len" value here.
> +
There is a whitespace issue in the line above.
> + status = WaitForSingleObject( mutant, 1000 );
> + ok( status == STATUS_SUCCESS, "WaitForSingleObject failed %08x\n", status );
> +
> + status = pNtQueryMutant(mutant, MutantBasicInformation, &info, sizeof(info), NULL);
> + ok( status == STATUS_SUCCESS, "NtQueryMutant failed %08x\n", status );
> + ok( info.CurrentCount == -1, "NtQueryMutant failed, expected -1, got %d\n", info.CurrentCount );
> + ok( info.OwnedByCaller == TRUE, "NtQueryMutant failed, expected TRUE, got %d\n", info.OwnedByCaller );
> + ok( info.AbandonedState == FALSE, "NtQueryMutant failed, expected FALSE, got %d\n", info.AbandonedState );
> +
> + prev = 0xdeadbeef;
> + status = pNtReleaseMutant(mutant, &prev);
> + ok( status == STATUS_SUCCESS, "NtQueryRelease failed %08x\n", status );
> + todo_wine ok( prev == -1, "NtQueryRelease failed, expected -1, got %d\n", prev );
> +
> + prev = 0xdeadbeef;
> + status = pNtReleaseMutant(mutant, &prev);
> + ok( status == STATUS_SUCCESS, "NtQueryRelease failed %08x\n", status );
> + todo_wine ok( prev == 0, "NtQueryRelease failed, expected 0, got %d\n", prev );
> +
> + status = pNtQueryMutant(mutant, MutantBasicInformation, &info, sizeof(info), NULL);
> + ok( status == STATUS_SUCCESS, "NtQueryMutant failed %08x\n", status );
> + ok( info.CurrentCount == 1, "NtQueryMutant failed, expected 1, got %d\n", info.CurrentCount );
> + ok( info.OwnedByCaller == FALSE, "NtQueryMutant failed, expected FALSE, got %d\n", info.OwnedByCaller );
> + ok( info.AbandonedState == FALSE, "NtQueryMutant failed, expected FALSE, got %d\n", info.AbandonedState );
> +
> + /* abandoned */
> + thread = CreateThread( NULL, 0, mutant_thread, mutant, 0, NULL );
> + status = WaitForSingleObject( thread, 1000 );
> + ok( status == 0, "WaitForSingleObject failed %08x\n", status );
> + NtClose( thread );
> +
> + status = pNtQueryMutant(mutant, MutantBasicInformation, &info, sizeof(info), NULL);
> + ok( status == STATUS_SUCCESS, "NtQueryMutant failed %08x\n", status );
> + ok( info.CurrentCount == 1, "NtQueryMutant failed, expected 0, got %d\n", info.CurrentCount );
> + ok( info.OwnedByCaller == FALSE, "NtQueryMutant failed, expected FALSE, got %d\n", info.OwnedByCaller );
> + ok( info.AbandonedState == TRUE, "NtQueryMutant failed, expected TRUE, got %d\n", info.AbandonedState );
> +
> + status = WaitForSingleObject( mutant, 1000 );
> + ok( status == STATUS_ABANDONED_WAIT_0, "WaitForSingleObject failed %08x\n", status );
> +
> + status = pNtQueryMutant(mutant, MutantBasicInformation, &info, sizeof(info), NULL);
> + ok( status == STATUS_SUCCESS, "NtQueryMutant failed %08x\n", status );
> + ok( info.CurrentCount == 0, "NtQueryMutant failed, expected 0, got %d\n", info.CurrentCount );
> + ok( info.OwnedByCaller == TRUE, "NtQueryMutant failed, expected TRUE, got %d\n", info.OwnedByCaller );
> + ok( info.AbandonedState == FALSE, "NtQueryMutant failed, expected FALSE, got %d\n", info.AbandonedState );
> +
> + NtClose( mutant );
> +}
> +
> START_TEST(om)
> {
> HMODULE hntdll = GetModuleHandleA("ntdll.dll");
> @@ -1892,6 +2001,8 @@ START_TEST(om)
> pNtQueryEvent = (void *)GetProcAddress(hntdll, "NtQueryEvent");
> pNtPulseEvent = (void *)GetProcAddress(hntdll, "NtPulseEvent");
> pNtOpenMutant = (void *)GetProcAddress(hntdll, "NtOpenMutant");
> + pNtQueryMutant = (void *)GetProcAddress(hntdll, "NtQueryMutant");
> + pNtReleaseMutant = (void *)GetProcAddress(hntdll, "NtReleaseMutant");
> pNtOpenFile = (void *)GetProcAddress(hntdll, "NtOpenFile");
> pNtClose = (void *)GetProcAddress(hntdll, "NtClose");
> pRtlInitUnicodeString = (void *)GetProcAddress(hntdll, "RtlInitUnicodeString");
> @@ -1925,6 +2036,7 @@ START_TEST(om)
> test_query_object();
> test_type_mismatch();
> test_event();
> + test_mutant();
> test_keyed_events();
> test_null_device();
> }
> diff --git a/server/mutex.c b/server/mutex.c
> index 3693095..b183934 100644
> --- a/server/mutex.c
> +++ b/server/mutex.c
> @@ -251,3 +251,19 @@ DECL_HANDLER(release_mutex)
> release_object( mutex );
> }
> }
> +
> +/* return details about the event */
Copy-paste mistake?
> +DECL_HANDLER(query_mutex)
> +{
> + struct mutex *mutex;
> +
> + if ((mutex = (struct mutex *)get_handle_obj( current->process, req->handle,
> + MUTANT_QUERY_STATE, &mutex_ops )))
> + {
> + reply->count = mutex->count;
> + reply->owned = mutex->owner == current;
I usually prefer brackets around such comparisons, but not sure if its strictly required.
> + reply->abandoned = mutex->abandoned;
> +
> + release_object( mutex );
> + }
> +}
> diff --git a/server/protocol.def b/server/protocol.def
> index a5a45eb..3359b77 100644
> --- a/server/protocol.def
> +++ b/server/protocol.def
> @@ -1093,6 +1093,16 @@ enum event_op { PULSE_EVENT, SET_EVENT, RESET_EVENT };
> @END
>
>
> +/* Query a mutex */
> +(a)REQ(query_mutex)
> + obj_handle_t handle; /* handle to event */
> +(a)REPLY
> + unsigned int count; /* current count of mutex */
> + int owned; /* true if owned by current thread */
> + int abandoned; /* true if abandoned */
> +(a)END
> +
> +
> /* Create a semaphore */
> @REQ(create_semaphore)
> unsigned int access; /* wanted access rights */
>
April 29, 2016
Re: user32: Implement SetCoalescableTimer and add basic tests.
by Sebastian Lackner
On 29.04.2016 12:50, Marvin wrote:
> Hi,
>
> While running your changed tests on Windows, I think I found new failures.
> Being a bot and all I'm not very good at pattern recognition, so I might be
> wrong, but could you please double-check?
> Full results can be found at
> https://testbot.winehq.org/JobDetails.pl?Key=22731
>
> Your paranoid android.
>
>
> === w1064 (32 bit msg) ===
> msg.c:6484: Test failed: Update region shouldn't be empty
> msg.c:6718: Test failed: InvalidateErase: 0: the msg sequence is not complete: expected 0085 - actual 0000
> msg.c:6720: Test failed: Paint: 0: the msg sequence is not complete: expected 000f - actual 0000
> msg.c:6490: Test failed: Regions are different
> msg.c:6490: Test failed: Regions are different
> msg.c:6490: Test failed: Regions are different
>
> === w864 (64 bit msg) ===
> msg.c:6484: Test failed: Update region shouldn't be empty
> msg.c:6718: Test failed: InvalidateErase: 0: the msg sequence is not complete: expected 0085 - actual 0000
> msg.c:6720: Test failed: Paint: 0: the msg sequence is not complete: expected 000f - actual 0000
> msg.c:6490: Test failed: Regions are different
> msg.c:6490: Test failed: Regions are different
> msg.c:6490: Test failed: Regions are different
>
> === w1064 (64 bit msg) ===
> msg.c:6484: Test failed: Update region shouldn't be empty
> msg.c:6718: Test failed: InvalidateErase: 0: the msg sequence is not complete: expected 0085 - actual 0000
> msg.c:6720: Test failed: Paint: 0: the msg sequence is not complete: expected 000f - actual 0000
> msg.c:6490: Test failed: Regions are different
> msg.c:6490: Test failed: Regions are different
> msg.c:6490: Test failed: Regions are different
>
These are existing test failures.
April 29, 2016