Compare commits

...

97 Commits

Author SHA1 Message Date
Michael Stefaniuc 6ed1d04b13 Release 5.0.1.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-06-02 15:09:41 +02:00
Gijs Vermeulen 515c1f7cb2 kernelbase: Set req->mask in SetConsoleScreenBufferInfoEx.
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e97fa67bc2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-06-02 12:17:54 +02:00
Michael Stefaniuc 23cb4f7942 tools: Get the ANNOUNCE bug list from the stable-notes git notes.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-22 00:01:40 +02:00
Matteo Bruni 7ee7bb0430 maintainers: Drop Józef Kucia.
Goodbye Józef, you left us too soon.

Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4f81c1fa9e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 23:15:08 +02:00
Akihiro Sagawa 3fbf668ae2 po: Update Japanese translation.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 98ad00db6b)
Conflicts:
	po/ja.po
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 16:20:17 +02:00
Mingcong Bai bdee4b1ec2 po: Update Simplified Chinese translation.
Signed-off-by: Mingcong Bai <jeffbai@aosc.xyz>
Signed-off-by: Jactry Zeng <jzeng@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a585d8f2f8)
Conflicts:
	po/zh_CN.po
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 13:13:08 +02:00
Lauri Kenttä f8ecc7fa65 po: Update Finnish translation.
Signed-off-by: Lauri Kenttä <lauri.kentta@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d5c5e73638)
Conflicts:
	po/fi.po
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 13:04:01 +02:00
Aurimas Fišeras eb491f23cb po: Update Lithuanian translation.
Signed-off-by: Aurimas Fišeras <aurimas@members.fsf.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5c0e699dba)
Conflicts:
	po/lt.po
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 13:01:39 +02:00
Daniel Lehman 668fd9f4b6 loader: Add Marquesas Standard Time Zone.
Signed-off-by: Daniel Lehman <dlehman25@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b41d5c10ad)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 12:57:36 +02:00
Daniel Lehman 59f58f02a4 loader: Add Bougainville Standard Time Zone.
Signed-off-by: Daniel Lehman <dlehman25@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a1ca4fe390)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 12:57:13 +02:00
Daniel Lehman dff634c8cf loader: Add Chatham Islands Standard Time Zone.
Signed-off-by: Daniel Lehman <dlehman25@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2cefb7bd85)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 12:56:37 +02:00
Lauri Kenttä 98ea3e0df1 po: Update Finnish translation.
Signed-off-by: Lauri Kenttä <lauri.kentta@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f37c55d77d)
Conflicts:
	po/fi.po
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 12:54:54 +02:00
Aurimas Fišeras 29413a5461 po: Update Lithuanian translation.
Signed-off-by: Aurimas Fišeras <aurimas@members.fsf.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit cd72281717)
Conflicts:
	po/lt.po
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 00:22:56 +02:00
Daniel Lehman c71785db01 tzres: Add Aleutian Time Zone.
Signed-off-by: Daniel Lehman <dlehman25@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6ef84f2e54)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 00:21:04 +02:00
Aurimas Fišeras 8d251f02df po: Update Lithuanian translation.
Signed-off-by: Aurimas Fišeras <aurimas@members.fsf.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 56c5b064b8)
Conflicts:
	po/lt.po
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 00:20:37 +02:00
Daniel Lehman 627f01947d tzres: Add Haiti Time Zone.
Signed-off-by: Daniel Lehman <dlehman25@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a832b2b799)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-21 00:00:04 +02:00
Henri Verbeet 0813ec9c91 wined3d: Properly validate the stage index in wined3d_stateblock_set_texture_stage_state() (Coverity).
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 125ba807e0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:53:45 +02:00
Sven Baars 1653bff666 wined3d: Avoid accessing freed memory in wined3d_view_gl_destroy() (Valgrind).
Signed-off-by: Sven Baars <sbaars@codeweavers.com>
Signed-off-by: Liam Middlebrook <lmiddlebrook@nvidia.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4128e457a9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:52:13 +02:00
Piotr Caban 37a1205885 gdiplus: Fix leak in SOFTWARE_GdipDrawDriverString.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Vincent Povirk <vincent@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f65cca4de3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:50:37 +02:00
Piotr Caban 3b2dc114fb gdiplus: Fix gdi handles leak in GdipMeasureCharacterRanges.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Vincent Povirk <vincent@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c74d909e3b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:50:17 +02:00
Piotr Caban 7c113aff87 winemac: Fix leaks in macdrv_surface_destroy.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c4becb85f1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:48:17 +02:00
Zebediah Figura f35542ec2e ddraw: Avoid leaking the primary stateblock.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2d22647506)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:38:19 +02:00
Jacek Caban 663cbd7fd5 rpcrt4: Use MustFree for all non-base types in get_param_pointer_info.
Fixes a leak for VT_VARIANT.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1980fcafe1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:32:13 +02:00
Nikolay Sivov 61eb313094 ole32: Fix a leak when creating antimoniker through activation.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 82044449c4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:28:40 +02:00
Nikolay Sivov ba06f2fb19 ole32: Fix a leak when creating pointer moniker through activation.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 157651a784)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:27:49 +02:00
Kevin Puetz 37d3edf9c9 rpcrt4: Fix ITypeInfo leak in get_iface_info.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a09c08f17a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:26:39 +02:00
Aaro Altonen fd6fe42003 urlmon: Add URLOpenPullStreamW() stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47535
Signed-off-by: Aaro Altonen <a.altonen@hotmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 626e437c29)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:16:20 +02:00
Paul Gofman aa74261560 wined3d: Support sRGB reads for WINED3DFMT_B5G6R5_UNORM.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48302
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 941bd46597)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 23:06:04 +02:00
Paul Gofman 1a4eba2353 include: Add Vista+ PEB_LDR_DATA structure fields.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48289
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 34e64876b2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-20 22:54:53 +02:00
Piotr Caban b728f57616 msvcr90/tests: Fix swscanf tests compilation on arm.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48846
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 05ca918528)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-19 23:18:46 +02:00
Chip Davis bac4e49570 msvcrt: Correct return value of ___mb_cur_max_l_func().
Signed-off-by: Chip Davis <cdavis@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b6a6fd987a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-19 23:17:56 +02:00
Lukáš Horáček f952d8ab10 wined3d: Add GTX 1660 SUPER as a card.
Signed-off-by: Lukáš Horáček <flgx16@gmail.com>
Signed-off-by: Torge Matthies <openglfreak@googlemail.com>
Signed-off-by: Liam Middlebrook <lmiddlebrook@nvidia.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0804914bb7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-19 23:06:25 +02:00
Brendan Shanks c6bdad85e3 wined3d: Add GPU information for NVIDIA GeForce GTX 1060 3GB.
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 32712b4bd7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-19 23:05:59 +02:00
Zhiyi Zhang 9b35837e37 wined3d: Add GPU information for NVIDIA GeForce GTX 1650 SUPER.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c8aad3407c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-19 23:05:29 +02:00
Jefferson Carpenter 40e27f9836 services: Initialize OVERLAPPED Offset and OffsetHigh.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48735
Signed-off-by: Jefferson Carpenter <jeffersoncarpenter2@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4dfd5f22f4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:38:30 +02:00
Piotr Caban 7db96d3e14 msvcrt: Optimize _strnicmp_l implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48723
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 471425c16d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:37:18 +02:00
Roman Pišl b3da036c2e wineconsole: Allow maximization.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48706
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit da395975b0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:33:35 +02:00
Paul Gofman ff4fc1c862 ntdll: Zero init reg_tzi in find_reg_tz_info().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48694
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3f0cbf4691)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:31:37 +02:00
Francois Gouget ad4516ff51 kernel32/tests: Fix test_Toolhelp()'s nested process lookup.
On Windows, processes are not reassigned to pid 1 when their parent
dies. This means many processes could have the same ppid despite being
started by unrelated processes. It also means test_Toolhelp() cannot
reliably look up the nested process by its ppid.
So look up for the nested process by its pid and only then check its
ppid, executable file, etc.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48664
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e4c15b5bbd)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:19:27 +02:00
Zebediah Figura d133d9c820 setupapi: Implement SetupDiGetSelectedDriver().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48639
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6971dfcfc2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:13:57 +02:00
Akihiro Sagawa 0a0bdbf1dc dsound: Make GlobalHandle() for the sound buffer failed.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 70aeb7e4b0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:12:05 +02:00
Akihiro Sagawa db754f0f18 dsound/tests: Add a test whether the buffer is a valid global memory.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e28638afcc)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:11:50 +02:00
Alistair Leslie-Hughes eb510fa5aa qwave: Add QOSAddSocketToFlow stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48580
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8641e59fe3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 23:07:53 +02:00
Aaro Altonen 4e884779ff kernelbase: Implement SetConsoleScreenBufferInfoEx().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47288
Signed-off-by: Aaro Altonen <a.altonen@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b21881f53c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 22:57:20 +02:00
Aaro Altonen a7549d9df7 kernel32/tests: Add tests for SetConsoleScreenBufferInfoEx().
Signed-off-by: Aaro Altonen <a.altonen@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 723506ef48)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 22:57:02 +02:00
Damjan Jovanovic 79b2c4a97d gdiplus: In CompositingModeSourceCopy, fully transparent pixels are drawn black.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42585
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Vincent Povirk <vincent@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 99a171981c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 22:52:52 +02:00
Paul Gofman 3020b07c4b iphlpapi: Support InitialNotification flag in NotifyUnicastIpAddressChange().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48669
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5cdd3848f5)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 22:04:33 +02:00
Alistair Leslie-Hughes b4c777d165 dmstyle: IDirectMusicStyle8 GetDefaultBand return S_FALSE.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48648
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 79b91eaf28)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 22:03:19 +02:00
Hans Leidekker 6fc30a3235 wbemprox: Implement Win32_DesktopMonitor.Name.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48646
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9631a526cf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 22:01:50 +02:00
Dmitry Timoshkov 6961e627c1 server: Ignore low word of a class instance when looking up for a window class.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6ac2ba3e3c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 21:47:45 +02:00
Dmitry Timoshkov 9e2ca4bae5 user32/tests: Add some tests for classes with non-zero low word instance.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e2c0f51312)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 21:47:29 +02:00
Brendan Shanks c2a28685d9 include: Fix size of RecordCreateOptionsEnum.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48577
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 61d0cc78b2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 21:45:43 +02:00
Brendan Shanks 4aaa9196cd include: Fix size of tomConstants enum.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48577
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0e408452a4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 21:45:23 +02:00
Brendan Shanks c683d7dcea include: Fix size of DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY enum.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48577
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ca2ad6acbf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 21:37:57 +02:00
Roman Pišl 0d85e007b9 ole32: Avoid calling QueryContinueDrag recursively.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48569
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 808d8b87a0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 16:10:54 +02:00
Alexandre Julliard d715810b3f ver: Use the 16-bit resource function in GetFileVersionInfo16().
The 32-bit functions no longer support LZ compression.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48557
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f4ebe20b2b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 16:09:30 +02:00
Rémi Bernon 2fc491c389 dinput: Increase device buffer size to 1024.
The buffer size was previously limited to 20 in:

  8d05256172

Testing shows that it is somewhere around 1024 on Windows, and using a
smaller buffer causes some input data to be lost with high polling rate
mouses. It can be spotted in Wolfenstein II: New Colossus menus.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 50440e28bb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 16:08:04 +02:00
Roman Pišl afba948ba9 shell32: Avoid crash on WM_WINDOWPOSCHANGING in BrsFolderDlgProc.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48510
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a102671720)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 16:06:48 +02:00
Olivier F. R. Dierick 30453bc1b1 winecfg: Add Downloads and Templates to shell folders UI interface.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48484
Signed-off-by: Olivier F. R. Dierick <o.dierick@piezo-forte.be>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7216da8851)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 16:05:42 +02:00
Paul Gofman ca227f4770 ntdll: Report rdtsc processor feature if supported.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48386
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fc8e9bac5f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 16:03:58 +02:00
Paul Gofman 1ac99798f4 ntdll: Fill NumberOfPhysicalPages field in user shared data area.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48387
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9689d07740)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 16:02:49 +02:00
Nikolay Sivov 8ba69d9a02 user32: Improve window state handling in SetScrollInfo().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42038
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 92d336263c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-03 00:10:41 +02:00
Nikolay Sivov 5d489c26e4 dwrite: Add partial implementation for IDWriteFontFaceReference1::CreateFontFace().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6ee109c5aa)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 15:38:08 +02:00
Piotr Caban 81cca6bb78 msvcp90: Don't pass NULL as reference in runtime_error and logic_error constructors.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48561
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit daff3be7d2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 15:32:28 +02:00
Vijay Kiran Kamuju 797c80adff mscms: Add stub for WcsGetDefaultRenderingIntent.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48541
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a0e4dbcfd5)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 15:22:55 +02:00
Vijay Kiran Kamuju 4227dcb721 mscms: Add stub for WcsGetDefaultColorProfileSize.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48541
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 87e14f6102)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 15:22:40 +02:00
Vijay Kiran Kamuju 4b7e8339b2 include: Add missing defines to icm.h.
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b4db9884c3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 15:22:14 +02:00
Dirk Niggemann c7befdbcc7 krnl386.exe: Make CallProcEx32W16 clear CPEX_DEST_CDECL flag before looping over arguments.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48480
Signed-off-by: Dirk Niggemann <dirk.niggemann@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c57483ba4d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 15:14:24 +02:00
Zebediah Figura 09e9cf281c d3d9: Return a stub interface from Direct3DShaderValidatorCreate9().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46735
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2a4a8a5cf3)
Conflicts:
	dlls/d3d9/tests/device.c
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 15:01:44 +02:00
Alistair Leslie-Hughes c8044aef1f d3dx9: Implement D3DXCreateKeyframedAnimationSet.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45481
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0854a7eab7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:53:38 +02:00
Michael Müller b7958fb0a8 setupapi: Implement SP_COPY_IN_USE_NEEDS_REBOOT.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36059
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 87b2af73ba)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:52:18 +02:00
Piotr Caban 446daec1f5 msvcrt: Don't duplicate _wsearchenv_s code in _wsearchenv.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1b5a551324)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:49:19 +02:00
Piotr Caban 99c683af96 msvcrt: Add support for quoted paths in _wsearchenv_s.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f05549b7f7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:49:04 +02:00
Piotr Caban ea66b05c2b msvcrt: Don't duplicate _searchenv_s code in _searchenv.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 98c554ac06)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:48:49 +02:00
Piotr Caban 1cd091e6c1 msvcrt: Add support for quoted paths in _searchenv_s.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2e7ad72a8d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:48:33 +02:00
Piotr Caban bfd41ed7a9 msvcrt: Add support for quoted paths in _searchenv.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1d0cca465a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:47:30 +02:00
Nikolay Sivov 51c7d18007 ucrtbase: Add _query_new_handler() and _query_new_mode().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5b9323400d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:40:18 +02:00
Dmitry Timoshkov fb1f78d982 gdiplus: Reimplement GdipCreateBitmapFromGdiDib by using GdipCreateBitmapFromHBITMAP.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Vincent Povirk <vincent@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 506f3bf53d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:37:05 +02:00
Alexandre Julliard d2582c1d66 rundll32: Add wrapper to call entry point on i386.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48018
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 092d76b911)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:22:18 +02:00
Zebediah Figura 84fb913dd1 kernelbase: Implement ReOpenFile().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47668
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c7019a8887)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:19:52 +02:00
Zebediah Figura 5b2a6414ae widl: Output a registry script for all interfaces written into the typelib.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46005
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 56995dd322)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:16:18 +02:00
Giovanni Mascellani 1a985ae8d6 d2d1: Implement rounded rectangle drawing.
Currently rounded parts are approximated with quadratic Bézier curves.

Signed-off-by: Giovanni Mascellani <gio@debian.org>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f04bcb2d1b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-05-02 14:04:06 +02:00
Dmitry Timoshkov a5d8012e3d schedsvc/tests: Fix compilation with recent gcc/clang versions.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1d78579860)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Gerald Pfeifer 80df6fed6a msi: Properly declare variables in msi/tests/utils.h as extern.
Omitting the extern storage qualifier when declaring a global variable in
a header file is mistake. If that header is included by several files it
results in multiple definitions of the same variable (unless -fcommon is
specified or assumed, the latter being the case for GCC 9.x and earlier).

This fixes building with GCC 10.

Signed-off-by: Gerald Pfeifer <gerald@pfeifer.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ea032bb7f8)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth a01ae837f8 sane.ds: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c13d58780f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth 0c934a8474 gphoto2.ds: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 453980e130)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth 8405a5ebba webservices: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit bc51c5d589)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth d03186481f msi: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit cc7f698b82)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth 0503b5835b twain_32: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4a91eb3626)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth d42cb277d0 xinput: Global variable compatibility update for gcc 10.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 44e69405ad)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth 5f11f35ad0 wbemprox: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit da21c30516)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth df434090e3 winebus: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 388348ddbf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth b80892d1f0 secur32: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 93888fbb3e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth d36e0fa240 mshtml: Global variable compatibility update for gcc 10.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e402fdf364)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth e1e1c7ed4c dsound: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fba65a1537)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Michael Cronenworth 94b6a19772 crypt32: Global variable compatibility update for gcc 10.
Signed-off-by: Michael Cronenworth <mike@cchtml.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5740b735cd)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
Gerald Pfeifer 483e26259b winedump: Add a default case to numeric_leaf().
This addresses two warnings issues by GCC 10 (currently in development
stage 4, so this is unlikely to change):

msc.c:687:9: warning: 'value' may be used uninitialized in this function
msc.c:301:13: warning: 'value' may be used uninitialized in this function

Signed-off-by: Gerald Pfeifer <gerald@pfeifer.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7299735fdf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2020-04-30 22:44:04 +02:00
164 changed files with 20678 additions and 16594 deletions

628
ANNOUNCE
View File

@ -1,25 +1,14 @@
The Wine team is proud to announce that the stable release Wine 5.0
is now available.
The Wine maintenance release 5.0.1 is now available.
This release represents a year of development effort and over 7,400
individual changes. It contains a large number of improvements that
are listed in the release notes below. The main highlights are:
- Builtin modules in PE format.
- Multi-monitor support.
- XAudio2 reimplementation.
- Vulkan 1.1 support.
This release is dedicated to the memory of Józef Kucia, who passed
away in August 2019 at the young age of 30. Józef was a major
contributor to Wine's Direct3D implementation, and the lead developer
of the vkd3d project. His skills and his kindness are sorely missed by
all of us.
What's new in this release (see below for details):
- Fix compilation with gcc 10
- Add some timezones
- Various bug fixes
The source is available from the following locations:
https://dl.winehq.org/wine/source/5.0/wine-5.0.tar.xz
http://mirrors.ibiblio.org/wine/source/5.0/wine-5.0.tar.xz
https://dl.winehq.org/wine/source/5.0/wine-5.0.1.tar.xz
http://mirrors.ibiblio.org/wine/source/5.0/wine-5.0.1.tar.xz
Binary packages for various distributions will be available from:
@ -35,393 +24,220 @@ AUTHORS in the distribution for the complete list.
----------------------------------------------------------------
What's new in Wine 5.0
======================
*** PE modules
- Most modules are built in PE format (Portable Executable, the
Windows binary format) instead of ELF when the MinGW compiler is
available. This helps various copy protection schemes that check
that the on-disk and in-memory contents of system modules are
identical.
- The actual PE binaries are copied into the Wine prefix instead of
the fake DLL files. This makes the prefix look more like a real
Windows installation, at the cost of some extra disk space.
- Modules that have been converted to PE can use standard wide-char C
functions, as well as wide-char character constants like L"abc".
This makes the code easier to read.
- Not all modules have been converted to PE yet; this is an ongoing
process that will continue during the Wine 5.x development series.
- The Wine C runtime is updated to support linking to MinGW-compiled
binaries; it is used by default instead of the MinGW runtime when
building DLLs.
*** Graphics
- Multiple display adapters and monitors are properly supported,
including dynamic configuration changes.
- The Vulkan driver supports up to version 1.1.126 of the Vulkan spec.
- The WindowsCodecs library is able to convert more bitmap formats,
including palette-indexed formats.
*** Direct3D
- Fullscreen Direct3D applications inhibit the screensaver.
- DXGI swapchain presents inform the application when the
corresponding window is minimized. This typically allows
applications to reduce CPU usage while minimized, and is in some
cases required to allow the application window to be restored again.
- Switching between fullscreen and windowed modes using the standard
Alt+Enter combination is implemented for DXGI applications.
- The following features are implemented for Direct3D 12 applications:
- Switching between fullscreen and windowed.
- Changing display modes.
- Scaled presents.
- Swap intervals.
These features were previously already implemented for earlier
versions of the Direct3D API.
- The handling of various edge cases is improved. Among others:
- Out of range reference values for the alpha and stencil tests.
- Sampling 2D resources with 3D samplers and vice versa.
- Drawing with mapped textures and buffers.
- Usage of invalid DirectDraw clipper objects.
- Creating Direct3D devices on invalid Windows, like the desktop
window.
- Viewports with a minimum Z larger than or equal to the maximum Z.
- Resources bound through both shader-resource views and
render-target or depth-stencil views at the same time.
- Blits between formats with and without alpha components.
Since well-behaved applications don't rely on these edge cases, they
typically only affect one or two applications each. There are
nevertheless quite a number of them.
- Dirty texture regions are tracked more accurately for Direct3D 8 and 9
texture uploads.
- Uploads of S3TC-compressed 3D textures require less address space.
Since 3D textures can be potentially large, and address space
exhaustion is a concern for 32-bit applications, S3TC-compressed 3D
textures are uploaded per-slice, instead of in a single upload.
- The ID3D11Multithread interface is implemented.
- Various lighting calculation fixes and improvements for older
DirectDraw applications have been made.
- Limited support for blits across swapchains is implemented.
- More shader reflection APIs are implemented.
- The wined3d CPU blitter can handle compressed source resources.
Support for compressed destination resources was already implemented
in a previous release.
- The Direct3D graphics card database recognizes more graphics cards.
- New HKEY_CURRENT_USER\Software\Wine\Direct3D registry keys:
- "shader_backend" (REG_SZ)
The shader backend to use. Possible values are "glsl" (default)
for GLSL, "arb" for ARB vertex/fragment programs and "none" to
disable shader support.
- "strict_shader_math" (REG_DWORD)
Enable (0x1) or disable (0x0, default) stricter translation of
Direct3D shaders, potentially at a performance cost. This
currently only makes a difference with the default GLSL shader
backend in combination with the proprietary NVIDIA drivers.
- Deprecated HKEY_CURRENT_USER\Software\Wine\Direct3D registry key:
- "UseGLSL"
This has been superseded by the "shader_backend" setting above.
*** D3DX
- Support for compressing textures using S3TC-compression is
implemented.
- Various operations, like e.g. texture fills, on unmappable surfaces
are implemented more correctly. Previously their implementation
relied on the underlying Direct3D implementation not enforcing
mapping restrictions.
- Various improvements and fixes have been made to the effect
framework.
*** Kernel
- Most of the functions that used to be in Kernel32 are moved to
KernelBase, to follow the architecture of recent Windows versions.
- Libraries of the wrong 32/64-bitness are ignored when found in the
search path, to enable loading the correct one if it's found further
in the path.
- Kernel objects are better emulated for device drivers that expect to
manipulate objects from the kernel side.
- The kernel-level synchronization objects like spin locks, fast
mutexes, remove locks, and resource variables are implemented.
- The system battery state is properly reported to applications.
*** User interface
- Minimized windows are displayed using their title bar instead of the
old Windows 3.1-style icons.
- The new button styles Split Buttons and Command Links are
implemented.
- The Edit control sets margins correctly also for CJK fonts.
*** Desktop integration
- Symbolic links to the corresponding Unix directories are created for
the 'Downloads' and 'Templates' folders.
*** Input devices
- Plug & Play device drivers can be installed and loaded on startup.
- Game controllers are better supported, including proper support for
hat switch, wheel, gas and brake controls.
- The old joystick API of Linux versions earlier than 2.2 is no longer
supported.
*** .NET
- The Mono engine is updated to version 4.9.4, including parts of the
Windows Presentation Foundation (WPF) framework.
- The Gecko and Mono add-ons support shared installation, where the
files are used directly from a global location under /usr/share/wine
instead of being copied into every new prefix.
*** Internet and networking
- The Gecko engine is refreshed to support recent toolchains.
- A number of new HTML APIs are implemented.
- MSHTML supports some SVG elements.
- Error object and exception propagation are supported in VBScript.
- A number of VBScript builtin functions are implemented.
- JScript EcmaScript compliant mode is extended to support more
features.
- JScript and VBScript script objects expose type info interfaces.
- The HTTP proxy configuration can be retrieved through DHCP.
- Passport HTTP redirects are supported.
- The HTTP service and corresponding client-side library (HTTPAPI) are
partially implemented.
*** Cryptography
- ECC (elliptic-curve) keys are supported when using GnuTLS.
- Importing keys and certificates from PFX blobs is implemented.
- The PBKDF2 key derivation algorithm is supported.
*** Text and fonts
- OpenType positioning features are supported in DirectWrite, and
enabled for Latin script by default, including kerning.
- Font data access is made safer by validating the various data tables
before using them.
- DirectWrite interfaces are updated to a recent SDK, implementing
some of the latest API additions.
*** Audio / Video
- The XAudio2 libraries are reimplemented to use the external FAudio
library, for better compatibility.
- The Media Foundation libraries are fleshed out, including:
- Support for builtin and user async work queues.
- Ability to submit periodic callbacks, waiting, scheduled, and
regular work items, with support for item priority.
- Support for media event queues.
- Various core API to handle media type objects, stream and
presentation descriptors, object attributes, byte stream objects,
samples and buffers.
- Initial Source Resolver implementation.
- Initial implementation of Source Reader API.
- Implementation for Sample Grabber object.
- Core support for building topology objects.
- Builtin presentation clock implementation, started implementing
Media Session functionality.
- The video capture filter has been ported to use v4l2 instead of the
deprecated v4l1 API, allowing the use of some cameras which do not
support v4l1.
- Support for YUV to RGB translation and reading from v4l2 devices
using mmap() has been removed; we now depend on libv4l2 for both of
these things.
- The builtin AVI, MPEG-I, and WAVE decoders have been removed; we now
depend on GStreamer or the Mac QuickTime Toolkit to decode such
media files.
- Some more VMR7 configuration APIs are implemented.
- The sound drivers support per-channel volume adjustments.
*** Internationalization
- Unicode character tables are based on version 12.1.0 of the Unicode
Standard.
- Unicode normalization is implemented.
- The geographic region id is automatically set in the registry based
on the current locale. It can be modified if necessary under
HKEY_CURRENT_USER\Control Panel\International\Geo.
- The Sinhalese and Asturian locales are supported.
- Codepage 28601 (Latin/Thai) is supported.
*** RPC/COM
- The typelib marshaller supports complex structs and arrays.
- There is an initial implementation of the Windows Script runtime
library.
- There is an initial implementation of the Microsoft ActiveX Data
Objects (ADO) library.
*** Installers
- Microsoft Installer (MSI) Patch Files are supported.
- The WUSA tool (Windows Update Standalone Installer) supports
installing .MSU update files.
*** ARM platforms
- Exception unwinding is implemented for ARM64, using the libunwind
library.
- OLE stubless proxies are supported on ARM64.
*** Development tools / Winelib
- The Visual Studio remote debugger can be used to debug applications
running under Wine.
- The Debug Engine library (DBGENG) is partially implemented.
- Binaries built for a Windows target no longer depend on the libwine
library, to enable them to run on Windows without any extra
dependencies. The libwine library is no longer built for Windows at
all.
- The Resource Compiler and IDL Compiler support a '--sysroot' option
to allow locating header files in cross-compile environments.
- Winegcc supports the options '--target', '--wine-objdir',
'--winebuild' and '-fuse-ld' that make it easier to use as a
cross-compiler, or with custom toolchains.
- The wine/unicode.h header is no longer available to applications,
since the functions will ultimately be removed and replaced by the
standard C runtime wide character functions.
*** Build infrastructure
- Test binaries are built in PE format if MinGW is available, so the
same test binary can run on both Wine and Windows. The 'crosstest'
make target is no longer needed or supported.
- The 'fastcall' calling convention is supported in spec files. It
uses the correct name mangling for Windows builds.
- A '-import' entry point flag is supported in spec files, to mark
functions that need a hotpatch code prefix to be generated for their
import thunks.
- Winebuild supports a '--builtin' option to add a special signature
to PE binaries to mark them as Wine builtins.
*** Builtin applications
- The CHCP tool is implemented. It allows setting the console codepage.
- The MSIDB tool is implemented. It allows manipulating MSI databases.
*** Performance improvements
- The various time functions use higher performance system clocks if
available, to reduce the overhead in the rendering loop of many
games.
- File lookups take advantage of the ext4 filesystem case folding
support if it's enabled on the directory being searched.
- No-data style listboxes (LBS_NODATA) have better performance for
large numbers of items.
- Slim Reader/Writer locks, keyed events, and condition variables use
futexes on Linux to avoid wineserver round trips.
*** New external dependencies
- The MinGW-w64 cross-compiler is used to build modules in PE format.
- The FAudio library is used to implement XAudio2.
- The Inotify library is used for file change notifications on BSD
platforms.
- The Unwind library is used for exception handling on ARM64.
- The Video4Linux version 2 library is used instead of version 1.
Bugs fixed in 5.0.1 (total 37):
36059 Multiple Steam games fail to install DirectX runtime prerequisite, resulting in repeated install attempt on startup ('xinput1_3.dll' locked by client)
42038 Cannot scroll documents being compared in winmerge (Followup to bug 20695)
42585 Final Fantasy V Corrupt Fonts
45049 Multiple programs need d2d1 CreateRoundedRectangleGeometry (playchessV7, Paint.Net 4.*)
45481 Spintires: MudRunner crashes at launch
46005 Multiple games and applications fail due to missing interface proxy information in registry (oleautomation/dual interfaces referenced in coclass section inside of library block)
46735 Multiple applications need Direct3DShaderValidatorCreate9() implementation (The Sims 2 demo, Armed Assault)
47288 Gaea 1.0.19 (.NET 4.7 WPF app) diagnostic tool 'Watson.exe' crashes due to 'kernel32.SetConsoleScreenBufferInfoEx' stub
47668 Logos 8 (.NET/WPF 4.7.2 application) fails to download resources (needs ReOpenFile implementation)
48018 QuickTime 7.0.x installer fails, 'rundll32.exe "C:\Program Files (x86)\QuickTime\QTSystem\QTJava.dll,QTPostInstallProc"' crashes due to invalid cdecl dll entry
48338 DIB images with bpp <= 8 get wrong palette when converted to GpBitmap
48371 Home Designer Suite 21.3.1.1x64 reports "Error #272000009 A serious error occurred (SEH)."
48386 Some CPU features are not reported for Intel CPU (Detroit: Become Human is affected)
48387 User shared data area should have NumberOfPhysicalPages field filled in (used by Detroit: Become Human)
48480 dlls/krnl386.exe16 - thunk.c argument logic incorrect for CallProcEx32W16
48484 winecfg doesn't allow disabling Desktop Integration for Downloads
48491 _searchenv & co do not understand quoted directories
48510 Lotus Organizer 97 crashes when selecting a Backup folder using 'Browse' button
48549 Arma Cold War Assault: Cursor stuck at low fps since Wine 5.0-rc6
48557 Multiple installers crash (Hot Wired, Croc installer) : Setup is unable to initialize the language dialogbox: Error 106
48561 Cadence Allegro Professional 16.6 crashes at startup
48569 Infinite drag & drop loop crashes WinSCP
48571 Firefox 72.0.* crashes on every tab (unless dwrite is disabled)
48577 DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY and other enums are the wrong size
48580 Discord connecting to voice needs unimplemented function qwave.dll.QOSAddSocketToFlow
48594 AnyDesk crashes directly on startup (low WORD of instance handle must be ignored when looking up window classes)
48635 Asuka 120% Return BURNING Fest: Crashes after character selection.
48639 Shrew Soft VPN client needs setupapi.dll.SetupDiGetSelectedDriverA()
48646 QQMusicAgent crashes when started after installation
48648 Gothic II Night of the Raven:unhandled exception in Wine 5.2
48664 kernel32:process - Intermittent test_Toolhelp() failure
48669 iphlpapi.NotifyUnicastIpAddressChange() should call the callback initially if requested (required for Far Cry 5 online mode)
48694 The Bat! (64bit) crashes right after start
48706 Wineconsole freezes when restoring from minimized to maximized window
48723 Torchlight - Loading times are excessively long
48735 Wine builtin services.exe process_send_command: OVERLAPPED struct for control pipe has uninitialized Offset and OffsetHigh fields
48846 msvcr90/tests/msvcr90.c: error: variadic functions must use the base AAPCS variant
----------------------------------------------------------------
Changes since 5.0:
Aaro Altonen (3):
kernel32/tests: Add tests for SetConsoleScreenBufferInfoEx().
kernelbase: Implement SetConsoleScreenBufferInfoEx().
urlmon: Add URLOpenPullStreamW() stub.
Akihiro Sagawa (3):
dsound/tests: Add a test whether the buffer is a valid global memory.
dsound: Make GlobalHandle() for the sound buffer failed.
po: Update Japanese translation.
Alexandre Julliard (2):
rundll32: Add wrapper to call entry point on i386.
ver: Use the 16-bit resource function in GetFileVersionInfo16().
Alistair Leslie-Hughes (3):
d3dx9: Implement D3DXCreateKeyframedAnimationSet.
dmstyle: IDirectMusicStyle8 GetDefaultBand return S_FALSE.
qwave: Add QOSAddSocketToFlow stub.
Aurimas Fišeras (3):
po: Update Lithuanian translation.
po: Update Lithuanian translation.
po: Update Lithuanian translation.
Brendan Shanks (4):
include: Fix size of DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY enum.
include: Fix size of tomConstants enum.
include: Fix size of RecordCreateOptionsEnum.
wined3d: Add GPU information for NVIDIA GeForce GTX 1060 3GB.
Charles Davis (1):
msvcrt: Correct return value of ___mb_cur_max_l_func().
Damjan Jovanovic (1):
gdiplus: In CompositingModeSourceCopy, fully transparent pixels are drawn black.
Daniel Lehman (5):
tzres: Add Haiti Time Zone.
tzres: Add Aleutian Time Zone.
loader: Add Chatham Islands Standard Time Zone.
loader: Add Bougainville Standard Time Zone.
loader: Add Marquesas Standard Time Zone.
Dirk Niggemann (1):
krnl386.exe: Make CallProcEx32W16 clear CPEX_DEST_CDECL flag before looping over arguments.
Dmitry Timoshkov (4):
schedsvc/tests: Fix compilation with recent gcc/clang versions.
gdiplus: Reimplement GdipCreateBitmapFromGdiDib by using GdipCreateBitmapFromHBITMAP.
user32/tests: Add some tests for classes with non-zero low word instance.
server: Ignore low word of a class instance when looking up for a window class.
François Gouget (1):
kernel32/tests: Fix test_Toolhelp()'s nested process lookup.
Gerald Pfeifer (2):
winedump: Add a default case to numeric_leaf().
msi: Properly declare variables in msi/tests/utils.h as extern.
Gijs Vermeulen (1):
kernelbase: Set req->mask in SetConsoleScreenBufferInfoEx.
Giovanni Mascellani (1):
d2d1: Implement rounded rectangle drawing.
Hans Leidekker (1):
wbemprox: Implement Win32_DesktopMonitor.Name.
Henri Verbeet (1):
wined3d: Properly validate the stage index in wined3d_stateblock_set_texture_stage_state() (Coverity).
Jacek Caban (1):
rpcrt4: Use MustFree for all non-base types in get_param_pointer_info.
Jefferson Carpenter (1):
services: Initialize OVERLAPPED Offset and OffsetHigh.
Kevin Puetz (1):
rpcrt4: Fix ITypeInfo leak in get_iface_info.
Lauri Kenttä (2):
po: Update Finnish translation.
po: Update Finnish translation.
Lukáš Horáček (1):
wined3d: Add GTX 1660 SUPER as a card.
Matteo Bruni (1):
maintainers: Drop Józef Kucia.
Michael Cronenworth (12):
crypt32: Global variable compatibility update for gcc 10.
dsound: Global variable compatibility update for gcc 10.
mshtml: Global variable compatibility update for gcc 10.
secur32: Global variable compatibility update for gcc 10.
winebus: Global variable compatibility update for gcc 10.
wbemprox: Global variable compatibility update for gcc 10.
xinput: Global variable compatibility update for gcc 10.
twain_32: Global variable compatibility update for gcc 10.
msi: Global variable compatibility update for gcc 10.
webservices: Global variable compatibility update for gcc 10.
gphoto2.ds: Global variable compatibility update for gcc 10.
sane.ds: Global variable compatibility update for gcc 10.
Michael Müller (1):
setupapi: Implement SP_COPY_IN_USE_NEEDS_REBOOT.
Michael Stefaniuc (1):
tools: Get the ANNOUNCE bug list from the stable-notes git notes.
Mingcong Bai (1):
po: Update Simplified Chinese translation.
Nikolay Sivov (5):
ucrtbase: Add _query_new_handler() and _query_new_mode().
dwrite: Add partial implementation for IDWriteFontFaceReference1::CreateFontFace().
user32: Improve window state handling in SetScrollInfo().
ole32: Fix a leak when creating pointer moniker through activation.
ole32: Fix a leak when creating antimoniker through activation.
Olivier F. R. Dierick (1):
winecfg: Add Downloads and Templates to shell folders UI interface.
Paul Gofman (6):
ntdll: Fill NumberOfPhysicalPages field in user shared data area.
ntdll: Report rdtsc processor feature if supported.
iphlpapi: Support InitialNotification flag in NotifyUnicastIpAddressChange().
ntdll: Zero init reg_tzi in find_reg_tz_info().
include: Add Vista+ PEB_LDR_DATA structure fields.
wined3d: Support sRGB reads for WINED3DFMT_B5G6R5_UNORM.
Piotr Caban (11):
msvcrt: Add support for quoted paths in _searchenv.
msvcrt: Add support for quoted paths in _searchenv_s.
msvcrt: Don't duplicate _searchenv_s code in _searchenv.
msvcrt: Add support for quoted paths in _wsearchenv_s.
msvcrt: Don't duplicate _wsearchenv_s code in _wsearchenv.
msvcp90: Don't pass NULL as reference in runtime_error and logic_error constructors.
msvcrt: Optimize _strnicmp_l implementation.
msvcr90/tests: Fix swscanf tests compilation on arm.
winemac: Fix leaks in macdrv_surface_destroy.
gdiplus: Fix gdi handles leak in GdipMeasureCharacterRanges.
gdiplus: Fix leak in SOFTWARE_GdipDrawDriverString.
Roman Pišl (3):
shell32: Avoid crash on WM_WINDOWPOSCHANGING in BrsFolderDlgProc.
ole32: Avoid calling QueryContinueDrag recursively.
wineconsole: Allow maximization.
Rémi Bernon (1):
dinput: Increase device buffer size to 1024.
Sven Baars (1):
wined3d: Avoid accessing freed memory in wined3d_view_gl_destroy() (Valgrind).
Vijay Kiran Kamuju (3):
include: Add missing defines to icm.h.
mscms: Add stub for WcsGetDefaultColorProfileSize.
mscms: Add stub for WcsGetDefaultRenderingIntent.
Zebediah Figura (5):
widl: Output a registry script for all interfaces written into the typelib.
kernelbase: Implement ReOpenFile().
d3d9: Return a stub interface from Direct3DShaderValidatorCreate9().
setupapi: Implement SetupDiGetSelectedDriver().
ddraw: Avoid leaking the primary stateblock.
Zhiyi Zhang (1):
wined3d: Add GPU information for NVIDIA GeForce GTX 1650 SUPER.
--
Alexandre Julliard
julliard@winehq.org
Michael Stefaniuc
mstefani@winehq.org

View File

@ -1,5 +1,6 @@
Wine is available thanks to the work of:
Aaro Altonen
Aaron Arvey
Aaron Barnes
Aaron Brazener
@ -399,6 +400,7 @@ Diego Nieto Cid
Diego Pettenò
Dietmar Kling
Dimitrie O. Paun
Dirk Niggemann
Dirk Thierbach
Divan Burger
Dmitrij Sinukov
@ -980,6 +982,7 @@ Luis Javier Merino
Luis Sahagun
Luiz Otavio L. Zorzella
Lu Jiashu
Lukáš Horáček
Lukáš Krejčí
Łukasz Wojniłowicz
Luke Benstead

View File

@ -64,7 +64,6 @@ F: dlls/d2d*/
Direct3D
M: Henri Verbeet <hverbeet@codeweavers.com>
P: Stefan Dösinger <stefan@codeweavers.com>
P: Józef Kucia <jkucia@codeweavers.com>
P: Matteo Bruni <mbruni@codeweavers.com>
F: dlls/d3d10*/
F: dlls/d3d11/
@ -80,7 +79,6 @@ Direct3D helper libraries
M: Matteo Bruni <mbruni@codeweavers.com>
P: Henri Verbeet <hverbeet@codeweavers.com>
P: Stefan Dösinger <stefan@codeweavers.com>
P: Józef Kucia <jkucia@codeweavers.com>
F: dlls/d3dcompiler*/
F: dlls/d3dx10*/
F: dlls/d3dx11*/

View File

@ -1 +1 @@
Wine version 5.0
Wine version 5.0.1

18
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for Wine 5.0.
# Generated by GNU Autoconf 2.69 for Wine 5.0.1.
#
# Report bugs to <wine-devel@winehq.org>.
#
@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Wine'
PACKAGE_TARNAME='wine'
PACKAGE_VERSION='5.0'
PACKAGE_STRING='Wine 5.0'
PACKAGE_VERSION='5.0.1'
PACKAGE_STRING='Wine 5.0.1'
PACKAGE_BUGREPORT='wine-devel@winehq.org'
PACKAGE_URL='https://www.winehq.org'
@ -2445,7 +2445,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures Wine 5.0 to adapt to many kinds of systems.
\`configure' configures Wine 5.0.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -2515,7 +2515,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of Wine 5.0:";;
short | recursive ) echo "Configuration of Wine 5.0.1:";;
esac
cat <<\_ACEOF
@ -2764,7 +2764,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
Wine configure 5.0
Wine configure 5.0.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -3448,7 +3448,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by Wine $as_me 5.0, which was
It was created by Wine $as_me 5.0.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -21783,7 +21783,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by Wine $as_me 5.0, which was
This file was extended by Wine $as_me 5.0.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -21854,7 +21854,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
Wine config.status 5.0
Wine config.status 5.0.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@ -16,8 +16,8 @@
@ cdecl _heapwalk(ptr) ucrtbase._heapwalk
@ cdecl _malloc_base(long) ucrtbase._malloc_base
@ cdecl _msize(ptr) ucrtbase._msize
@ stub _query_new_handler
@ stub _query_new_mode
@ cdecl _query_new_handler() ucrtbase._query_new_handler
@ cdecl _query_new_mode() ucrtbase._query_new_mode
@ cdecl _realloc_base(ptr long) ucrtbase._realloc_base
@ cdecl _recalloc(ptr long long) ucrtbase._recalloc
@ cdecl _set_new_mode(long) ucrtbase._set_new_mode

View File

@ -152,7 +152,7 @@ BOOL WINAPI CRYPT_AsnEncodePubKeyInfoNoNull(DWORD dwCertEncodingType,
*/
HCRYPTPROV WINAPI I_CryptGetDefaultCryptProv(ALG_ID);
HINSTANCE hInstance DECLSPEC_HIDDEN;
extern HINSTANCE hInstance DECLSPEC_HIDDEN;
void crypt_oid_init(void) DECLSPEC_HIDDEN;
void crypt_oid_free(void) DECLSPEC_HIDDEN;

View File

@ -440,6 +440,7 @@ struct d2d_geometry
size_t face_count;
struct d2d_bezier_vertex *bezier_vertices;
size_t bezier_vertices_size;
size_t bezier_vertex_count;
} fill;
@ -483,6 +484,10 @@ struct d2d_geometry
D2D1_RECT_F rect;
} rectangle;
struct
{
D2D1_ROUNDED_RECT rounded_rect;
} rounded_rectangle;
struct
{
ID2D1Geometry *src_geometry;
D2D_MATRIX_3X2_F transform;
@ -499,6 +504,8 @@ struct d2d_geometry
void d2d_path_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory) DECLSPEC_HIDDEN;
HRESULT d2d_rectangle_geometry_init(struct d2d_geometry *geometry,
ID2D1Factory *factory, const D2D1_RECT_F *rect) DECLSPEC_HIDDEN;
HRESULT d2d_rounded_rectangle_geometry_init(struct d2d_geometry *geometry,
ID2D1Factory *factory, const D2D1_ROUNDED_RECT *rounded_rect) DECLSPEC_HIDDEN;
void d2d_transformed_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory,
ID2D1Geometry *src_geometry, const D2D_MATRIX_3X2_F *transform) DECLSPEC_HIDDEN;
HRESULT d2d_geometry_group_init(struct d2d_geometry *geometry, ID2D1Factory *factory,
@ -616,8 +623,17 @@ static inline const char *debug_d2d_point_2f(const D2D1_POINT_2F *point)
static inline const char *debug_d2d_rect_f(const D2D1_RECT_F *rect)
{
if (!rect) return "(null)";
return wine_dbg_sprintf("(%.8e,%.8e)-(%.8e,%.8e)", rect->left, rect->top, rect->right, rect->bottom );
if (!rect)
return "(null)";
return wine_dbg_sprintf("(%.8e, %.8e)-(%.8e, %.8e)", rect->left, rect->top, rect->right, rect->bottom);
}
static inline const char *debug_d2d_rounded_rect(const D2D1_ROUNDED_RECT *rounded_rect)
{
if (!rounded_rect)
return "(null)";
return wine_dbg_sprintf("(%.8e, %.8e)-(%.8e, %.8e)[%.8e, %.8e]", rounded_rect->rect.left, rounded_rect->rect.top,
rounded_rect->rect.right, rounded_rect->rect.bottom, rounded_rect->radiusX, rounded_rect->radiusY);
}
#endif /* __WINE_D2D1_PRIVATE_H */

View File

@ -152,11 +152,27 @@ static HRESULT STDMETHODCALLTYPE d2d_factory_CreateRectangleGeometry(ID2D1Factor
}
static HRESULT STDMETHODCALLTYPE d2d_factory_CreateRoundedRectangleGeometry(ID2D1Factory2 *iface,
const D2D1_ROUNDED_RECT *rect, ID2D1RoundedRectangleGeometry **geometry)
const D2D1_ROUNDED_RECT *rounded_rect, ID2D1RoundedRectangleGeometry **geometry)
{
FIXME("iface %p, rect %p, geometry %p stub!\n", iface, rect, geometry);
struct d2d_geometry *object;
HRESULT hr;
return E_NOTIMPL;
TRACE("iface %p, rounded_rect %s, geometry %p.\n", iface, debug_d2d_rounded_rect(rounded_rect), geometry);
if (!(object = heap_alloc_zero(sizeof(*object))))
return E_OUTOFMEMORY;
if (FAILED(hr = d2d_rounded_rectangle_geometry_init(object, (ID2D1Factory *)iface, rounded_rect)))
{
WARN("Failed to initialize rounded rectangle geometry, hr %#x.\n", hr);
heap_free(object);
return hr;
}
TRACE("Created rounded rectangle geometry %p.\n", object);
*geometry = (ID2D1RoundedRectangleGeometry *)&object->ID2D1Geometry_iface;
return S_OK;
}
static HRESULT STDMETHODCALLTYPE d2d_factory_CreateEllipseGeometry(ID2D1Factory2 *iface,

View File

@ -2257,6 +2257,14 @@ static BOOL d2d_geometry_outline_add_bezier_segment(struct d2d_geometry *geometr
return TRUE;
}
static BOOL d2d_geometry_outline_add_arc_quadrant(struct d2d_geometry *geometry,
const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
{
FIXME("Approximating arc quadrant with Bezier curve.\n");
return d2d_geometry_outline_add_bezier_segment(geometry, p0, p1, p2);
}
static BOOL d2d_geometry_add_figure_outline(struct d2d_geometry *geometry,
struct d2d_figure *figure, D2D1_FIGURE_END figure_end)
{
@ -2329,6 +2337,26 @@ static BOOL d2d_geometry_add_figure_outline(struct d2d_geometry *geometry,
return TRUE;
}
static BOOL d2d_geometry_fill_add_arc_triangle(struct d2d_geometry *geometry,
const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
{
struct d2d_bezier_vertex *b;
FIXME("Approximating arc triangle with Bezier triangle.\n");
if (!d2d_array_reserve((void **)&geometry->fill.bezier_vertices, &geometry->fill.bezier_vertices_size,
geometry->fill.bezier_vertex_count + 3, sizeof(*geometry->fill.bezier_vertices)))
return FALSE;
b = &geometry->fill.bezier_vertices[geometry->fill.bezier_vertex_count];
d2d_bezier_vertex_set(&b[0], p0, 0.0f, 0.0f, -1.0f);
d2d_bezier_vertex_set(&b[1], p1, 0.5f, 0.0f, -1.0f);
d2d_bezier_vertex_set(&b[2], p2, 1.0f, 1.0f, -1.0f);
geometry->fill.bezier_vertex_count += 3;
return TRUE;
}
static void d2d_geometry_cleanup(struct d2d_geometry *geometry)
{
heap_free(geometry->outline.bezier_faces);
@ -3831,6 +3859,302 @@ fail:
return E_OUTOFMEMORY;
}
static inline struct d2d_geometry *impl_from_ID2D1RoundedRectangleGeometry(ID2D1RoundedRectangleGeometry *iface)
{
return CONTAINING_RECORD(iface, struct d2d_geometry, ID2D1Geometry_iface);
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_QueryInterface(ID2D1RoundedRectangleGeometry *iface,
REFIID iid, void **out)
{
TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
if (IsEqualGUID(iid, &IID_ID2D1RoundedRectangleGeometry)
|| IsEqualGUID(iid, &IID_ID2D1Geometry)
|| IsEqualGUID(iid, &IID_ID2D1Resource)
|| IsEqualGUID(iid, &IID_IUnknown))
{
ID2D1RoundedRectangleGeometry_AddRef(iface);
*out = iface;
return S_OK;
}
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
*out = NULL;
return E_NOINTERFACE;
}
static ULONG STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_AddRef(ID2D1RoundedRectangleGeometry *iface)
{
struct d2d_geometry *geometry = impl_from_ID2D1RoundedRectangleGeometry(iface);
ULONG refcount = InterlockedIncrement(&geometry->refcount);
TRACE("%p increasing refcount to %u.\n", iface, refcount);
return refcount;
}
static ULONG STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Release(ID2D1RoundedRectangleGeometry *iface)
{
struct d2d_geometry *geometry = impl_from_ID2D1RoundedRectangleGeometry(iface);
ULONG refcount = InterlockedDecrement(&geometry->refcount);
TRACE("%p decreasing refcount to %u.\n", iface, refcount);
if (!refcount)
{
d2d_geometry_cleanup(geometry);
heap_free(geometry);
}
return refcount;
}
static void STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetFactory(ID2D1RoundedRectangleGeometry *iface,
ID2D1Factory **factory)
{
struct d2d_geometry *geometry = impl_from_ID2D1RoundedRectangleGeometry(iface);
TRACE("iface %p, factory %p.\n", iface, factory);
ID2D1Factory_AddRef(*factory = geometry->factory);
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetBounds(ID2D1RoundedRectangleGeometry *iface,
const D2D1_MATRIX_3X2_F *transform, D2D1_RECT_F *bounds)
{
FIXME("iface %p, transform %p, bounds %p stub!\n", iface, transform, bounds);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetWidenedBounds(ID2D1RoundedRectangleGeometry *iface,
float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform,
float tolerance, D2D1_RECT_F *bounds)
{
FIXME("iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, bounds %p stub!\n",
iface, stroke_width, stroke_style, transform, tolerance, bounds);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_StrokeContainsPoint(
ID2D1RoundedRectangleGeometry *iface, D2D1_POINT_2F point, float stroke_width,
ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
{
FIXME("iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p stub!\n",
iface, debug_d2d_point_2f(&point), stroke_width, stroke_style, transform, tolerance, contains);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_FillContainsPoint(ID2D1RoundedRectangleGeometry *iface,
D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
{
FIXME("iface %p, point %s, transform %p, tolerance %.8e, contains %p stub!\n",
iface, debug_d2d_point_2f(&point), transform, tolerance, contains);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_CompareWithGeometry(
ID2D1RoundedRectangleGeometry *iface, ID2D1Geometry *geometry,
const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_GEOMETRY_RELATION *relation)
{
FIXME("iface %p, geometry %p, transform %p, tolerance %.8e, relation %p stub!\n",
iface, geometry, transform, tolerance, relation);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Simplify(ID2D1RoundedRectangleGeometry *iface,
D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, const D2D1_MATRIX_3X2_F *transform, float tolerance,
ID2D1SimplifiedGeometrySink *sink)
{
FIXME("iface %p, option %#x, transform %p, tolerance %.8e, sink %p stub!\n",
iface, option, transform, tolerance, sink);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Tessellate(ID2D1RoundedRectangleGeometry *iface,
const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1TessellationSink *sink)
{
FIXME("iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface, transform, tolerance, sink);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_CombineWithGeometry(
ID2D1RoundedRectangleGeometry *iface, ID2D1Geometry *geometry, D2D1_COMBINE_MODE combine_mode,
const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
{
FIXME("iface %p, geometry %p, combine_mode %#x, transform %p, tolerance %.8e, sink %p stub!\n",
iface, geometry, combine_mode, transform, tolerance, sink);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Outline(ID2D1RoundedRectangleGeometry *iface,
const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
{
FIXME("iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface, transform, tolerance, sink);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_ComputeArea(ID2D1RoundedRectangleGeometry *iface,
const D2D1_MATRIX_3X2_F *transform, float tolerance, float *area)
{
FIXME("iface %p, transform %p, tolerance %.8e, area %p stub!\n", iface, transform, tolerance, area);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_ComputeLength(ID2D1RoundedRectangleGeometry *iface,
const D2D1_MATRIX_3X2_F *transform, float tolerance, float *length)
{
FIXME("iface %p, transform %p, tolerance %.8e, length %p stub!\n", iface, transform, tolerance, length);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_ComputePointAtLength(
ID2D1RoundedRectangleGeometry *iface, float length, const D2D1_MATRIX_3X2_F *transform,
float tolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *tangent)
{
FIXME("iface %p, length %.8e, transform %p, tolerance %.8e, point %p, tangent %p stub!\n",
iface, length, transform, tolerance, point, tangent);
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Widen(ID2D1RoundedRectangleGeometry *iface,
float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform,
float tolerance, ID2D1SimplifiedGeometrySink *sink)
{
FIXME("iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, sink %p stub!\n",
iface, stroke_width, stroke_style, transform, tolerance, sink);
return E_NOTIMPL;
}
static void STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetRoundedRect(ID2D1RoundedRectangleGeometry *iface,
D2D1_ROUNDED_RECT *rounded_rect)
{
struct d2d_geometry *geometry = impl_from_ID2D1RoundedRectangleGeometry(iface);
TRACE("iface %p, rounded_rect %p.\n", iface, rounded_rect);
*rounded_rect = geometry->u.rounded_rectangle.rounded_rect;
}
static const struct ID2D1RoundedRectangleGeometryVtbl d2d_rounded_rectangle_geometry_vtbl =
{
d2d_rounded_rectangle_geometry_QueryInterface,
d2d_rounded_rectangle_geometry_AddRef,
d2d_rounded_rectangle_geometry_Release,
d2d_rounded_rectangle_geometry_GetFactory,
d2d_rounded_rectangle_geometry_GetBounds,
d2d_rounded_rectangle_geometry_GetWidenedBounds,
d2d_rounded_rectangle_geometry_StrokeContainsPoint,
d2d_rounded_rectangle_geometry_FillContainsPoint,
d2d_rounded_rectangle_geometry_CompareWithGeometry,
d2d_rounded_rectangle_geometry_Simplify,
d2d_rounded_rectangle_geometry_Tessellate,
d2d_rounded_rectangle_geometry_CombineWithGeometry,
d2d_rounded_rectangle_geometry_Outline,
d2d_rounded_rectangle_geometry_ComputeArea,
d2d_rounded_rectangle_geometry_ComputeLength,
d2d_rounded_rectangle_geometry_ComputePointAtLength,
d2d_rounded_rectangle_geometry_Widen,
d2d_rounded_rectangle_geometry_GetRoundedRect,
};
HRESULT d2d_rounded_rectangle_geometry_init(struct d2d_geometry *geometry,
ID2D1Factory *factory, const D2D1_ROUNDED_RECT *rounded_rect)
{
D2D1_POINT_2F *v, v1, v2, v3, v4;
struct d2d_face *f;
float l, r, t, b;
float rx, ry;
d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_rounded_rectangle_geometry_vtbl);
geometry->u.rounded_rectangle.rounded_rect = *rounded_rect;
if (!(geometry->fill.vertices = heap_alloc(8 * sizeof(*geometry->fill.vertices))))
goto fail;
if (!d2d_array_reserve((void **)&geometry->fill.faces,
&geometry->fill.faces_size, 6, sizeof(*geometry->fill.faces)))
goto fail;
l = min(rounded_rect->rect.left, rounded_rect->rect.right);
r = max(rounded_rect->rect.left, rounded_rect->rect.right);
t = min(rounded_rect->rect.top, rounded_rect->rect.bottom);
b = max(rounded_rect->rect.top, rounded_rect->rect.bottom);
rx = min(rounded_rect->radiusX, 0.5f * (r - l));
ry = min(rounded_rect->radiusY, 0.5f * (b - t));
d2d_point_set(&v1, r, t);
d2d_point_set(&v2, r, b);
d2d_point_set(&v3, l, b);
d2d_point_set(&v4, l, t);
v = geometry->fill.vertices;
d2d_point_set(&v[0], l + rx, t);
d2d_point_set(&v[1], r - rx, t);
d2d_point_set(&v[2], r, t + ry);
d2d_point_set(&v[3], r, b - ry);
d2d_point_set(&v[4], r - rx, b);
d2d_point_set(&v[5], l + rx, b);
d2d_point_set(&v[6], l, b - ry);
d2d_point_set(&v[7], l, t + ry);
geometry->fill.vertex_count = 8;
f = geometry->fill.faces;
d2d_face_set(&f[0], 0, 7, 6);
d2d_face_set(&f[1], 0, 6, 5);
d2d_face_set(&f[2], 0, 5, 4);
d2d_face_set(&f[3], 0, 4, 1);
d2d_face_set(&f[4], 1, 4, 3);
d2d_face_set(&f[5], 1, 3, 2);
geometry->fill.face_count = 6;
if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[1], &v1, &v[2]))
goto fail;
if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[3], &v2, &v[4]))
goto fail;
if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[5], &v3, &v[6]))
goto fail;
if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[7], &v4, &v[0]))
goto fail;
if (!d2d_geometry_outline_add_line_segment(geometry, &v[0], &v[1]))
goto fail;
if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[1], &v1, &v[2]))
goto fail;
if (!d2d_geometry_outline_add_line_segment(geometry, &v[2], &v[3]))
goto fail;
if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[3], &v2, &v[4]))
goto fail;
if (!d2d_geometry_outline_add_line_segment(geometry, &v[4], &v[5]))
goto fail;
if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[5], &v3, &v[6]))
goto fail;
if (!d2d_geometry_outline_add_line_segment(geometry, &v[6], &v[7]))
goto fail;
if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[7], &v4, &v[0]))
goto fail;
return S_OK;
fail:
d2d_geometry_cleanup(geometry);
return E_OUTOFMEMORY;
}
static inline struct d2d_geometry *impl_from_ID2D1TransformedGeometry(ID2D1TransformedGeometry *iface)
{
return CONTAINING_RECORD(iface, struct d2d_geometry, ID2D1Geometry_iface);
@ -4376,6 +4700,7 @@ struct d2d_geometry *unsafe_impl_from_ID2D1Geometry(ID2D1Geometry *iface)
return NULL;
assert(iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_path_geometry_vtbl
|| iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_rectangle_geometry_vtbl
|| iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_rounded_rectangle_geometry_vtbl
|| iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_transformed_geometry_vtbl
|| iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_geometry_group_vtbl);
return CONTAINING_RECORD(iface, struct d2d_geometry, ID2D1Geometry_iface);

View File

@ -3790,13 +3790,7 @@ static void test_rounded_rectangle_geometry(void)
set_rounded_rect(&rect, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
hr = ID2D1Factory_CreateRoundedRectangleGeometry(factory, &rect, &geometry);
todo_wine
ok(SUCCEEDED(hr), "Failed to create geometry, hr %#x.\n", hr);
if (FAILED(hr))
{
ID2D1Factory_Release(factory);
return;
}
ID2D1RoundedRectangleGeometry_GetRoundedRect(geometry, &rect2);
ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got unexpected rectangle {%.8e, %.8e, %.8e, %.8e, %.8e, %.8e}.\n",

View File

@ -75,18 +75,124 @@ HRESULT WINAPI DECLSPEC_HOTPATCH Direct3DCreate9Ex(UINT sdk_version, IDirect3D9E
return D3D_OK;
}
/*******************************************************************
* Direct3DShaderValidatorCreate9 (D3D9.@)
/* The callback is called on any error encountered during validation, including
* improper IDirect3DShaderValidator9 method calls.
* - "file" and "line" are passed through directly from Instruction(). "line"
* is provably 32-bit, as 64-bit values passed to Instruction() will be
* truncated.
* - "arg3" has been observed to be at least 0, 2, and 6. The integer size is
* not known.
* - "message_id" is a numeric error code. fxc.exe adds 5000 before printing
* it. The integer size is not known.
* - "context" is passed through directly from Begin().
*
* No documentation available for this function.
* SDK only says it is internal and shouldn't be used.
*/
void* WINAPI Direct3DShaderValidatorCreate9(void)
{
static int once;
* Improper calls to IDirect3DShaderValidator9 methods, or other errors not
* generated by specific Instruction() calls, yield NULL as the file, and
* either 0 or -1 as the line.
*
* The callback return type is not known, but programs (fxc.exe, The Sims 2)
* seem to consistently return 0.
*
* The interface and method names below are derived from the messages that
* native d3d9 prints on said improper method calls.
*
* Calls to Begin(), Instruction(), End() have been observed to return S_OK and
* E_FAIL. E_FAIL is not always returned if an error message is handed to the
* callback. */
if (!once++) FIXME("stub\n");
return NULL;
typedef HRESULT (WINAPI *shader_validator_cb)(const char *file, int line,
DWORD_PTR arg3, DWORD_PTR message_id, const char *message, void *context);
typedef struct IDirect3DShaderValidator9 IDirect3DShaderValidator9;
struct IDirect3DShaderValidator9Vtbl
{
HRESULT (WINAPI *QueryInterface)(IDirect3DShaderValidator9 *iface, REFIID iid, void **out);
ULONG (WINAPI *AddRef)(IDirect3DShaderValidator9 *iface);
ULONG (WINAPI *Release)(IDirect3DShaderValidator9 *iface);
HRESULT (WINAPI *Begin)(IDirect3DShaderValidator9 *iface,
shader_validator_cb callback, void *context, DWORD_PTR arg3);
HRESULT (WINAPI *Instruction)(IDirect3DShaderValidator9 *iface,
const char *file, int line, const DWORD *tokens, DWORD token_count);
HRESULT (WINAPI *End)(IDirect3DShaderValidator9 *iface);
};
struct IDirect3DShaderValidator9
{
const struct IDirect3DShaderValidator9Vtbl *vtbl;
};
static HRESULT WINAPI shader_validator_QueryInterface(IDirect3DShaderValidator9 *iface, REFIID iid, void **out)
{
TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
*out = NULL;
return E_NOINTERFACE;
}
static ULONG WINAPI shader_validator_AddRef(IDirect3DShaderValidator9 *iface)
{
TRACE("iface %p.\n", iface);
return 2;
}
static ULONG WINAPI shader_validator_Release(IDirect3DShaderValidator9 *iface)
{
TRACE("iface %p.\n", iface);
return 1;
}
/* The size and type of the third argument is not known. The Sims 2 passes 0;
* fxc.exe passes 1. */
static HRESULT WINAPI shader_validator_Begin(IDirect3DShaderValidator9 *iface,
shader_validator_cb callback, void *context, DWORD_PTR arg3)
{
FIXME("iface %p, callback %p, context %p, arg3 %#Ix, stub!\n", iface, callback, context, arg3);
return S_OK;
}
/* - "file" and "line" are passed directly through to the callback.
* - "tokens" comprises a single instruction; the caller must determine its
* length.
* - "token_count" is in DWORDs. */
static HRESULT WINAPI shader_validator_Instruction(IDirect3DShaderValidator9 *iface,
const char *file, int line, const DWORD *tokens, DWORD token_count)
{
FIXME("iface %p, file %s, line %u, tokens %p, token_count %u, stub!\n",
iface, debugstr_a(file), line, tokens, token_count);
return S_OK;
}
static HRESULT WINAPI shader_validator_End(IDirect3DShaderValidator9 *iface)
{
FIXME("iface %p, stub!\n", iface);
return S_OK;
}
static const struct IDirect3DShaderValidator9Vtbl shader_validator_vtbl =
{
shader_validator_QueryInterface,
shader_validator_AddRef,
shader_validator_Release,
shader_validator_Begin,
shader_validator_Instruction,
shader_validator_End,
};
static IDirect3DShaderValidator9 shader_validator = {&shader_validator_vtbl};
IDirect3DShaderValidator9 * WINAPI Direct3DShaderValidatorCreate9(void)
{
TRACE("Returning validator %p.\n", &shader_validator);
return &shader_validator;
}
/***********************************************************************

View File

@ -53,6 +53,8 @@ struct device_desc
static DEVMODEW registry_mode;
static void *(WINAPI *Direct3DShaderValidatorCreate9)(void);
static const DWORD simple_vs[] =
{
0xfffe0101, /* vs_1_1 */
@ -13405,8 +13407,69 @@ static void test_get_display_mode(void)
DestroyWindow(window);
}
typedef HRESULT (WINAPI *shader_validator_cb)(const char *file, int line,
DWORD_PTR arg3, DWORD_PTR message_id, const char *message, void *context);
typedef struct IDirect3DShaderValidator9 IDirect3DShaderValidator9;
struct IDirect3DShaderValidator9Vtbl
{
HRESULT (WINAPI *QueryInterface)(IDirect3DShaderValidator9 *iface, REFIID iid, void **out);
ULONG (WINAPI *AddRef)(IDirect3DShaderValidator9 *iface);
ULONG (WINAPI *Release)(IDirect3DShaderValidator9 *iface);
HRESULT (WINAPI *Begin)(IDirect3DShaderValidator9 *iface,
shader_validator_cb callback, void *context, DWORD_PTR arg3);
HRESULT (WINAPI *Instruction)(IDirect3DShaderValidator9 *iface,
const char *file, int line, const DWORD *tokens, DWORD token_count);
HRESULT (WINAPI *End)(IDirect3DShaderValidator9 *iface);
};
struct IDirect3DShaderValidator9
{
const struct IDirect3DShaderValidator9Vtbl *vtbl;
};
HRESULT WINAPI test_shader_validator_cb(const char *file, int line, DWORD_PTR arg3,
DWORD_PTR message_id, const char *message, void *context)
{
ok(0, "Unexpected call.\n");
return S_OK;
}
static void test_shader_validator(void)
{
IDirect3DShaderValidator9 *validator;
ULONG refcount;
HRESULT hr;
validator = Direct3DShaderValidatorCreate9();
hr = validator->vtbl->Begin(validator, test_shader_validator_cb, NULL, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->Instruction(validator, NULL, 0, &simple_vs[0], 1);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->Instruction(validator, NULL, 0, &simple_vs[1], 3);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->Instruction(validator, NULL, 0, &simple_vs[4], 4);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->Instruction(validator, NULL, 0, &simple_vs[8], 4);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->Instruction(validator, NULL, 0, &simple_vs[12], 4);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->Instruction(validator, NULL, 0, &simple_vs[16], 4);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->Instruction(validator, NULL, 0, &simple_vs[20], 1);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = validator->vtbl->End(validator);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
refcount = validator->vtbl->Release(validator);
todo_wine ok(!refcount, "Validator has %u references left.\n", refcount);
}
START_TEST(device)
{
HMODULE d3d9_handle = GetModuleHandleA("d3d9.dll");
WNDCLASSA wc = {0};
IDirect3D9 *d3d9;
DEVMODEW current_mode;
@ -13434,6 +13497,8 @@ START_TEST(device)
wc.lpszClassName = "d3d9_test_wc";
RegisterClassA(&wc);
Direct3DShaderValidatorCreate9 = (void *)GetProcAddress(d3d9_handle, "Direct3DShaderValidatorCreate9");
test_get_set_vertex_declaration();
test_get_declaration();
test_fvf_decl_conversion();
@ -13532,6 +13597,7 @@ START_TEST(device)
test_multiply_transform();
test_vertex_buffer_read_write();
test_get_display_mode();
test_shader_validator();
UnregisterClassA("d3d9_test_wc", GetModuleHandleA(NULL));
}

View File

@ -468,14 +468,427 @@ HRESULT WINAPI D3DXCreateAnimationController(UINT max_outputs, UINT max_sets,
return D3D_OK;
}
struct d3dx9_keyframed_animation_set
{
ID3DXKeyframedAnimationSet ID3DXKeyframedAnimationSet_iface;
LONG ref;
const char *name;
double ticks_per_second;
D3DXPLAYBACK_TYPE playback_type;
unsigned int animation_count;
unsigned int callback_key_count;
const D3DXKEY_CALLBACK *callback_keys;
};
static inline struct d3dx9_keyframed_animation_set *impl_from_ID3DXKeyframedAnimationSet(ID3DXKeyframedAnimationSet *iface)
{
return CONTAINING_RECORD(iface, struct d3dx9_keyframed_animation_set, ID3DXKeyframedAnimationSet_iface);
}
static HRESULT WINAPI d3dx9_keyframed_animation_QueryInterface(ID3DXKeyframedAnimationSet *iface,
REFIID riid, void **obj)
{
TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), obj);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_ID3DXAnimationSet)
|| IsEqualGUID(riid, &IID_ID3DXKeyframedAnimationSet))
{
iface->lpVtbl->AddRef(iface);
*obj = iface;
return D3D_OK;
}
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
*obj = NULL;
return E_NOINTERFACE;
}
static ULONG WINAPI d3dx9_keyframed_animation_AddRef(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
ULONG refcount = InterlockedIncrement(&set->ref);
TRACE("%p increasing refcount to %u.\n", set, refcount);
return refcount;
}
static ULONG WINAPI d3dx9_keyframed_animation_Release(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
ULONG refcount = InterlockedDecrement(&set->ref);
TRACE("%p decreasing refcount to %u.\n", set, refcount);
if (!refcount)
{
heap_free((char *)set->name);
heap_free(set);
}
return refcount;
}
static const char * WINAPI d3dx9_keyframed_animation_GetName(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
TRACE("set %p.\n", set);
return set->name;
}
static double WINAPI d3dx9_keyframed_animation_GetPeriod(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p stub.\n", set);
return 0.0;
}
static double WINAPI d3dx9_keyframed_animation_GetPeriodicPosition(ID3DXKeyframedAnimationSet *iface, double position)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, position %.16e stub.\n", set, position);
return 0.0;
}
static UINT WINAPI d3dx9_keyframed_animation_GetNumAnimations(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p stub.\n", set);
return 0;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetAnimationNameByIndex(ID3DXKeyframedAnimationSet *iface,
UINT index, const char **name)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, index %u, name %p stub.\n", set, index, name);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetAnimationIndexByName(ID3DXKeyframedAnimationSet *iface,
const char *name, UINT *index)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, name %s, index %p stub.\n", set, debugstr_a(name), index);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetSRT(ID3DXKeyframedAnimationSet *iface, double periodic_position,
UINT animation, D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, periodic_position %.16e, animation %u, scale %p, rotation %p, translation %p stub.\n",
set, periodic_position, animation, scale, rotation, translation);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetCallback(ID3DXKeyframedAnimationSet *iface, double position,
DWORD flags, double *callback_position, void **callback_data)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, position %.16e, flags %#x, callback_position %p, callback_data %p stub.\n",
set, position, flags, callback_position, callback_data);
return E_NOTIMPL;
}
static D3DXPLAYBACK_TYPE WINAPI d3dx9_keyframed_animation_GetPlaybackType(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
TRACE("set %p.\n", set);
return set->playback_type;
}
static double WINAPI d3dx9_keyframed_animation_GetSourceTicksPerSecond(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
TRACE("set %p.\n", set);
return set->ticks_per_second;
}
static UINT WINAPI d3dx9_keyframed_animation_GetNumScaleKeys(ID3DXKeyframedAnimationSet *iface, UINT keys)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, keys %u stub.\n", set, keys);
return 0;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetScaleKeys(ID3DXKeyframedAnimationSet *iface, UINT animation,
D3DXKEY_VECTOR3 *scale_keys)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, scale_keys %p stub.\n", set, animation, scale_keys);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetScaleKey(ID3DXKeyframedAnimationSet *iface, UINT animation,
UINT key, D3DXKEY_VECTOR3 *scale_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u, scale_key %p stub.\n", set, animation, key, scale_key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_SetScaleKey(ID3DXKeyframedAnimationSet *iface, UINT animation,
UINT key, D3DXKEY_VECTOR3 *scale_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u, scale_key %p stub.\n", set, animation, key, scale_key);
return E_NOTIMPL;
}
static UINT WINAPI d3dx9_keyframed_animation_GetNumRotationKeys(ID3DXKeyframedAnimationSet *iface, UINT animation)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u stub.\n", set, animation);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetRotationKeys(ID3DXKeyframedAnimationSet *iface,
UINT animation, D3DXKEY_QUATERNION *rotation_keys)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, rotation_keys %p stub.\n", set, animation, rotation_keys);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetRotationKey(ID3DXKeyframedAnimationSet *iface,
UINT animation, UINT key, D3DXKEY_QUATERNION *rotation_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u, rotation_key %p stub.\n", set, animation, key, rotation_key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_SetRotationKey(ID3DXKeyframedAnimationSet *iface,
UINT animation, UINT key, D3DXKEY_QUATERNION *rotation_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u, rotation_key %p stub.\n", set, animation, key, rotation_key);
return E_NOTIMPL;
}
static UINT WINAPI d3dx9_keyframed_animation_GetNumTranslationKeys(ID3DXKeyframedAnimationSet *iface, UINT animation)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u stub.\n", set, animation);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetTranslationKeys(ID3DXKeyframedAnimationSet *iface,
UINT animation, D3DXKEY_VECTOR3 *translation_keys)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, translation_keys %p stub.\n", set, animation, translation_keys);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetTranslationKey(ID3DXKeyframedAnimationSet *iface,
UINT animation, UINT key, D3DXKEY_VECTOR3 *translation_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u, translation_key %p stub.\n", set, animation, key, translation_key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_SetTranslationKey(ID3DXKeyframedAnimationSet *iface,
UINT animation, UINT key, D3DXKEY_VECTOR3 *translation_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u, translation_key %p stub.\n", set, animation, key, translation_key);
return E_NOTIMPL;
}
static UINT WINAPI d3dx9_keyframed_animation_GetNumCallbackKeys(ID3DXKeyframedAnimationSet *iface)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p stub.\n", set);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetCallbackKeys(ID3DXKeyframedAnimationSet *iface,
D3DXKEY_CALLBACK *callback_keys)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, callback_keys %p stub.\n", set, callback_keys);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_GetCallbackKey(ID3DXKeyframedAnimationSet *iface,
UINT key, D3DXKEY_CALLBACK *callback_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, key %u, callback_key %p stub.\n", set, key, callback_key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_SetCallbackKey(ID3DXKeyframedAnimationSet *iface,
UINT key, D3DXKEY_CALLBACK *callback_key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, key %u, callback_key %p stub.\n", set, key, callback_key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_UnregisterScaleKey(ID3DXKeyframedAnimationSet *iface,
UINT animation, UINT key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u stub.\n", set, animation, key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_UnregisterRotationKey(ID3DXKeyframedAnimationSet *iface,
UINT animation, UINT key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u stub.\n", set, animation, key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_UnregisterTranslationKey(ID3DXKeyframedAnimationSet *iface,
UINT animation, UINT key)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, animation %u, key %u stub.\n", set, animation, key);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_RegisterAnimationSRTKeys(ID3DXKeyframedAnimationSet *iface,
const char *name, UINT scale_keys_count, UINT rotation_keys_count, UINT translation_keys_count,
const D3DXKEY_VECTOR3 *scale_keys, const D3DXKEY_QUATERNION *rotation_keys,
const D3DXKEY_VECTOR3 *translation_keys, DWORD *animation_index)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, name %s, scale_keys_count %u, rotation_keys_count %u, translation_keys_count %u, "
"scale_keys %p, rotation_keys %p, translation_keys %p, animation_index %p stub.\n",
set, debugstr_a(name), scale_keys_count, rotation_keys_count, translation_keys_count,
scale_keys, rotation_keys, translation_keys, animation_index);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_Compress(ID3DXKeyframedAnimationSet *iface,
DWORD flags, float lossiness, D3DXFRAME *hierarchy, ID3DXBuffer **compressed_data)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, flags %#x, lossiness %.8e, hierarchy %p, compressed_data %p stub.\n",
set, flags, lossiness, hierarchy, compressed_data);
return E_NOTIMPL;
}
static HRESULT WINAPI d3dx9_keyframed_animation_UnregisterAnimation(ID3DXKeyframedAnimationSet *iface, UINT index)
{
struct d3dx9_keyframed_animation_set *set = impl_from_ID3DXKeyframedAnimationSet(iface);
FIXME("set %p, index %u stub.\n", set, index);
return E_NOTIMPL;
}
static const struct ID3DXKeyframedAnimationSetVtbl d3dx9_keyframed_animation_vtbl =
{
d3dx9_keyframed_animation_QueryInterface,
d3dx9_keyframed_animation_AddRef,
d3dx9_keyframed_animation_Release,
d3dx9_keyframed_animation_GetName,
d3dx9_keyframed_animation_GetPeriod,
d3dx9_keyframed_animation_GetPeriodicPosition,
d3dx9_keyframed_animation_GetNumAnimations,
d3dx9_keyframed_animation_GetAnimationNameByIndex,
d3dx9_keyframed_animation_GetAnimationIndexByName,
d3dx9_keyframed_animation_GetSRT,
d3dx9_keyframed_animation_GetCallback,
d3dx9_keyframed_animation_GetPlaybackType,
d3dx9_keyframed_animation_GetSourceTicksPerSecond,
d3dx9_keyframed_animation_GetNumScaleKeys,
d3dx9_keyframed_animation_GetScaleKeys,
d3dx9_keyframed_animation_GetScaleKey,
d3dx9_keyframed_animation_SetScaleKey,
d3dx9_keyframed_animation_GetNumRotationKeys,
d3dx9_keyframed_animation_GetRotationKeys,
d3dx9_keyframed_animation_GetRotationKey,
d3dx9_keyframed_animation_SetRotationKey,
d3dx9_keyframed_animation_GetNumTranslationKeys,
d3dx9_keyframed_animation_GetTranslationKeys,
d3dx9_keyframed_animation_GetTranslationKey,
d3dx9_keyframed_animation_SetTranslationKey,
d3dx9_keyframed_animation_GetNumCallbackKeys,
d3dx9_keyframed_animation_GetCallbackKeys,
d3dx9_keyframed_animation_GetCallbackKey,
d3dx9_keyframed_animation_SetCallbackKey,
d3dx9_keyframed_animation_UnregisterScaleKey,
d3dx9_keyframed_animation_UnregisterRotationKey,
d3dx9_keyframed_animation_UnregisterTranslationKey,
d3dx9_keyframed_animation_RegisterAnimationSRTKeys,
d3dx9_keyframed_animation_Compress,
d3dx9_keyframed_animation_UnregisterAnimation
};
HRESULT WINAPI D3DXCreateKeyframedAnimationSet(const char *name, double ticks_per_second,
D3DXPLAYBACK_TYPE playback_type, UINT animation_count, UINT callback_key_count,
const D3DXKEY_CALLBACK *callback_keys, ID3DXKeyframedAnimationSet **animation_set)
{
FIXME("name %s, ticks_per_second %.16e, playback_type %u, animation_count %u, "
"callback_key_count %u, callback_keys %p, animation_set %p stub.\n",
struct d3dx9_keyframed_animation_set *object;
char *string;
TRACE("name %s, ticks_per_second %.16e, playback_type %u, animation_count %u, "
"callback_key_count %u, callback_keys %p, animation_set %p.\n",
debugstr_a(name), ticks_per_second, playback_type, animation_count,
callback_key_count, callback_keys, animation_set);
return E_NOTIMPL;
if (!animation_count)
return D3DERR_INVALIDCALL;
if (!(object = heap_alloc(sizeof(*object))))
return E_OUTOFMEMORY;
object->ID3DXKeyframedAnimationSet_iface.lpVtbl = &d3dx9_keyframed_animation_vtbl;
object->ref = 1;
if (!(string = heap_alloc(strlen(name) + 1)))
{
heap_free(object);
return E_OUTOFMEMORY;
}
strcpy(string, name);
object->name = string;
object->ticks_per_second = ticks_per_second;
object->playback_type = playback_type;
object->animation_count = animation_count;
object->callback_key_count = callback_key_count;
object->callback_keys = callback_keys;
*animation_set = &object->ID3DXKeyframedAnimationSet_iface;
return D3D_OK;
}

View File

@ -11119,6 +11119,32 @@ static void D3DXCreateAnimationControllerTest(void)
animation->lpVtbl->Release(animation);
}
static void D3DXCreateKeyframedAnimationSetTest(void)
{
ID3DXKeyframedAnimationSet *set;
D3DXPLAYBACK_TYPE type;
unsigned int count;
const char *name;
HRESULT hr;
hr = D3DXCreateKeyframedAnimationSet("wine_bottle", 5.0, D3DXPLAY_LOOP, 0, 0, NULL, &set);
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);
hr = D3DXCreateKeyframedAnimationSet("wine_bottle", 5.0, D3DXPLAY_LOOP, 10, 0, NULL, &set);
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
name = set->lpVtbl->GetName(set);
ok(!strcmp(name, "wine_bottle"), "Got unexpected name %s.\n", debugstr_a(name));
type = set->lpVtbl->GetPlaybackType(set);
ok(type == D3DXPLAY_LOOP, "Got unexpected value %u.\n", type);
count = set->lpVtbl->GetNumAnimations(set);
ok(!count, "Got unexpected value %u.\n", count);
set->lpVtbl->Release(set);
}
static void test_D3DXFrameFind(void)
{
static char n1[] = "name1";
@ -11387,6 +11413,7 @@ START_TEST(mesh)
D3DXCreateTextTest();
D3DXCreateTorusTest();
D3DXCreateAnimationControllerTest();
D3DXCreateKeyframedAnimationSetTest();
test_get_decl_length();
test_get_decl_vertex_size();
test_fvf_decl_conversion();

View File

@ -245,6 +245,7 @@ static ULONG WINAPI d3d_device_inner_Release(IUnknown *iface)
wined3d_device_set_rendertarget_view(This->wined3d_device, 0, NULL, FALSE);
wined3d_stateblock_decref(This->state);
if (This->recording)
wined3d_stateblock_decref(This->recording);

View File

@ -1398,7 +1398,7 @@ HRESULT WINAPI IDirectInputDevice2WImpl_SetProperty(
EnterCriticalSection(&This->crit);
This->buffersize = pd->dwData;
This->queue_len = min(This->buffersize, 20);
This->queue_len = min(This->buffersize, 1024);
HeapFree(GetProcessHeap(), 0, This->data_queue);
This->data_queue = !This->queue_len ? NULL : HeapAlloc(GetProcessHeap(), 0,

View File

@ -151,11 +151,17 @@ static HRESULT WINAPI IDirectMusicStyle8Impl_EnumBand(IDirectMusicStyle8 *iface,
}
static HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultBand(IDirectMusicStyle8 *iface,
IDirectMusicBand **ppBand)
IDirectMusicBand **band)
{
IDirectMusicStyle8Impl *This = impl_from_IDirectMusicStyle8(iface);
FIXME("(%p, %p): stub\n", This, ppBand);
return S_OK;
IDirectMusicStyle8Impl *This = impl_from_IDirectMusicStyle8(iface);
FIXME("(%p, %p): stub\n", This, band);
if (!band)
return E_POINTER;
*band = NULL;
return S_FALSE;
}
static HRESULT WINAPI IDirectMusicStyle8Impl_EnumMotif(IDirectMusicStyle8 *iface, DWORD index,

View File

@ -1014,6 +1014,7 @@ HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *ds
LPWAVEFORMATEX wfex = dsbd->lpwfxFormat;
HRESULT err = DS_OK;
DWORD capf = 0;
size_t bufsize;
TRACE("(%p,%p,%p)\n", device, dsbd, buffer);
@ -1069,19 +1070,15 @@ HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *ds
TRACE("capf = 0x%08x, device->drvcaps.dwFlags = 0x%08x\n", capf, device->drvcaps.dwFlags);
/* Allocate an empty buffer */
dsb->buffer = HeapAlloc(GetProcessHeap(),0,sizeof(*(dsb->buffer)));
bufsize = (sizeof(*(dsb->buffer)) + sizeof(void *) - 1) & ~(sizeof(void *) - 1);
dsb->buffer = HeapAlloc(GetProcessHeap(),0,bufsize + dsb->buflen);
if (!dsb->buffer) {
IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
return DSERR_OUTOFMEMORY;
}
/* Allocate system memory for buffer */
dsb->buffer->memory = HeapAlloc(GetProcessHeap(),0,dsb->buflen);
if (!dsb->buffer->memory) {
WARN("out of memory\n");
IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
return DSERR_OUTOFMEMORY;
}
dsb->buffer->memory = (BYTE *)dsb->buffer + bufsize;
dsb->buffer->ref = 1;
dsb->buffer->lockedbytes = 0;
@ -1152,10 +1149,8 @@ void secondarybuffer_destroy(IDirectSoundBufferImpl *This)
This->buffer->ref--;
list_remove(&This->entry);
if (This->buffer->ref == 0) {
HeapFree(GetProcessHeap(), 0, This->buffer->memory);
if (This->buffer->ref == 0)
HeapFree(GetProcessHeap(), 0, This->buffer);
}
HeapFree(GetProcessHeap(), 0, This->notifies);
HeapFree(GetProcessHeap(), 0, This->pwfx);

View File

@ -188,9 +188,9 @@ HRESULT IDirectSoundBufferImpl_Duplicate(
IDirectSoundBufferImpl **ppdsb,
IDirectSoundBufferImpl *pdsb) DECLSPEC_HIDDEN;
void secondarybuffer_destroy(IDirectSoundBufferImpl *This) DECLSPEC_HIDDEN;
const IDirectSound3DListenerVtbl ds3dlvt DECLSPEC_HIDDEN;
const IDirectSound3DBufferVtbl ds3dbvt DECLSPEC_HIDDEN;
const IKsPropertySetVtbl iksbvt DECLSPEC_HIDDEN;
extern const IDirectSound3DListenerVtbl ds3dlvt DECLSPEC_HIDDEN;
extern const IDirectSound3DBufferVtbl ds3dbvt DECLSPEC_HIDDEN;
extern const IKsPropertySetVtbl iksbvt DECLSPEC_HIDDEN;
HRESULT IKsPrivatePropertySetImpl_Create(REFIID riid, void **ppv) DECLSPEC_HIDDEN;

View File

@ -1157,6 +1157,13 @@ static HRESULT test_duplicate(LPGUID lpGuid)
ok(rc==DS_OK && buf!=NULL,
"IDirectSoundBuffer_Lock failed to lock the buffer %08x\n",rc);
if (rc==DS_OK && buf!=NULL) {
if (sizeof(void*)==4) { /* crashes on 64-bit */
/* broken apps like Asuka 120% Return BURNING Fest,
pass the pointer to GlobalHandle. */
HGLOBAL hmem = GlobalHandle(buf);
ok(!hmem,"GlobalHandle should return NULL "
"for buffer %p, got %p\n",buf,hmem);
}
ZeroMemory(buf,bufsize);
rc=IDirectSoundBuffer_Unlock(original,buf,bufsize,
NULL,0);

View File

@ -6263,9 +6263,21 @@ static HRESULT WINAPI fontfacereference_EnqueueFileFragmentDownloadRequest(IDWri
static HRESULT WINAPI fontfacereference1_CreateFontFace(IDWriteFontFaceReference1 *iface, IDWriteFontFace5 **fontface)
{
FIXME("%p, %p.\n", iface, fontface);
struct dwrite_fontfacereference *reference = impl_from_IDWriteFontFaceReference1(iface);
IDWriteFontFace3 *fontface3;
HRESULT hr;
return E_NOTIMPL;
TRACE("%p, %p.\n", iface, fontface);
/* FIXME: created instance should likely respect given axis. */
if (SUCCEEDED(hr = IDWriteFontFaceReference1_CreateFontFaceWithSimulations(iface, reference->simulations,
&fontface3)))
{
hr = IDWriteFontFace3_QueryInterface(fontface3, &IID_IDWriteFontFace5, (void **)fontface);
IDWriteFontFace3_Release(fontface3);
}
return hr;
}
static UINT32 WINAPI fontfacereference1_GetFontAxisValueCount(IDWriteFontFaceReference1 *iface)

View File

@ -9537,6 +9537,10 @@ static void test_font_resource(void)
ok(hr == S_OK, "Failed to get axis values, hr %#x.\n", hr);
ok(axis_values[0].axisTag == DWRITE_FONT_AXIS_TAG_WEIGHT, "Unexpected axis tag.\n");
hr = IDWriteFontFaceReference1_CreateFontFace(reference, &fontface5);
ok(hr == S_OK, "Failed to create a font face, hr %#x.\n", hr);
IDWriteFontFace5_Release(fontface5);
IDWriteFontFaceReference1_Release(reference);
IDWriteFontFile_Release(fontfile);

View File

@ -384,7 +384,12 @@ static GpStatus alpha_blend_bmp_pixels(GpGraphics *graphics, INT dst_x, INT dst_
src_color = ((ARGB*)(src + src_stride * y))[x];
if (comp_mode == CompositingModeSourceCopy)
GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, src_color);
{
if (!(src_color & 0xff000000))
GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, 0);
else
GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, src_color);
}
else
{
if (!(src_color & 0xff000000))
@ -5359,7 +5364,13 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics,
{
stat = GdipSetEmpty(regions[i]);
if (stat != Ok)
{
SelectObject(hdc, oldfont);
DeleteObject(gdifont);
if (temp_hdc)
DeleteDC(temp_hdc);
return stat;
}
}
args.regions = regions;
@ -7204,8 +7215,13 @@ static GpStatus SOFTWARE_GdipDrawDriverString(GpGraphics *graphics, GDIPCONST UI
}
if (max_glyphsize == 0)
{
/* Nothing to draw. */
heap_free(pti);
DeleteDC(hdc);
DeleteObject(hfont);
return Ok;
}
glyph_mask = heap_alloc_zero(max_glyphsize);
text_mask = heap_alloc_zero((max_x - min_x) * (max_y - min_y));

View File

@ -1381,50 +1381,29 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO* info,
VOID *bits, GpBitmap **bitmap)
{
DWORD height, stride;
PixelFormat format;
HBITMAP hbm;
void *bmbits;
GpStatus status;
FIXME("(%p, %p, %p) - partially implemented\n", info, bits, bitmap);
TRACE("(%p, %p, %p)\n", info, bits, bitmap);
if (!info || !bits || !bitmap)
return InvalidParameter;
hbm = CreateDIBSection(0, info, DIB_RGB_COLORS, &bmbits, NULL, 0);
if (!hbm)
return InvalidParameter;
height = abs(info->bmiHeader.biHeight);
stride = ((info->bmiHeader.biWidth * info->bmiHeader.biBitCount + 31) >> 3) & ~3;
TRACE("height %u, stride %u, image size %u\n", height, stride, height * stride);
if(info->bmiHeader.biHeight > 0) /* bottom-up */
{
bits = (BYTE*)bits + (height - 1) * stride;
stride = -stride;
}
memcpy(bmbits, bits, height * stride);
switch(info->bmiHeader.biBitCount) {
case 1:
format = PixelFormat1bppIndexed;
break;
case 4:
format = PixelFormat4bppIndexed;
break;
case 8:
format = PixelFormat8bppIndexed;
break;
case 16:
format = PixelFormat16bppRGB555;
break;
case 24:
format = PixelFormat24bppRGB;
break;
case 32:
format = PixelFormat32bppRGB;
break;
default:
FIXME("don't know how to handle %d bpp\n", info->bmiHeader.biBitCount);
*bitmap = NULL;
return InvalidParameter;
}
return GdipCreateBitmapFromScan0(info->bmiHeader.biWidth, height, stride, format,
bits, bitmap);
status = GdipCreateBitmapFromHBITMAP(hbm, NULL, bitmap);
DeleteObject(hbm);
return status;
}
/* FIXME: no icm */

View File

@ -4208,7 +4208,7 @@ static void test_DrawImage_SourceCopy(void)
expect(0, dst_pixels[0]);
expect(0xffff0000, dst_pixels[1]);
expect(0, dst_pixels[2]);
todo_wine expect(0, dst_pixels[3]);
expect(0, dst_pixels[3]);
status = GdipDeleteGraphics(graphics);
expect(Ok, status);

View File

@ -100,7 +100,9 @@ struct tagActiveDS
struct jpeg_decompress_struct jd;
struct jpeg_error_mgr jerr;
#endif
} activeDS DECLSPEC_HIDDEN;
};
extern struct tagActiveDS activeDS DECLSPEC_HIDDEN;
/* Helper functions */
extern TW_UINT16 GPHOTO2_SaneCapability (pTW_CAPABILITY pCapability, TW_UINT16 action) DECLSPEC_HIDDEN;

View File

@ -33,6 +33,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(twain);
struct tagActiveDS activeDS;
DSMENTRYPROC GPHOTO2_dsmentry;
#ifdef HAVE_GPHOTO2

View File

@ -2791,9 +2791,13 @@ DWORD WINAPI NotifyRouteChange(PHANDLE Handle, LPOVERLAPPED overlapped)
DWORD WINAPI NotifyUnicastIpAddressChange(ADDRESS_FAMILY family, PUNICAST_IPADDRESS_CHANGE_CALLBACK callback,
PVOID context, BOOLEAN init_notify, PHANDLE handle)
{
FIXME("(family %d, callback %p, context %p, init_notify %d, handle %p): stub\n",
FIXME("(family %d, callback %p, context %p, init_notify %d, handle %p): semi-stub\n",
family, callback, context, init_notify, handle);
if (handle) *handle = NULL;
if (init_notify)
callback(context, NULL, MibInitialNotification);
return ERROR_NOT_SUPPORTED;
}

View File

@ -100,6 +100,9 @@ static DWORD (WINAPI *pConvertInterfaceNameToLuidA)(const char*,NET_LUID*);
static DWORD (WINAPI *pConvertInterfaceNameToLuidW)(const WCHAR*,NET_LUID*);
static DWORD (WINAPI *pConvertLengthToIpv4Mask)(ULONG,ULONG*);
static DWORD (WINAPI *pParseNetworkString)(const WCHAR*,DWORD,NET_ADDRESS_INFO*,USHORT*,BYTE*);
static DWORD (WINAPI *pNotifyUnicastIpAddressChange)(ADDRESS_FAMILY, PUNICAST_IPADDRESS_CHANGE_CALLBACK,
PVOID, BOOLEAN, HANDLE *);
static DWORD (WINAPI *pCancelMibChangeNotify2)(HANDLE);
static PCHAR (WINAPI *pif_indextoname)(NET_IFINDEX,PCHAR);
static NET_IFINDEX (WINAPI *pif_nametoindex)(const char*);
@ -158,6 +161,8 @@ static void loadIPHlpApi(void)
pParseNetworkString = (void *)GetProcAddress(hLibrary, "ParseNetworkString");
pif_indextoname = (void *)GetProcAddress(hLibrary, "if_indextoname");
pif_nametoindex = (void *)GetProcAddress(hLibrary, "if_nametoindex");
pNotifyUnicastIpAddressChange = (void *)GetProcAddress(hLibrary, "NotifyUnicastIpAddressChange");
pCancelMibChangeNotify2 = (void *)GetProcAddress(hLibrary, "CancelMibChangeNotify2");
}
}
@ -2381,6 +2386,41 @@ static void test_ParseNetworkString(void)
}
}
static void WINAPI test_ipaddtess_change_callback(PVOID context, PMIB_UNICASTIPADDRESS_ROW row,
MIB_NOTIFICATION_TYPE notification_type)
{
BOOL *callback_called = context;
*callback_called = TRUE;
ok(notification_type == MibInitialNotification, "Unexpected notification_type %#x.\n",
notification_type);
ok(!row, "Unexpected row %p.\n", row);
}
static void test_NotifyUnicastIpAddressChange(void)
{
BOOL callback_called;
HANDLE handle;
DWORD ret;
if (!pNotifyUnicastIpAddressChange)
{
win_skip("NotifyUnicastIpAddressChange not available.\n");
return;
}
callback_called = FALSE;
ret = pNotifyUnicastIpAddressChange(AF_INET, test_ipaddtess_change_callback,
&callback_called, TRUE, &handle);
todo_wine ok(ret == NO_ERROR, "Unexpected ret %#x.\n", ret);
ok(callback_called, "Callback was not called.\n");
ret = pCancelMibChangeNotify2(handle);
ok(ret == NO_ERROR, "Unexpected ret %#x.\n", ret);
ok(!CloseHandle(handle), "CloseHandle() succeded.\n");
}
START_TEST(iphlpapi)
{
@ -2411,6 +2451,7 @@ START_TEST(iphlpapi)
test_ConvertLengthToIpv4Mask();
test_GetUdp6Table();
test_ParseNetworkString();
test_NotifyUnicastIpAddressChange();
freeIPHlpApi();
}
}

View File

@ -3142,6 +3142,53 @@ static void test_GetConsoleScreenBufferInfoEx(HANDLE std_output)
ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
}
static void test_SetConsoleScreenBufferInfoEx(HANDLE std_output)
{
BOOL ret;
HANDLE hmod;
HANDLE std_input = CreateFileA("CONIN$", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
BOOL (WINAPI *pSetConsoleScreenBufferInfoEx)(HANDLE, CONSOLE_SCREEN_BUFFER_INFOEX *);
BOOL (WINAPI *pGetConsoleScreenBufferInfoEx)(HANDLE, CONSOLE_SCREEN_BUFFER_INFOEX *);
CONSOLE_SCREEN_BUFFER_INFOEX info;
hmod = GetModuleHandleA("kernel32.dll");
pSetConsoleScreenBufferInfoEx = (void *)GetProcAddress(hmod, "SetConsoleScreenBufferInfoEx");
pGetConsoleScreenBufferInfoEx = (void *)GetProcAddress(hmod, "GetConsoleScreenBufferInfoEx");
if (!pSetConsoleScreenBufferInfoEx || !pGetConsoleScreenBufferInfoEx)
{
win_skip("SetConsoleScreenBufferInfoEx is not available\n");
return;
}
memset(&info, 0, sizeof(CONSOLE_SCREEN_BUFFER_INFOEX));
info.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
pGetConsoleScreenBufferInfoEx(std_output, &info);
SetLastError(0xdeadbeef);
ret = pSetConsoleScreenBufferInfoEx(NULL, &info);
ok(!ret, "got %d, expected zero\n", ret);
ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError());
SetLastError(0xdeadbeef);
ret = pSetConsoleScreenBufferInfoEx(std_output, &info);
ok(ret, "got %d, expected one\n", ret);
ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
SetLastError(0xdeadbeef);
ret = pSetConsoleScreenBufferInfoEx(std_input, &info);
ok(!ret, "got %d, expected zero\n", ret);
ok(GetLastError() == ERROR_INVALID_HANDLE || GetLastError() == ERROR_ACCESS_DENIED,
"got %u, expected 5 or 6\n", GetLastError());
info.cbSize = 0;
SetLastError(0xdeadbeef);
ret = pSetConsoleScreenBufferInfoEx(std_output, &info);
ok(!ret, "got %d, expected zero\n", ret);
ok(GetLastError() == ERROR_INVALID_PARAMETER, "got %u, expected 87\n", GetLastError());
CloseHandle(std_input);
}
static void test_AttachConsole_child(DWORD console_pid)
{
HANDLE pipe_in, pipe_out;
@ -3398,5 +3445,6 @@ START_TEST(console)
test_GetConsoleFontInfo(hConOut);
test_SetConsoleFont(hConOut);
test_GetConsoleScreenBufferInfoEx(hConOut);
test_SetConsoleScreenBufferInfoEx(hConOut);
test_AttachConsole(hConOut);
}

View File

@ -59,6 +59,7 @@ static BOOL (WINAPI *pRtlDosPathNameToNtPathName_U)(LPCWSTR, PUNICODE_STRING, PW
static NTSTATUS (WINAPI *pRtlAnsiStringToUnicodeString)(PUNICODE_STRING, PCANSI_STRING, BOOLEAN);
static BOOL (WINAPI *pSetFileInformationByHandle)(HANDLE, FILE_INFO_BY_HANDLE_CLASS, void*, DWORD);
static BOOL (WINAPI *pGetQueuedCompletionStatusEx)(HANDLE, OVERLAPPED_ENTRY*, ULONG, ULONG*, DWORD, BOOL);
static HANDLE (WINAPI *pReOpenFile)(HANDLE, DWORD, DWORD, DWORD);
static void (WINAPI *pRtlInitAnsiString)(PANSI_STRING,PCSZ);
static void (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING);
static BOOL (WINAPI *pSetFileCompletionNotificationModes)(HANDLE, UCHAR);
@ -111,6 +112,7 @@ static void InitFunctionPointers(void)
pGetFinalPathNameByHandleW = (void *) GetProcAddress(hkernel32, "GetFinalPathNameByHandleW");
pSetFileInformationByHandle = (void *) GetProcAddress(hkernel32, "SetFileInformationByHandle");
pGetQueuedCompletionStatusEx = (void *) GetProcAddress(hkernel32, "GetQueuedCompletionStatusEx");
pReOpenFile = (void *) GetProcAddress(hkernel32, "ReOpenFile");
pSetFileCompletionNotificationModes = (void *)GetProcAddress(hkernel32, "SetFileCompletionNotificationModes");
pFindFirstStreamW = (void *)GetProcAddress(hkernel32, "FindFirstStreamW");
}
@ -4410,6 +4412,104 @@ static void test_SetFileValidData(void)
DeleteFileA(filename);
}
static void test_ReOpenFile(void)
{
char path[MAX_PATH], filename[MAX_PATH], buffer[4];
HANDLE file, new;
unsigned int i;
DWORD size;
BOOL ret;
static const DWORD invalid_attributes[] =
{
FILE_ATTRIBUTE_ARCHIVE,
FILE_ATTRIBUTE_ENCRYPTED,
FILE_ATTRIBUTE_HIDDEN,
FILE_ATTRIBUTE_NORMAL,
FILE_ATTRIBUTE_OFFLINE,
FILE_ATTRIBUTE_READONLY,
FILE_ATTRIBUTE_SYSTEM,
FILE_ATTRIBUTE_TEMPORARY,
};
static const DWORD valid_attributes[] =
{
FILE_FLAG_BACKUP_SEMANTICS,
FILE_FLAG_NO_BUFFERING,
FILE_FLAG_OVERLAPPED,
FILE_FLAG_RANDOM_ACCESS,
FILE_FLAG_SEQUENTIAL_SCAN,
FILE_FLAG_WRITE_THROUGH,
};
if (!pReOpenFile)
{
win_skip("ReOpenFile() is not available\n");
return;
}
GetTempPathA(sizeof(path), path);
GetTempFileNameA(path, "tst", 0, filename);
file = CreateFileA(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
ok(file != INVALID_HANDLE_VALUE, "failed to create file, error %u\n", GetLastError());
ret = WriteFile(file, "foo", 4, &size, NULL);
ok(ret, "failed to write file, error %u\n", GetLastError());
for (i = 0; i < ARRAY_SIZE(invalid_attributes); ++i)
{
SetLastError(0xdeadbeef);
new = pReOpenFile(file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, invalid_attributes[i]);
ok(new == INVALID_HANDLE_VALUE, "got %p\n", new);
ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %u\n", GetLastError());
}
new = pReOpenFile(file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0);
ok(new != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError());
ret = ReadFile(new, buffer, sizeof(buffer), &size, NULL);
ok(ret, "failed to read file, error %u\n", GetLastError());
ok(size == 4, "got size %u\n", size);
ok(!strcmp(buffer, "foo"), "got wrong data\n");
CloseHandle(new);
for (i = 0; i < ARRAY_SIZE(valid_attributes); ++i)
{
new = pReOpenFile(file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, valid_attributes[i]);
ok(new != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError());
CloseHandle(new);
}
SetLastError(0xdeadbeef);
new = pReOpenFile(file, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0);
ok(new == INVALID_HANDLE_VALUE, "got %p\n", new);
ok(GetLastError() == ERROR_SHARING_VIOLATION, "got error %u\n", GetLastError());
CloseHandle(file);
ret = DeleteFileA(filename);
ok(ret, "failed to delete file, error %u\n", GetLastError());
file = CreateNamedPipeA("\\\\.\\pipe\\test_pipe", PIPE_ACCESS_DUPLEX, 0, 1, 1000, 1000, 1000, NULL);
ok(file != INVALID_HANDLE_VALUE, "failed to create pipe, error %u\n", GetLastError());
new = pReOpenFile(file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0);
todo_wine ok(new != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError());
ret = WriteFile(file, "foo", 4, &size, NULL);
todo_wine ok(ret, "failed to write file, error %u\n", GetLastError());
ret = ReadFile(new, buffer, sizeof(buffer), &size, NULL);
todo_wine ok(ret, "failed to read file, error %u\n", GetLastError());
if (ret)
{
ok(size == 4, "got size %u\n", size);
ok(!strcmp(buffer, "foo"), "got wrong data\n");
}
CloseHandle(new);
CloseHandle(file);
}
static void test_WriteFileGather(void)
{
char temp_path[MAX_PATH], filename[MAX_PATH];
@ -5483,4 +5583,5 @@ START_TEST(file)
test_file_readonly_access();
test_find_file_stream();
test_SetFileTime();
test_ReOpenFile();
}

View File

@ -1141,6 +1141,7 @@ static void test_Toolhelp(void)
STARTUPINFOA startup;
PROCESS_INFORMATION info;
HANDLE process, thread, snapshot;
DWORD nested_pid;
PROCESSENTRY32 pe;
THREADENTRY32 te;
DWORD ret;
@ -1193,17 +1194,24 @@ static void test_Toolhelp(void)
/* The following test fails randomly on some Windows versions, but Gothic 2 depends on it */
ok(i < 20 || broken(i == 20), "process object not released\n");
/* Look for the nested process by pid */
WritePrivateProfileStringA(NULL, NULL, NULL, resfile);
nested_pid = GetPrivateProfileIntA("Nested", "Pid", 0, resfile);
DeleteFileA(resfile);
snapshot = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
ok(snapshot != INVALID_HANDLE_VALUE, "CreateToolhelp32Snapshot failed %u\n", GetLastError());
memset(&pe, 0, sizeof(pe));
pe.dwSize = sizeof(pe);
if (pProcess32First(snapshot, &pe))
{
while (pe.th32ParentProcessID != info.dwProcessId)
while (pe.th32ProcessID != nested_pid)
if (!pProcess32Next(snapshot, &pe)) break;
}
CloseHandle(snapshot);
ok(pe.th32ParentProcessID == info.dwProcessId, "failed to find nested child process\n");
ok(pe.th32ProcessID == nested_pid, "failed to find nested child process\n");
ok(pe.th32ParentProcessID == info.dwProcessId, "nested child process has parent %u instead of %u\n", pe.th32ParentProcessID, info.dwProcessId);
ok(stricmp(pe.szExeFile, exename) == 0, "nested executable is %s instead of %s\n", pe.szExeFile, exename);
process = OpenProcess(PROCESS_ALL_ACCESS_NT4, FALSE, pe.th32ProcessID);
ok(process != NULL, "OpenProcess failed %u\n", GetLastError());
@ -1226,7 +1234,8 @@ static void test_Toolhelp(void)
ok(ret == 1, "expected 1, got %u\n", ret);
CloseHandle(thread);
ok(WaitForSingleObject(process, 30000) == WAIT_OBJECT_0, "Child process termination\n");
ret = WaitForSingleObject(process, 30000);
ok(ret == WAIT_OBJECT_0, "Child process termination got %u le=%u\n", ret, GetLastError());
CloseHandle(process);
WritePrivateProfileStringA(NULL, NULL, NULL, resfile);
@ -4037,6 +4046,7 @@ START_TEST(process)
char buffer[MAX_PATH];
STARTUPINFOA startup;
PROCESS_INFORMATION info;
HANDLE hFile;
memset(&startup, 0, sizeof(startup));
startup.cb = sizeof(startup);
@ -4047,6 +4057,14 @@ START_TEST(process)
ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &startup, &info), "CreateProcess failed\n");
CloseHandle(info.hProcess);
CloseHandle(info.hThread);
/* The nested process is suspended so we can use the same resource
* file and it's up to the parent to read it before resuming the
* nested process.
*/
hFile = CreateFileA(myARGV[3], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
childPrintf(hFile, "[Nested]\nPid=%08u\n", info.dwProcessId);
CloseHandle(hFile);
return;
}
else if (!strcmp(myARGV[2], "parent") && myARGC >= 5)

View File

@ -1146,9 +1146,39 @@ BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleOutputCP( UINT cp )
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleScreenBufferInfoEx( HANDLE handle,
CONSOLE_SCREEN_BUFFER_INFOEX *info )
{
FIXME( "(%p %p): stub!\n", handle, info );
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
return FALSE;
BOOL ret;
TRACE("(%p, %p)\n", handle, info);
if (info->cbSize != sizeof(CONSOLE_SCREEN_BUFFER_INFOEX))
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
SERVER_START_REQ( set_console_output_info )
{
req->handle = console_handle_unmap( handle );
req->mask = SET_CONSOLE_OUTPUT_INFO_CURSOR_POS | SET_CONSOLE_OUTPUT_INFO_SIZE |
SET_CONSOLE_OUTPUT_INFO_ATTR | SET_CONSOLE_OUTPUT_INFO_POPUP_ATTR |
SET_CONSOLE_OUTPUT_INFO_DISPLAY_WINDOW | SET_CONSOLE_OUTPUT_INFO_MAX_SIZE;
req->width = info->dwSize.X;
req->height = info->dwSize.Y;
req->cursor_x = info->dwCursorPosition.X;
req->cursor_y = info->dwCursorPosition.Y;
req->attr = info->wAttributes;
req->win_left = info->srWindow.Left;
req->win_top = info->srWindow.Top;
req->win_right = info->srWindow.Right;
req->win_bottom = info->srWindow.Bottom;
req->popup_attr = info->wPopupAttributes;
req->max_width = min( info->dwMaximumWindowSize.X, info->dwSize.X );
req->max_height = min( info->dwMaximumWindowSize.Y, info->dwSize.Y );
ret = !wine_server_call_err( req );
}
SERVER_END_REQ;
return ret;
}

View File

@ -432,6 +432,26 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileA( LPCSTR name, DWORD access, DWORD sh
return CreateFileW( nameW, access, sharing, sa, creation, attributes, template );
}
static UINT get_nt_file_options( DWORD attributes )
{
UINT options = 0;
if (attributes & FILE_FLAG_BACKUP_SEMANTICS)
options |= FILE_OPEN_FOR_BACKUP_INTENT;
else
options |= FILE_NON_DIRECTORY_FILE;
if (attributes & FILE_FLAG_DELETE_ON_CLOSE)
options |= FILE_DELETE_ON_CLOSE;
if (attributes & FILE_FLAG_NO_BUFFERING)
options |= FILE_NO_INTERMEDIATE_BUFFERING;
if (!(attributes & FILE_FLAG_OVERLAPPED))
options |= FILE_SYNCHRONOUS_IO_NONALERT;
if (attributes & FILE_FLAG_RANDOM_ACCESS)
options |= FILE_RANDOM_ACCESS;
if (attributes & FILE_FLAG_WRITE_THROUGH)
options |= FILE_WRITE_THROUGH;
return options;
}
/*************************************************************************
* CreateFileW (kernelbase.@)
@ -441,7 +461,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO
DWORD attributes, HANDLE template )
{
NTSTATUS status;
UINT options;
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW;
IO_STATUS_BLOCK io;
@ -543,25 +562,8 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO
/* now call NtCreateFile */
options = 0;
if (attributes & FILE_FLAG_BACKUP_SEMANTICS)
options |= FILE_OPEN_FOR_BACKUP_INTENT;
else
options |= FILE_NON_DIRECTORY_FILE;
if (attributes & FILE_FLAG_DELETE_ON_CLOSE)
{
options |= FILE_DELETE_ON_CLOSE;
access |= DELETE;
}
if (attributes & FILE_FLAG_NO_BUFFERING)
options |= FILE_NO_INTERMEDIATE_BUFFERING;
if (!(attributes & FILE_FLAG_OVERLAPPED))
options |= FILE_SYNCHRONOUS_IO_NONALERT;
if (attributes & FILE_FLAG_RANDOM_ACCESS)
options |= FILE_RANDOM_ACCESS;
if (attributes & FILE_FLAG_WRITE_THROUGH)
options |= FILE_WRITE_THROUGH;
attributes &= FILE_ATTRIBUTE_VALID_FLAGS;
attr.Length = sizeof(attr);
attr.RootDirectory = 0;
@ -582,8 +584,9 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO
if (sa && sa->bInheritHandle) attr.Attributes |= OBJ_INHERIT;
status = NtCreateFile( &ret, access | SYNCHRONIZE | FILE_READ_ATTRIBUTES, &attr, &io,
NULL, attributes, sharing, nt_disposition[creation - CREATE_NEW],
options, NULL, 0 );
NULL, attributes & FILE_ATTRIBUTE_VALID_FLAGS, sharing,
nt_disposition[creation - CREATE_NEW],
get_nt_file_options( attributes ), NULL, 0 );
if (status)
{
if (vxd_name && vxd_name[0])
@ -2550,10 +2553,41 @@ HANDLE WINAPI DECLSPEC_HOTPATCH OpenFileById( HANDLE handle, LPFILE_ID_DESCRIPTO
/***********************************************************************
* ReOpenFile (kernelbase.@)
*/
HANDLE WINAPI /* DECLSPEC_HOTPATCH */ ReOpenFile( HANDLE handle, DWORD access, DWORD sharing, DWORD flags )
HANDLE WINAPI DECLSPEC_HOTPATCH ReOpenFile( HANDLE handle, DWORD access, DWORD sharing, DWORD attributes )
{
FIXME( "(%p, %d, %d, %d): stub\n", handle, access, sharing, flags );
return INVALID_HANDLE_VALUE;
SECURITY_QUALITY_OF_SERVICE qos;
OBJECT_ATTRIBUTES attr;
UNICODE_STRING empty = { 0 };
IO_STATUS_BLOCK io;
NTSTATUS status;
HANDLE file;
TRACE("handle %p, access %#x, sharing %#x, attributes %#x.\n", handle, access, sharing, attributes);
if (attributes & 0x7ffff) /* FILE_ATTRIBUTE_* flags are invalid */
{
SetLastError(ERROR_INVALID_PARAMETER);
return INVALID_HANDLE_VALUE;
}
if (attributes & FILE_FLAG_DELETE_ON_CLOSE)
access |= DELETE;
InitializeObjectAttributes( &attr, &empty, OBJ_CASE_INSENSITIVE, handle, NULL );
if (attributes & SECURITY_SQOS_PRESENT)
{
qos.Length = sizeof(qos);
qos.ImpersonationLevel = (attributes >> 16) & 0x3;
qos.ContextTrackingMode = attributes & SECURITY_CONTEXT_TRACKING ? SECURITY_DYNAMIC_TRACKING : SECURITY_STATIC_TRACKING;
qos.EffectiveOnly = (attributes & SECURITY_EFFECTIVE_ONLY) != 0;
attr.SecurityQualityOfService = &qos;
}
status = NtCreateFile( &file, access | SYNCHRONIZE | FILE_READ_ATTRIBUTES, &attr, &io, NULL,
0, sharing, FILE_OPEN, get_nt_file_options( attributes ), NULL, 0 );
if (!set_ntstatus( status ))
return INVALID_HANDLE_VALUE;
return file;
}

View File

@ -2475,11 +2475,12 @@ DWORD WINAPIV CallProc32W16( DWORD nrofargs, DWORD argconvmask, FARPROC proc32,
DWORD WINAPIV CallProcEx32W16( DWORD nrofargs, DWORD argconvmask, FARPROC proc32, VA_LIST16 valist )
{
DWORD args[32];
unsigned int i;
unsigned int i, count = min( 32, nrofargs & ~CPEX_DEST_CDECL );
TRACE("(%d,%d,%p args[",nrofargs,argconvmask,proc32);
TRACE("(%s,%d,%d,%p args[", nrofargs & CPEX_DEST_CDECL ? "cdecl": "stdcall",
nrofargs & ~CPEX_DEST_CDECL, argconvmask, proc32);
for (i=0;i<nrofargs;i++)
for (i = 0; i < count; i++)
{
if (argconvmask & (1<<i))
{

View File

@ -92,8 +92,8 @@
@ stdcall WcsEnumColorProfilesSize(long ptr ptr)
@ stub WcsGetCalibrationManagementState
@ stub WcsGetDefaultColorProfile
@ stub WcsGetDefaultColorProfileSize
@ stub WcsGetDefaultRenderingIntent
@ stdcall WcsGetDefaultColorProfileSize(long wstr long long long ptr)
@ stdcall WcsGetDefaultRenderingIntent(long ptr)
@ stdcall WcsGetUsePerUserProfiles(wstr long ptr)
@ stub WcsGpCanInstallOrUninstallProfiles
@ stdcall WcsOpenColorProfileA(ptr ptr ptr long long long long)

View File

@ -1552,6 +1552,28 @@ BOOL WINAPI WcsEnumColorProfilesSize( WCS_PROFILE_MANAGEMENT_SCOPE scope, ENUMTY
return FALSE;
}
/******************************************************************************
* WcsGetDefaultColorProfileSize [MSCMS.@]
*/
BOOL WINAPI WcsGetDefaultColorProfileSize( WCS_PROFILE_MANAGEMENT_SCOPE scope, PCWSTR device_name,
COLORPROFILETYPE type, COLORPROFILESUBTYPE subtype,
DWORD profile_id, PDWORD profile_size)
{
FIXME( "%d %s %d %d %d %p\n", scope, debugstr_w(device_name), type, subtype, profile_id, profile_size );
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
return FALSE;
}
/******************************************************************************
* WcsGetDefaultRednderingIntent [MSCMS.@]
*/
BOOL WINAPI WcsGetDefaultRenderingIntent( WCS_PROFILE_MANAGEMENT_SCOPE scope, PDWORD intent)
{
FIXME( "%d %p\n", scope, intent );
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
return FALSE;
}
/******************************************************************************
* WcsOpenColorProfileA [MSCMS.@]
*/

View File

@ -142,7 +142,7 @@ void init_css_style(CSSStyle*,nsIDOMCSSStyleDeclaration*,style_qi_t,
dispex_static_data_t*,compat_mode_t) DECLSPEC_HIDDEN;
void CSSStyle_init_dispex_info(dispex_data_t *info, compat_mode_t mode) DECLSPEC_HIDDEN;
const dispex_static_data_vtbl_t CSSStyle_dispex_vtbl DECLSPEC_HIDDEN;
extern const dispex_static_data_vtbl_t CSSStyle_dispex_vtbl DECLSPEC_HIDDEN;
HRESULT get_style_property(CSSStyle*,styleid_t,BSTR*) DECLSPEC_HIDDEN;
HRESULT get_style_property_var(CSSStyle*,styleid_t,VARIANT*) DECLSPEC_HIDDEN;

View File

@ -51,6 +51,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
HINSTANCE hInst;
DWORD mshtml_tls = TLS_OUT_OF_INDEXES;
void (__cdecl *ccp_init)(ExternalCycleCollectionParticipant*,const CCObjCallback*);
nsrefcnt (__cdecl *ccref_decr)(nsCycleCollectingAutoRefCnt*,nsISupports*,ExternalCycleCollectionParticipant*);
nsrefcnt (__cdecl *ccref_incr)(nsCycleCollectingAutoRefCnt*,nsISupports*);
void (__cdecl *ccref_init)(nsCycleCollectingAutoRefCnt*,nsrefcnt);
void (__cdecl *describe_cc_node)(nsCycleCollectingAutoRefCnt*,const char*,nsCycleCollectionTraversalCallback*);
void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTraversalCallback*);
static HINSTANCE shdoclc = NULL;
static WCHAR *status_strings[IDS_STATUS_LAST-IDS_STATUS_FIRST+1];
static IMultiLanguage2 *mlang;

View File

@ -355,12 +355,12 @@ typedef struct {
DEFINE_GUID(IID_nsXPCOMCycleCollectionParticipant, 0x9674489b,0x1f6f,0x4550,0xa7,0x30, 0xcc,0xae,0xdd,0x10,0x4c,0xf9);
nsrefcnt (__cdecl *ccref_incr)(nsCycleCollectingAutoRefCnt*,nsISupports*) DECLSPEC_HIDDEN;
nsrefcnt (__cdecl *ccref_decr)(nsCycleCollectingAutoRefCnt*,nsISupports*,ExternalCycleCollectionParticipant*) DECLSPEC_HIDDEN;
void (__cdecl *ccref_init)(nsCycleCollectingAutoRefCnt*,nsrefcnt) DECLSPEC_HIDDEN;
void (__cdecl *ccp_init)(ExternalCycleCollectionParticipant*,const CCObjCallback*) DECLSPEC_HIDDEN;
void (__cdecl *describe_cc_node)(nsCycleCollectingAutoRefCnt*,const char*,nsCycleCollectionTraversalCallback*) DECLSPEC_HIDDEN;
void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTraversalCallback*) DECLSPEC_HIDDEN;
extern nsrefcnt (__cdecl *ccref_incr)(nsCycleCollectingAutoRefCnt*,nsISupports*) DECLSPEC_HIDDEN;
extern nsrefcnt (__cdecl *ccref_decr)(nsCycleCollectingAutoRefCnt*,nsISupports*,ExternalCycleCollectionParticipant*) DECLSPEC_HIDDEN;
extern void (__cdecl *ccref_init)(nsCycleCollectingAutoRefCnt*,nsrefcnt) DECLSPEC_HIDDEN;
extern void (__cdecl *ccp_init)(ExternalCycleCollectionParticipant*,const CCObjCallback*) DECLSPEC_HIDDEN;
extern void (__cdecl *describe_cc_node)(nsCycleCollectingAutoRefCnt*,const char*,nsCycleCollectionTraversalCallback*) DECLSPEC_HIDDEN;
extern void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTraversalCallback*) DECLSPEC_HIDDEN;
void init_dispex_with_compat_mode(DispatchEx*,IUnknown*,dispex_static_data_t*,compat_mode_t) DECLSPEC_HIDDEN;
void release_dispex(DispatchEx*) DECLSPEC_HIDDEN;

View File

@ -51,6 +51,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(msi);
BOOL is_wow64;
static const WCHAR installerW[] = {'\\','I','n','s','t','a','l','l','e','r',0};
UINT msi_locate_product(LPCWSTR szProduct, MSIINSTALLCONTEXT *context)

View File

@ -42,7 +42,7 @@
#include "winemsi.h"
static const BOOL is_64bit = sizeof(void *) > sizeof(int);
BOOL is_wow64 DECLSPEC_HIDDEN;
extern BOOL is_wow64 DECLSPEC_HIDDEN;
#define MSI_DATASIZEMASK 0x00ff
#define MSITYPE_VALID 0x0100

View File

@ -16,12 +16,12 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
char PROG_FILES_DIR[MAX_PATH];
char PROG_FILES_DIR_NATIVE[MAX_PATH];
char COMMON_FILES_DIR[MAX_PATH];
char APP_DATA_DIR[MAX_PATH];
char WINDOWS_DIR[MAX_PATH];
char CURR_DIR[MAX_PATH];
extern char PROG_FILES_DIR[MAX_PATH];
extern char PROG_FILES_DIR_NATIVE[MAX_PATH];
extern char COMMON_FILES_DIR[MAX_PATH];
extern char APP_DATA_DIR[MAX_PATH];
extern char WINDOWS_DIR[MAX_PATH];
extern char CURR_DIR[MAX_PATH];
BOOL get_system_dirs(void);
BOOL get_user_dirs(void);

View File

@ -314,7 +314,7 @@ logic_error* __thiscall MSVCP_logic_error_ctor( logic_error *this, exception_nam
#if _MSVCP_VER == 60
MSVCP_exception_ctor(&this->e, "");
#else
MSVCP_exception_ctor(&this->e, NULL);
MSVCP_exception_default_ctor(&this->e);
#endif
MSVCP_basic_string_char_ctor_cstr(&this->str, EXCEPTION_STR(name));
#else
@ -560,7 +560,7 @@ static runtime_error* MSVCP_runtime_error_ctor( runtime_error *this, exception_n
#if _MSVCP_VER == 60
MSVCP_exception_ctor(&this->e, "");
#else
MSVCP_exception_ctor(&this->e, NULL);
MSVCP_exception_default_ctor(&this->e);
#endif
MSVCP_basic_string_char_ctor_cstr(&this->str, EXCEPTION_STR(name));
#else

View File

@ -135,7 +135,10 @@ static int (__cdecl *p__memicmp)(const char*, const char*, size_t);
static int (__cdecl *p__memicmp_l)(const char*, const char*, size_t, _locale_t);
static int (__cdecl *p__vsnwprintf)(wchar_t *buffer,size_t count, const wchar_t *format, __ms_va_list valist);
static size_t (__cdecl *p___strncnt)(const char *str, size_t count);
static int (__cdecl *p_swscanf)(const wchar_t *str, const wchar_t* format, ...);
static int (WINAPIV *p_swscanf)(const wchar_t *str, const wchar_t* format, ...);
static int (__cdecl *p____mb_cur_max_l_func)(_locale_t locale);
static _locale_t (__cdecl *p__create_locale)(int, const char*);
static void (__cdecl *p__free_locale)(_locale_t);
/* make sure we use the correct errno */
#undef errno
@ -402,6 +405,9 @@ static BOOL init(void)
SET(p__vsnwprintf, "_vsnwprintf");
SET(p___strncnt, "__strncnt");
SET(p_swscanf, "swscanf");
SET(p____mb_cur_max_l_func, "___mb_cur_max_l_func");
SET(p__create_locale, "_create_locale");
SET(p__free_locale, "_free_locale");
if (sizeof(void *) == 8)
{
@ -1936,6 +1942,25 @@ static void test_swscanf(void)
ok( ret == (short)WEOF, "ret = %d\n", ret );
}
static void test____mb_cur_max_l_func(void)
{
int ret;
_locale_t l;
ret = p____mb_cur_max_l_func(NULL);
ok( ret == 1, "MB_CUR_MAX_L(NULL) = %d\n", ret );
l = p__create_locale(LC_ALL, "chinese-traditional");
if (!l)
{
skip("DBCS locale not available\n");
return;
}
ret = p____mb_cur_max_l_func(l);
ok( ret == 2, "MB_CUR_MAX_L(cht) = %d\n", ret );
p__free_locale(l);
}
START_TEST(msvcr90)
{
if(!init())
@ -1975,4 +2000,5 @@ START_TEST(msvcr90)
#endif
test___strncnt();
test_swscanf();
test____mb_cur_max_l_func();
}

View File

@ -1640,73 +1640,6 @@ range:
return MSVCRT_ERANGE;
}
/*********************************************************************
* _searchenv (MSVCRT.@)
*
* Search for a file in a list of paths from an environment variable.
*
* PARAMS
* file [I] Name of the file to search for.
* env [I] Name of the environment variable containing a list of paths.
* buf [O] Destination for the found file path.
*
* RETURNS
* Nothing. If the file is not found, buf will contain an empty string
* and errno is set.
*/
void CDECL MSVCRT__searchenv(const char* file, const char* env, char *buf)
{
char*envVal, *penv, *end;
char path[MAX_PATH];
MSVCRT_size_t path_len, fname_len = strlen(file);
*buf = '\0';
/* Try CWD first */
if (GetFileAttributesA( file ) != INVALID_FILE_ATTRIBUTES)
{
GetFullPathNameA( file, MAX_PATH, buf, NULL );
return;
}
/* Search given environment variable */
envVal = MSVCRT_getenv(env);
if (!envVal)
{
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
}
penv = envVal;
TRACE(":searching for %s in paths %s\n", file, envVal);
for(; *penv; penv = (*end ? end + 1 : end))
{
end = penv;
while(*end && *end != ';') end++; /* Find end of next path */
path_len = end - penv;
if (!path_len || path_len >= MAX_PATH)
continue;
memcpy(path, penv, path_len);
if (path[path_len - 1] != '/' && path[path_len - 1] != '\\')
path[path_len++] = '\\';
if (path_len + fname_len >= MAX_PATH)
continue;
memcpy(path + path_len, file, fname_len + 1);
TRACE("Checking for file %s\n", path);
if (GetFileAttributesA( path ) != INVALID_FILE_ATTRIBUTES)
{
memcpy(buf, path, path_len + fname_len + 1);
return;
}
}
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
}
/*********************************************************************
* _searchenv_s (MSVCRT.@)
*/
@ -1748,12 +1681,27 @@ int CDECL MSVCRT__searchenv_s(const char* file, const char* env, char *buf, MSVC
for(; *penv; penv = (*end ? end + 1 : end))
{
end = penv;
while(*end && *end != ';') end++; /* Find end of next path */
path_len = end - penv;
path_len = 0;
while(*end && *end != ';' && path_len < MAX_PATH)
{
if (*end == '"')
{
end++;
while(*end && *end != '"' && path_len < MAX_PATH)
{
path[path_len++] = *end;
end++;
}
if (*end == '"') end++;
continue;
}
path[path_len++] = *end;
end++;
}
if (!path_len || path_len >= MAX_PATH)
continue;
memcpy(path, penv, path_len);
if (path[path_len - 1] != '/' && path[path_len - 1] != '\\')
path[path_len++] = '\\';
if (path_len + fname_len >= MAX_PATH)
@ -1778,61 +1726,11 @@ int CDECL MSVCRT__searchenv_s(const char* file, const char* env, char *buf, MSVC
}
/*********************************************************************
* _wsearchenv (MSVCRT.@)
*
* Unicode version of _searchenv
* _searchenv (MSVCRT.@)
*/
void CDECL MSVCRT__wsearchenv(const MSVCRT_wchar_t* file, const MSVCRT_wchar_t* env, MSVCRT_wchar_t *buf)
void CDECL MSVCRT__searchenv(const char* file, const char* env, char *buf)
{
MSVCRT_wchar_t *envVal, *penv, *end;
MSVCRT_wchar_t path[MAX_PATH];
MSVCRT_size_t path_len, fname_len = strlenW(file);
*buf = '\0';
/* Try CWD first */
if (GetFileAttributesW( file ) != INVALID_FILE_ATTRIBUTES)
{
GetFullPathNameW( file, MAX_PATH, buf, NULL );
return;
}
/* Search given environment variable */
envVal = MSVCRT__wgetenv(env);
if (!envVal)
{
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
}
penv = envVal;
TRACE(":searching for %s in paths %s\n", debugstr_w(file), debugstr_w(envVal));
for(; *penv; penv = (*end ? end + 1 : end))
{
end = penv;
while(*end && *end != ';') end++; /* Find end of next path */
path_len = end - penv;
if (!path_len || path_len >= MAX_PATH)
continue;
memcpy(path, penv, path_len * sizeof(MSVCRT_wchar_t));
if (path[path_len - 1] != '/' && path[path_len - 1] != '\\')
path[path_len++] = '\\';
if (path_len + fname_len >= MAX_PATH)
continue;
memcpy(path + path_len, file, (fname_len + 1) * sizeof(MSVCRT_wchar_t));
TRACE("Checking for file %s\n", debugstr_w(path));
if (GetFileAttributesW( path ) != INVALID_FILE_ATTRIBUTES)
{
memcpy(buf, path, (path_len + fname_len + 1) * sizeof(MSVCRT_wchar_t));
return;
}
}
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
MSVCRT__searchenv_s(file, env, buf, MAX_PATH);
}
/*********************************************************************
@ -1877,12 +1775,27 @@ int CDECL MSVCRT__wsearchenv_s(const MSVCRT_wchar_t* file, const MSVCRT_wchar_t*
for(; *penv; penv = (*end ? end + 1 : end))
{
end = penv;
while(*end && *end != ';') end++; /* Find end of next path */
path_len = end - penv;
path_len = 0;
while(*end && *end != ';' && path_len < MAX_PATH)
{
if (*end == '"')
{
end++;
while(*end && *end != '"' && path_len < MAX_PATH)
{
path[path_len++] = *end;
end++;
}
if (*end == '"') end++;
continue;
}
path[path_len++] = *end;
end++;
}
if (!path_len || path_len >= MAX_PATH)
continue;
memcpy(path, penv, path_len * sizeof(MSVCRT_wchar_t));
if (path[path_len - 1] != '/' && path[path_len - 1] != '\\')
path[path_len++] = '\\';
if (path_len + fname_len >= MAX_PATH)
@ -1905,3 +1818,11 @@ int CDECL MSVCRT__wsearchenv_s(const MSVCRT_wchar_t* file, const MSVCRT_wchar_t*
*MSVCRT__errno() = MSVCRT_ENOENT;
return MSVCRT_ENOENT;
}
/*********************************************************************
* _wsearchenv (MSVCRT.@)
*/
void CDECL MSVCRT__wsearchenv(const MSVCRT_wchar_t* file, const MSVCRT_wchar_t* env, MSVCRT_wchar_t *buf)
{
MSVCRT__wsearchenv_s(file, env, buf, MAX_PATH);
}

View File

@ -184,7 +184,7 @@ int CDECL MSVCRT____mb_cur_max_func(void)
/*********************************************************************
* ___mb_cur_max_l_func (MSVCR80.@)
*/
int* CDECL ___mb_cur_max_l_func(MSVCRT__locale_t locale)
int CDECL ___mb_cur_max_l_func(MSVCRT__locale_t locale)
{
MSVCRT_pthreadlocinfo locinfo;
@ -193,7 +193,7 @@ int* CDECL ___mb_cur_max_l_func(MSVCRT__locale_t locale)
else
locinfo = locale->locinfo;
return &locinfo->mb_cur_max;
return locinfo->mb_cur_max;
}
#endif

View File

@ -2310,6 +2310,7 @@ int __cdecl MSVCRT_strncmp(const char *str1, const char *str2, MSVCRT_size_t len
int __cdecl MSVCRT__strnicmp_l(const char *s1, const char *s2,
MSVCRT_size_t count, MSVCRT__locale_t locale)
{
MSVCRT_pthreadlocinfo locinfo;
int c1, c2;
if(s1==NULL || s2==NULL)
@ -2318,9 +2319,26 @@ int __cdecl MSVCRT__strnicmp_l(const char *s1, const char *s2,
if(!count)
return 0;
if(!locale)
locinfo = get_locinfo();
else
locinfo = locale->locinfo;
if(!locinfo->lc_handle[MSVCRT_LC_CTYPE])
{
do {
if ((c1 = *s1++) >= 'A' && c1 <= 'Z')
c1 -= 'A' - 'a';
if ((c2 = *s2++) >= 'A' && c2 <= 'Z')
c2 -= 'A' - 'a';
}while(--count && c1 && c1==c2);
return c1-c2;
}
do {
c1 = MSVCRT__tolower_l(*s1++, locale);
c2 = MSVCRT__tolower_l(*s2++, locale);
c1 = MSVCRT__tolower_l((unsigned char)*s1++, locale);
c2 = MSVCRT__tolower_l((unsigned char)*s2++, locale);
}while(--count && c1 && c1==c2);
return c1-c2;

View File

@ -597,6 +597,20 @@ static void test_searchenv(void)
ok(!strcmp(result, exp), "got %s, expected '%s'\n", result, exp);
}
strcpy(env1, "TEST_PATH=");
strcat(env1, tmppath);
strcat(env1, "\"\\search_env_test\\\"d\"i\"r\"1");
putenv(env1);
strcpy(exp, tmppath);
strcat(exp, files[0]);
_searchenv("1.dat", "TEST_PATH", result);
ok(!strcmp(result, exp), "got %s, expected '%s'\n", result, exp);
strcat(env1, ";");
putenv(env1);
_searchenv("1.dat", "TEST_PATH", result);
ok(!result[0], "got %s, expected ''\n", result);
putenv("TEST_PATH=");
for (i=ARRAY_SIZE(files)-1; i>=0; i--) {

View File

@ -1122,6 +1122,7 @@ static inline void get_cpuinfo(SYSTEM_CPU_INFORMATION* info)
user_shared_data->ProcessorFeatures[PF_VIRT_FIRMWARE_ENABLED] = (regs2[2] >> 2) & 1;
user_shared_data->ProcessorFeatures[PF_NX_ENABLED] = (regs2[3] >> 20) & 1;
user_shared_data->ProcessorFeatures[PF_3DNOW_INSTRUCTIONS_AVAILABLE] = (regs2[3] >> 31) & 1;
user_shared_data->ProcessorFeatures[PF_RDTSC_INSTRUCTION_AVAILABLE] = (regs2[3] >> 27) & 1;
if (regs2[3] >> 31) info->FeatureSet |= CPU_FEATURE_3DNOW;
}
}
@ -1143,6 +1144,7 @@ static inline void get_cpuinfo(SYSTEM_CPU_INFORMATION* info)
{
do_cpuid(0x80000001, regs2); /* get vendor features */
user_shared_data->ProcessorFeatures[PF_NX_ENABLED] = (regs2[3] >> 20) & 1;
user_shared_data->ProcessorFeatures[PF_RDTSC_INSTRUCTION_AVAILABLE] = (regs2[3] >> 27) & 1;
}
}
else

View File

@ -25,6 +25,7 @@
#include "windef.h"
#include "winternl.h"
#include "wine/test.h"
#include "ddk/wdm.h"
static unsigned int page_size;
@ -33,6 +34,8 @@ static NTSTATUS (WINAPI *pRtlFreeUserStack)(void *);
static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL);
static const BOOL is_win64 = sizeof(void*) != sizeof(int);
static SYSTEM_BASIC_INFORMATION sbi;
static HANDLE create_target_process(const char *arg)
{
char **argv;
@ -513,9 +516,22 @@ static void test_NtMapViewOfSection(void)
CloseHandle(process);
}
static void test_user_shared_data(void)
{
const KSHARED_USER_DATA *user_shared_data = (void *)0x7ffe0000;
ok(user_shared_data->NumberOfPhysicalPages == sbi.MmNumberOfPhysicalPages,
"Got number of physical pages %#x, expected %#x.\n",
user_shared_data->NumberOfPhysicalPages, sbi.MmNumberOfPhysicalPages);
#if defined(__i386__) || defined(__x86_64__)
ok(user_shared_data->ProcessorFeatures[PF_RDTSC_INSTRUCTION_AVAILABLE] /* Supported since Pentium CPUs. */,
"_RDTSC not available.\n");
#endif
}
START_TEST(virtual)
{
SYSTEM_BASIC_INFORMATION sbi;
HMODULE mod;
int argc;
@ -546,4 +562,5 @@ START_TEST(virtual)
test_NtAllocateVirtualMemory();
test_RtlCreateUserStack();
test_NtMapViewOfSection();
test_user_shared_data();
}

View File

@ -222,6 +222,7 @@ static void set_process_name( int argc, char *argv[] )
*/
TEB *thread_init(void)
{
SYSTEM_BASIC_INFORMATION sbi;
TEB *teb;
void *addr;
SIZE_T size;
@ -310,6 +311,9 @@ TEB *thread_init(void)
user_shared_data->TickCountMultiplier = 1 << 24;
fill_cpu_info();
virtual_get_system_info( &sbi );
user_shared_data->NumberOfPhysicalPages = sbi.MmNumberOfPhysicalPages;
return teb;
}

View File

@ -797,6 +797,8 @@ static void find_reg_tz_info(RTL_DYNAMIC_TIME_ZONE_INFORMATION *tzi, const char*
continue; \
}
memset(&reg_tzi, 0, sizeof(reg_tzi));
if (!reg_query_value(hSubkey, mui_stdW, REG_SZ, reg_tzi.StandardName, sizeof(reg_tzi.StandardName)))
get_value(hSubkey, stdW, REG_SZ, reg_tzi.StandardName, sizeof(reg_tzi.StandardName));
if (!reg_query_value(hSubkey, mui_dltW, REG_SZ, reg_tzi.DaylightName, sizeof(reg_tzi.DaylightName)))

View File

@ -646,9 +646,7 @@ HRESULT WINAPI AntiMoniker_CreateInstance(IClassFactory *iface,
return hr;
hr = IMoniker_QueryInterface(pMoniker, riid, ppv);
if (FAILED(hr))
IMoniker_Release(pMoniker);
IMoniker_Release(pMoniker);
return hr;
}

View File

@ -62,6 +62,7 @@ typedef struct tagTrackerWindowInfo
DWORD dwOKEffect;
DWORD* pdwEffect;
BOOL trackingDone;
BOOL inTrackCall;
HRESULT returnValue;
BOOL escPressed;
@ -766,6 +767,7 @@ HRESULT WINAPI DoDragDrop (
trackerInfo.dwOKEffect = dwOKEffect;
trackerInfo.pdwEffect = pdwEffect;
trackerInfo.trackingDone = FALSE;
trackerInfo.inTrackCall = FALSE;
trackerInfo.escPressed = FALSE;
trackerInfo.curTargetHWND = 0;
trackerInfo.curDragTarget = 0;
@ -2284,6 +2286,13 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo)
HWND hwndNewTarget = 0;
POINT pt;
/*
* This method may be called from QueryContinueDrag again,
* (i.e. by running message loop) so avoid recursive call chain.
*/
if (trackerInfo->inTrackCall) return;
trackerInfo->inTrackCall = TRUE;
/*
* Get the handle of the window under the mouse
*/
@ -2329,6 +2338,8 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo)
}
else
drag_end( trackerInfo );
trackerInfo->inTrackCall = FALSE;
}
/***

View File

@ -606,9 +606,7 @@ HRESULT WINAPI PointerMoniker_CreateInstance(IClassFactory *iface,
return hr;
hr = IMoniker_QueryInterface(pMoniker, riid, ppv);
if (FAILED(hr))
IMoniker_Release(pMoniker);
IMoniker_Release(pMoniker);
return hr;
}

View File

@ -260,6 +260,7 @@ struct method_call call_lists[][30] =
};
static int droptarget_refs;
static int test_reentrance;
/* helper macros to make tests a bit leaner */
#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr)
@ -359,7 +360,34 @@ static HRESULT WINAPI DropSource_QueryContinueDrag(
BOOL fEscapePressed,
DWORD grfKeyState)
{
return check_expect(DS_QueryContinueDrag, 0, NULL);
HRESULT hr = check_expect(DS_QueryContinueDrag, 0, NULL);
if (test_reentrance)
{
MSG msg;
BOOL r;
int num = 0;
HWND hwnd = GetCapture();
ok(hwnd != 0, "Expected capture window\n");
/* send some fake events that should be ignored */
r = PostMessageA(hwnd, WM_MOUSEMOVE, 0, 0);
r &= PostMessageA(hwnd, WM_LBUTTONDOWN, 0, 0);
r &= PostMessageA(hwnd, WM_LBUTTONUP, 0, 0);
r &= PostMessageA(hwnd, WM_KEYDOWN, VK_ESCAPE, 0);
ok(r, "Unable to post messages\n");
/* run the message loop for this thread */
while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessageA(&msg);
num++;
}
ok(num >= 4, "Expected at least 4 messages but %d were processed\n", num);
}
return hr;
}
static HRESULT WINAPI DropSource_GiveFeedback(
@ -701,17 +729,20 @@ static void test_DoDragDrop(void)
GetWindowRect(hwnd, &rect);
ok(SetCursorPos(rect.left+50, rect.top+50), "SetCursorPos failed\n");
for (seq = 0; seq < ARRAY_SIZE(call_lists); seq++)
for (test_reentrance = 0; test_reentrance < 2; test_reentrance++)
{
DWORD effect_in;
trace("%d\n", seq);
call_ptr = call_lists[seq];
effect_in = call_ptr->set_param;
call_ptr++;
for (seq = 0; seq < ARRAY_SIZE(call_lists); seq++)
{
DWORD effect_in;
trace("%d\n", seq);
call_ptr = call_lists[seq];
effect_in = call_ptr->set_param;
call_ptr++;
hr = DoDragDrop(&DataObject, &DropSource, effect_in, &effect);
check_expect(DoDragDrop_ret, hr, NULL);
check_expect(DoDragDrop_effect_out, effect, NULL);
hr = DoDragDrop(&DataObject, &DropSource, effect_in, &effect);
check_expect(DoDragDrop_ret, hr, NULL);
check_expect(DoDragDrop_effect_out, effect, NULL);
}
}
OleUninitialize();

View File

@ -50,3 +50,11 @@ BOOL WINAPI QOSCreateHandle(PQOS_VERSION version, PHANDLE handle)
SetLastError(ERROR_SERVICE_ALREADY_RUNNING);
return FALSE;
}
BOOL WINAPI QOSAddSocketToFlow(HANDLE handle, SOCKET socket, PSOCKADDR addr,
QOS_TRAFFIC_TYPE traffictype, DWORD flags, PQOS_FLOWID flowid)
{
FIXME("%p, %lx, %p, %d, 0x%08x, %p stub!\n", handle, socket, addr, traffictype, flags, flowid);
SetLastError(ERROR_NOT_SUPPORTED);
return FALSE;
}

View File

@ -1,6 +1,6 @@
@ stub QDLHPathDiagnostics
@ stub QDLHStartDiagnosingPath
@ stub QOSAddSocketToFlow
@ stdcall QOSAddSocketToFlow(ptr long ptr long long ptr)
@ stub QOSCancel
@ stub QOSCloseHandle
@ stdcall QOSCreateHandle(ptr ptr)

View File

@ -925,12 +925,6 @@ static HRESULT get_param_pointer_info(ITypeInfo *typeinfo, TYPEDESC *tdesc, int
ITypeInfo_ReleaseTypeAttr(refinfo, attr);
ITypeInfo_Release(refinfo);
break;
case VT_BSTR:
*flags |= IsSimpleRef | MustFree;
*tfs_tdesc = tdesc;
if (!is_in && is_out)
*server_size = sizeof(void *);
break;
default:
*flags |= IsSimpleRef;
*tfs_tdesc = tdesc;
@ -938,6 +932,8 @@ static HRESULT get_param_pointer_info(ITypeInfo *typeinfo, TYPEDESC *tdesc, int
*server_size = type_memsize(typeinfo, tdesc);
if ((*basetype = get_basetype(typeinfo, tdesc)))
*flags |= IsBasetype;
else
*flags |= MustFree;
break;
}
@ -1265,14 +1261,16 @@ static HRESULT get_iface_info(ITypeInfo *typeinfo, WORD *funcs, WORD *parentfunc
if (FAILED(hr))
goto err;
hr = ITypeInfo_GetRefTypeInfo(*real_typeinfo, reftype, &parentinfo);
if (SUCCEEDED(hr))
{
hr = ITypeInfo_GetTypeAttr(parentinfo, &typeattr);
ITypeInfo_Release(parentinfo);
}
if (FAILED(hr))
goto err;
hr = ITypeInfo_GetTypeAttr(parentinfo, &typeattr);
if (FAILED(hr))
goto err;
*parentiid = typeattr->guid;
ITypeInfo_ReleaseTypeAttr(parentinfo, typeattr);
ITypeInfo_Release(parentinfo);
return S_OK;

View File

@ -36,7 +36,7 @@
#include "twain.h"
#ifdef SONAME_LIBSANE
#define MAKE_FUNCPTR(f) typeof(f) * p##f DECLSPEC_HIDDEN;
#define MAKE_FUNCPTR(f) extern typeof(f) * p##f DECLSPEC_HIDDEN;
MAKE_FUNCPTR(sane_init)
MAKE_FUNCPTR(sane_exit)
MAKE_FUNCPTR(sane_get_devices)
@ -84,7 +84,9 @@ struct tagActiveDS
TW_FIX32 defaultXResolution;
BOOL YResolutionSet;
TW_FIX32 defaultYResolution;
} activeDS DECLSPEC_HIDDEN;
};
extern struct tagActiveDS activeDS DECLSPEC_HIDDEN;
/* Helper functions */
extern TW_UINT16 SANE_SaneCapability (pTW_CAPABILITY pCapability, TW_UINT16 action) DECLSPEC_HIDDEN;

View File

@ -30,9 +30,27 @@
WINE_DEFAULT_DEBUG_CHANNEL(twain);
struct tagActiveDS activeDS;
DSMENTRYPROC SANE_dsmentry;
#ifdef SONAME_LIBSANE
#define MAKE_FUNCPTR(f) typeof(f) * p##f;
MAKE_FUNCPTR(sane_init)
MAKE_FUNCPTR(sane_exit)
MAKE_FUNCPTR(sane_get_devices)
MAKE_FUNCPTR(sane_open)
MAKE_FUNCPTR(sane_close)
MAKE_FUNCPTR(sane_get_option_descriptor)
MAKE_FUNCPTR(sane_control_option)
MAKE_FUNCPTR(sane_get_parameters)
MAKE_FUNCPTR(sane_start)
MAKE_FUNCPTR(sane_read)
MAKE_FUNCPTR(sane_cancel)
MAKE_FUNCPTR(sane_set_io_mode)
MAKE_FUNCPTR(sane_get_select_fd)
MAKE_FUNCPTR(sane_strstatus)
#undef MAKE_FUNCPTR
HINSTANCE SANE_instance;

View File

@ -31,7 +31,7 @@
#define JOB_ADD_CURRENT_DATE 0x08
#define JOB_NONINTERACTIVE 0x10
extern handle_t rpc_handle;
extern handle_t atsvc_handle;
static int test_failures, test_skipped;
@ -69,7 +69,7 @@ START_TEST(atsvcapi)
hr = RpcStringBindingComposeA(NULL, ncalrpc, NULL, NULL, NULL, &binding_str);
ok(hr == RPC_S_OK, "RpcStringBindingCompose error %#x\n", hr);
hr = RpcBindingFromStringBindingA(binding_str, &rpc_handle);
hr = RpcBindingFromStringBindingA(binding_str, &atsvc_handle);
ok(hr == RPC_S_OK, "RpcBindingFromStringBinding error %#x\n", hr);
hr = RpcStringFreeA(&binding_str);
ok(hr == RPC_S_OK, "RpcStringFree error %#x\n", hr);
@ -173,7 +173,7 @@ skip_tests_delete:
skip_tests:
SetUnhandledExceptionFilter(old_exception_filter);
hr = RpcBindingFree(&rpc_handle);
hr = RpcBindingFree(&atsvc_handle);
ok(hr == RPC_S_OK, "RpcBindingFree error %#x\n", hr);
}

View File

@ -25,7 +25,7 @@
#include "wine/test.h"
extern handle_t rpc_handle;
extern handle_t schrpc_handle;
static LONG CALLBACK rpc_exception_filter(EXCEPTION_POINTERS *ptrs)
{
@ -103,7 +103,7 @@ START_TEST(rpcapi)
hr = RpcStringBindingComposeA(NULL, ncalrpc, NULL, NULL, NULL, &binding_str);
ok(hr == RPC_S_OK, "RpcStringBindingCompose error %#x\n", hr);
hr = RpcBindingFromStringBindingA(binding_str, &rpc_handle);
hr = RpcBindingFromStringBindingA(binding_str, &schrpc_handle);
ok(hr == RPC_S_OK, "RpcBindingFromStringBinding error %#x\n", hr);
hr = RpcStringFreeA(&binding_str);
ok(hr == RPC_S_OK, "RpcStringFree error %#x\n", hr);
@ -537,7 +537,7 @@ todo_wine
MIDL_user_free(path);
}
hr = RpcBindingFree(&rpc_handle);
hr = RpcBindingFree(&schrpc_handle);
ok(hr == RPC_S_OK, "RpcBindingFree error %#x\n", hr);
}

View File

@ -1387,8 +1387,8 @@ static const SecPkgInfoA infoA = {
ntlm_comment_A
};
SecPkgInfoA *ntlm_package_infoA = (SecPkgInfoA *)&infoA;
SecPkgInfoW *ntlm_package_infoW = (SecPkgInfoW *)&infoW;
static SecPkgInfoA *ntlm_package_infoA = (SecPkgInfoA *)&infoA;
static SecPkgInfoW *ntlm_package_infoW = (SecPkgInfoW *)&infoW;
static SecPkgInfoW *build_package_infoW( const SecPkgInfoW *info )
{

View File

@ -190,9 +190,6 @@ void SECUR32_arc4Cleanup(arc4_info *a4i) DECLSPEC_HIDDEN;
#define NTLMSSP_NEGOTIATE_56 0x80000000
SecPkgInfoW *ntlm_package_infoW DECLSPEC_HIDDEN;
SecPkgInfoA *ntlm_package_infoA DECLSPEC_HIDDEN;
/* schannel internal interface */
typedef struct schan_imp_session_opaque *schan_imp_session;

View File

@ -4570,16 +4570,42 @@ BOOL WINAPI SetupDiBuildDriverInfoList(HDEVINFO devinfo, SP_DEVINFO_DATA *device
return TRUE;
}
static BOOL copy_driver_data(SP_DRVINFO_DATA_W *data, const struct driver *driver)
{
INFCONTEXT ctx;
HINF hinf;
if ((hinf = SetupOpenInfFileW(driver->inf_path, NULL, INF_STYLE_WIN4, NULL)) == INVALID_HANDLE_VALUE)
return FALSE;
data->ProviderName[0] = 0;
if (SetupFindFirstLineW(hinf, L"Version", L"Provider", &ctx))
SetupGetStringFieldW(&ctx, 1, data->ProviderName, ARRAY_SIZE(data->ProviderName), NULL);
wcscpy(data->Description, driver->description);
wcscpy(data->MfgName, driver->manufacturer);
data->DriverType = SPDIT_COMPATDRIVER;
SetupCloseInfFile(hinf);
return TRUE;
}
static void driver_data_wtoa(SP_DRVINFO_DATA_A *a, const SP_DRVINFO_DATA_W *w)
{
a->DriverType = w->DriverType;
a->Reserved = w->Reserved;
WideCharToMultiByte(CP_ACP, 0, w->Description, -1, a->Description, sizeof(a->Description), NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, w->MfgName, -1, a->MfgName, sizeof(a->MfgName), NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, w->ProviderName, -1, a->ProviderName, sizeof(a->ProviderName), NULL, NULL);
}
/***********************************************************************
* SetupDiEnumDriverInfoW (SETUPAPI.@)
*/
BOOL WINAPI SetupDiEnumDriverInfoW(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data,
DWORD type, DWORD index, SP_DRVINFO_DATA_W *driver_data)
{
static const WCHAR providerW[] = {'P','r','o','v','i','d','e','r',0};
struct device *device;
INFCONTEXT ctx;
HINF hinf;
TRACE("devinfo %p, device_data %p, type %#x, index %u, driver_data %p.\n",
devinfo, device_data, type, index, driver_data);
@ -4600,19 +4626,7 @@ BOOL WINAPI SetupDiEnumDriverInfoW(HDEVINFO devinfo, SP_DEVINFO_DATA *device_dat
return FALSE;
}
if ((hinf = SetupOpenInfFileW(device->drivers[index].inf_path, NULL, INF_STYLE_WIN4, NULL)) == INVALID_HANDLE_VALUE)
return FALSE;
driver_data->ProviderName[0] = 0;
if (SetupFindFirstLineW(hinf, Version, providerW, &ctx))
SetupGetStringFieldW(&ctx, 1, driver_data->ProviderName, ARRAY_SIZE(driver_data->ProviderName), NULL);
lstrcpyW(driver_data->Description, device->drivers[index].description);
lstrcpyW(driver_data->MfgName, device->drivers[index].manufacturer);
driver_data->DriverType = SPDIT_COMPATDRIVER;
SetupCloseInfFile(hinf);
return TRUE;
return copy_driver_data(driver_data, &device->drivers[index]);
}
/***********************************************************************
@ -4626,14 +4640,7 @@ BOOL WINAPI SetupDiEnumDriverInfoA(HDEVINFO devinfo, SP_DEVINFO_DATA *device_dat
driver_dataW.cbSize = sizeof(driver_dataW);
ret = SetupDiEnumDriverInfoW(devinfo, device_data, type, index, &driver_dataW);
driver_data->DriverType = driver_dataW.DriverType;
driver_data->Reserved = driver_dataW.Reserved;
WideCharToMultiByte(CP_ACP, 0, driver_dataW.Description, -1, driver_data->Description,
sizeof(driver_data->Description), NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, driver_dataW.MfgName, -1, driver_data->MfgName,
sizeof(driver_data->MfgName), NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, driver_dataW.ProviderName, -1, driver_data->ProviderName,
sizeof(driver_data->ProviderName), NULL, NULL);
driver_data_wtoa(driver_data, &driver_dataW);
return ret;
}
@ -4663,6 +4670,41 @@ BOOL WINAPI SetupDiSelectBestCompatDrv(HDEVINFO devinfo, SP_DEVINFO_DATA *device
return TRUE;
}
/***********************************************************************
* SetupDiGetSelectedDriverW (SETUPAPI.@)
*/
BOOL WINAPI SetupDiGetSelectedDriverW(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data, SP_DRVINFO_DATA_W *driver_data)
{
struct device *device;
TRACE("devinfo %p, device_data %p, driver_data %p.\n", devinfo, device_data, driver_data);
if (!(device = get_device(devinfo, device_data)))
return FALSE;
if (!device->selected_driver)
{
SetLastError(ERROR_NO_DRIVER_SELECTED);
return FALSE;
}
return copy_driver_data(driver_data, device->selected_driver);
}
/***********************************************************************
* SetupDiGetSelectedDriverA (SETUPAPI.@)
*/
BOOL WINAPI SetupDiGetSelectedDriverA(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data, SP_DRVINFO_DATA_A *driver_data)
{
SP_DRVINFO_DATA_W driver_dataW;
BOOL ret;
driver_dataW.cbSize = sizeof(driver_dataW);
if ((ret = SetupDiGetSelectedDriverW(devinfo, device_data, &driver_dataW)))
driver_data_wtoa(driver_data, &driver_dataW);
return ret;
}
/***********************************************************************
* SetupDiInstallDriverFiles (SETUPAPI.@)
*/

View File

@ -1132,7 +1132,7 @@ static BOOL do_file_copyW( LPCWSTR source, LPCWSTR target, DWORD style,
}
}
if (style & (SP_COPY_NODECOMP | SP_COPY_LANGUAGEAWARE | SP_COPY_FORCE_IN_USE |
SP_COPY_IN_USE_NEEDS_REBOOT | SP_COPY_NOSKIP | SP_COPY_WARNIFSKIP))
SP_COPY_NOSKIP | SP_COPY_WARNIFSKIP))
{
ERR("Unsupported style(s) 0x%x\n",style);
}
@ -1140,6 +1140,22 @@ static BOOL do_file_copyW( LPCWSTR source, LPCWSTR target, DWORD style,
if (docopy)
{
rc = CopyFileW(source,target,FALSE);
if (!rc && GetLastError() == ERROR_SHARING_VIOLATION &&
(style & SP_COPY_IN_USE_NEEDS_REBOOT))
{
WCHAR temp_file[MAX_PATH];
WCHAR temp[MAX_PATH];
if (GetTempPathW(MAX_PATH, temp) &&
GetTempFileNameW(temp, L"SET", 0, temp_file))
{
rc = CopyFileW(source, temp_file, FALSE);
if (rc)
rc = MoveFileExW(temp_file, target, MOVEFILE_DELAY_UNTIL_REBOOT);
else
DeleteFileW(temp_file);
}
}
if (!rc) WARN( "failed to copy, err %u\n", GetLastError() );
}
else

View File

@ -359,8 +359,8 @@
@ stdcall SetupDiGetINFClassA(str ptr ptr long ptr)
@ stdcall SetupDiGetINFClassW(wstr ptr ptr long ptr)
@ stub SetupDiGetSelectedDevice
@ stub SetupDiGetSelectedDriverA
@ stub SetupDiGetSelectedDriverW
@ stdcall SetupDiGetSelectedDriverA(ptr ptr ptr)
@ stdcall SetupDiGetSelectedDriverW(ptr ptr ptr)
@ stub SetupDiGetWizardPage
@ stdcall SetupDiInstallClassA(long str long ptr)
@ stub SetupDiInstallClassExA

View File

@ -2374,6 +2374,20 @@ static void test_driver_list(void)
ok(!ret, "Expected failure.\n");
ok(GetLastError() == ERROR_NO_MORE_ITEMS, "Got unexpected error %#x.\n", GetLastError());
ret = SetupDiGetSelectedDriverA(set, &device, &driver);
ok(ret /* Win10 1809 */ || GetLastError() == ERROR_NO_DRIVER_SELECTED,
"Got unexpected error %#x.\n", GetLastError());
ret = SetupDiSelectBestCompatDrv(set, &device);
ok(ret, "Failed to select driver, error %#x.\n", GetLastError());
ret = SetupDiGetSelectedDriverA(set, &device, &driver);
ok(ret, "Failed to get selected driver, error %#x.\n", GetLastError());
ok(driver.DriverType == SPDIT_COMPATDRIVER, "Got wrong type %#x.\n", driver.DriverType);
ok(!strcmp(driver.Description, "desc1"), "Got wrong description '%s'.\n", driver.Description);
ok(!strcmp(driver.MfgName, wow64 ? "mfg1_wow" : "mfg1"), "Got wrong manufacturer '%s'.\n", driver.MfgName);
ok(!strcmp(driver.ProviderName, ""), "Got wrong provider '%s'.\n", driver.ProviderName);
SetupDiDestroyDeviceInfoList(set);
ret = DeleteFileA(inf_path);
ok(ret, "Failed to delete %s, error %u.\n", inf_path, GetLastError());

View File

@ -1109,6 +1109,8 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam,
return BrsFolder_OnCreate( hWnd, (browse_info*) lParam );
info = GetPropW( hWnd, szBrowseFolderInfo );
if (!info)
return FALSE;
switch (msg)
{

View File

@ -3843,7 +3843,7 @@ static HRESULT WINAPI TaskService_Connect(ITaskService *iface, VARIANT server, V
DWORD len;
HRESULT hr;
RPC_WSTR binding_str;
extern handle_t rpc_handle;
extern handle_t schrpc_handle;
TRACE("%p,%s,%s,%s,%s\n", iface, debugstr_variant(&server), debugstr_variant(&user),
debugstr_variant(&domain), debugstr_variant(&password));
@ -3882,7 +3882,7 @@ static HRESULT WINAPI TaskService_Connect(ITaskService *iface, VARIANT server, V
hr = RpcStringBindingComposeW(NULL, ncalrpc, NULL, NULL, NULL, &binding_str);
if (hr != RPC_S_OK) return hr;
hr = RpcBindingFromStringBindingW(binding_str, &rpc_handle);
hr = RpcBindingFromStringBindingW(binding_str, &schrpc_handle);
RpcStringFreeW(&binding_str);
if (hr != RPC_S_OK) return hr;

View File

@ -29,7 +29,9 @@
WINE_DEFAULT_DEBUG_CHANNEL(twain);
extern HINSTANCE DSM_hinstance;
TW_UINT16 DSM_twCC;
activeDS *activeSources;
HINSTANCE DSM_hinstance;
BOOL WINAPI DllMain (HINSTANCE hinstance, DWORD reason, LPVOID reserved)
{

View File

@ -45,11 +45,11 @@ typedef struct tagActiveDS
HWND event_window;
} activeDS;
TW_UINT16 DSM_twCC DECLSPEC_HIDDEN; /* current condition code of Source Manager */
extern TW_UINT16 DSM_twCC DECLSPEC_HIDDEN; /* current condition code of Source Manager */
activeDS *activeSources DECLSPEC_HIDDEN; /* list of active data sources */
extern activeDS *activeSources DECLSPEC_HIDDEN; /* list of active data sources */
HINSTANCE DSM_hinstance DECLSPEC_HIDDEN;
extern HINSTANCE DSM_hinstance DECLSPEC_HIDDEN;
/* Implementation of operation triplets (From Application to Source Manager) */
extern TW_UINT16 TWAIN_CloseDS

View File

@ -30,6 +30,8 @@ STRINGTABLE
39617 "Afghanistan Daylight Time"
50192 "Alaskan Standard Time"
50193 "Alaskan Daylight Time"
55200 "Aleutian Standard Time"
55201 "Aleutian Daylight Time"
41968 "Arab Standard Time"
41969 "Arab Daylight Time"
42704 "Arabian Standard Time"
@ -54,6 +56,8 @@ STRINGTABLE
48721 "Bangladesh Daylight Time"
56576 "Belarus Standard Time"
56577 "Belarus Daylight Time"
51968 "Bougainville Standard Time"
51969 "Bougainville Daylight Time"
25712 "Canada Central Standard Time"
25713 "Canada Central Daylight Time"
2000 "Cape Verde Standard Time"
@ -78,6 +82,8 @@ STRINGTABLE
17457 "Central Daylight Time"
32800 "Central Standard Time (Mexico)"
32801 "Central Daylight Time (Mexico)"
62304 "Chatham Islands Standard Time"
62305 "Chatham Islands Daylight Time"
160 "China Standard Time"
161 "China Daylight Time"
50384 "Dateline Standard Time"
@ -110,6 +116,8 @@ STRINGTABLE
47169 "Greenwich Daylight Time"
24192 "GTB Standard Time"
24193 "GTB Daylight Time"
2896 "Haiti Standard Time"
2897 "Haiti Daylight Time"
53376 "Hawaiian Standard Time"
53377 "Hawaiian Daylight Time"
22400 "India Standard Time"
@ -130,6 +138,8 @@ STRINGTABLE
16769 "Line Islands Daylight Time"
8832 "Magadan Standard Time"
8833 "Magadan Daylight Time"
20736 "Marquesas Standard Time"
20737 "Marquesas Daylight Time"
60896 "Mauritius Standard Time"
60897 "Mauritius Daylight Time"
15968 "Middle East Standard Time"

View File

@ -1856,8 +1856,8 @@
@ cdecl _putwch_nolock(long)
@ cdecl _putws(wstr) MSVCRT__putws
@ stub _query_app_type
@ stub _query_new_handler
@ stub _query_new_mode
@ cdecl _query_new_handler() MSVCRT__query_new_handler
@ cdecl _query_new_mode() MSVCRT__query_new_mode
@ cdecl _read(long ptr long) MSVCRT__read
@ cdecl _realloc_base(ptr long)
@ cdecl _recalloc(ptr long long)

View File

@ -358,3 +358,13 @@ HRESULT WINAPI URLOpenStreamW(LPUNKNOWN pCaller, LPCWSTR szURL, DWORD dwReserved
return hr;
}
/***********************************************************************
* URLOpenPullStreamW (URLMON.@)
*/
HRESULT WINAPI URLOpenPullStreamW(IUnknown *caller, const WCHAR *url, DWORD reserved,
IBindStatusCallback *callback)
{
FIXME("%p %s %u %p, stub!\n", caller, debugstr_w(url), reserved, callback);
return E_NOTIMPL;
}

View File

@ -88,7 +88,7 @@
@ stdcall URLOpenBlockingStreamA(ptr str ptr long ptr)
@ stdcall URLOpenBlockingStreamW(ptr wstr ptr long ptr)
@ stub URLOpenPullStreamA
@ stub URLOpenPullStreamW
@ stdcall URLOpenPullStreamW(ptr wstr long ptr)
@ stdcall URLOpenStreamA(ptr str long ptr)
@ stdcall URLOpenStreamW(ptr wstr long ptr)
@ stub UrlMkBuildVersion

View File

@ -1750,6 +1750,12 @@ static INT SCROLL_SetScrollInfo( HWND hwnd, INT nBar, LPCSCROLLINFO info, BOOL b
action |= SA_SSI_SHOW;
}
if (nBar == SB_CTL && bRedraw && IsWindowVisible(hwnd) &&
(new_flags == ESB_ENABLE_BOTH || new_flags == ESB_DISABLE_BOTH))
{
EnableWindow(hwnd, new_flags == ESB_ENABLE_BOTH);
}
if (infoPtr->flags != new_flags) /* check arrow flags */
{
infoPtr->flags = new_flags;

View File

@ -98,6 +98,7 @@ static void ClassTest(HINSTANCE hInstance, BOOL global)
LONG i;
WCHAR str[20];
ATOM classatom;
HINSTANCE hInstance2;
cls.style = CS_HREDRAW | CS_VREDRAW | (global?CS_GLOBALCLASS:0);
cls.lpfnWndProc = ClassTest_WndProc;
@ -121,6 +122,23 @@ static void ClassTest(HINSTANCE hInstance, BOOL global)
"RegisterClass of the same class should fail for the second time\n");
/* Setup windows */
hInstance2 = (HINSTANCE)(((ULONG_PTR)hInstance & ~0xffff) | 0xdead);
hTestWnd = CreateWindowW (className, winName,
WS_OVERLAPPEDWINDOW + WS_HSCROLL + WS_VSCROLL,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0,
0, hInstance2, 0);
ok(hTestWnd != 0, "Failed to create window for hInstance %p\n", hInstance2);
ok((HINSTANCE)GetClassLongPtrA(hTestWnd, GCLP_HMODULE) == hInstance,
"Wrong GCL instance %p != %p\n",
(HINSTANCE)GetClassLongPtrA(hTestWnd, GCLP_HMODULE), hInstance);
ok((HINSTANCE)GetWindowLongPtrA(hTestWnd, GWLP_HINSTANCE) == hInstance2,
"Wrong GWL instance %p != %p\n",
(HINSTANCE)GetWindowLongPtrA(hTestWnd, GWLP_HINSTANCE), hInstance2);
DestroyWindow(hTestWnd);
hTestWnd = CreateWindowW (className, winName,
WS_OVERLAPPEDWINDOW + WS_HSCROLL + WS_VSCROLL,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0,
@ -128,6 +146,14 @@ static void ClassTest(HINSTANCE hInstance, BOOL global)
ok(hTestWnd!=0, "Failed to create window\n");
ok((HINSTANCE)GetClassLongPtrA(hTestWnd, GCLP_HMODULE) == hInstance,
"Wrong GCL instance %p/%p\n",
(HINSTANCE)GetClassLongPtrA(hTestWnd, GCLP_HMODULE), hInstance);
ok((HINSTANCE)GetWindowLongPtrA(hTestWnd, GWLP_HINSTANCE) == hInstance,
"Wrong GWL instance %p/%p\n",
(HINSTANCE)GetWindowLongPtrA(hTestWnd, GWLP_HINSTANCE), hInstance);
/* test initial values of valid classwords */
for(i=0; i<NUMCLASSWORDS; i++)
{
@ -1491,6 +1517,8 @@ START_TEST(class)
ClassTest(hInstance,FALSE);
ClassTest(hInstance,TRUE);
ClassTest((HANDLE)((ULONG_PTR)hInstance | 0x1234), FALSE);
ClassTest((HANDLE)((ULONG_PTR)hInstance | 0x1234), TRUE);
CreateDialogParamTest(hInstance);
test_styles();
test_builtinproc();

View File

@ -634,7 +634,6 @@ static void test_SetScrollInfo(void)
si.nPage = 50;
SetScrollInfo(hScroll, SB_CTL, &si, TRUE);
ret = IsWindowEnabled(hScroll);
todo_wine
ok(ret, "Unexpected enabled state.\n");
si.fMask = SIF_POS|SIF_RANGE|SIF_PAGE|SIF_DISABLENOSCROLL;
@ -657,7 +656,6 @@ todo_wine
si.nPage = 100;
SetScrollInfo(hScroll, SB_CTL, &si, TRUE);
ret = IsWindowEnabled(hScroll);
todo_wine
ok(!ret, "Unexpected enabled state.\n");
EnableScrollBar(hScroll, SB_CTL, ESB_DISABLE_BOTH);
@ -671,7 +669,6 @@ todo_wine
si.nPage = 41;
SetScrollInfo(hScroll, SB_CTL, &si, TRUE);
ret = IsWindowEnabled(hScroll);
todo_wine
ok(ret, "Unexpected enabled state.\n");
DestroyWindow(hScroll);

View File

@ -30,6 +30,7 @@
#include "windef.h"
#include "wine/winbase16.h"
#include "winternl.h"
#include "winuser.h"
#include "winver.h"
#include "lzexpand.h"
#include "wine/debug.h"
@ -461,22 +462,23 @@ DWORD WINAPI GetFileResource16( LPCSTR lpszFileName, LPCSTR lpszResType,
/*************************************************************************
* GetFileVersionInfoSize [VER.6]
*/
DWORD WINAPI GetFileVersionInfoSize16( LPCSTR lpszFileName, LPDWORD lpdwHandle )
DWORD WINAPI GetFileVersionInfoSize16( LPCSTR filename, LPDWORD handle )
{
TRACE("(%s, %p)\n", debugstr_a(lpszFileName), lpdwHandle );
return GetFileVersionInfoSizeA( lpszFileName, lpdwHandle );
DWORD offset;
TRACE("(%s, %p)\n", debugstr_a(filename), handle );
return GetFileResourceSize16( filename, (LPCSTR)RT_VERSION, (LPCSTR)VS_VERSION_INFO, &offset );
}
/*************************************************************************
* GetFileVersionInfo [VER.7]
*/
DWORD WINAPI GetFileVersionInfo16( LPCSTR lpszFileName, DWORD handle,
DWORD cbBuf, LPVOID lpvData )
DWORD WINAPI GetFileVersionInfo16( LPCSTR filename, DWORD handle, DWORD datasize, LPVOID data )
{
TRACE("(%s, %08x, %d, %p)\n",
debugstr_a(lpszFileName), handle, cbBuf, lpvData );
TRACE("(%s, %08x, %d, %p)\n", debugstr_a(filename), handle, datasize, data );
return GetFileVersionInfoA( lpszFileName, handle, cbBuf, lpvData );
return GetFileResource16( filename, (LPCSTR)RT_VERSION, (LPCSTR)VS_VERSION_INFO, 0, datasize, data );
}
/*************************************************************************

View File

@ -543,6 +543,7 @@ static const struct column col_datafile[] =
};
static const struct column col_desktopmonitor[] =
{
{ prop_nameW, CIM_STRING },
{ prop_pixelsperxlogicalinchW, CIM_UINT32 }
};
static const struct column col_directory[] =
@ -1022,6 +1023,7 @@ struct record_datafile
};
struct record_desktopmonitor
{
const WCHAR *name;
UINT32 pixelsperxlogicalinch;
};
struct record_directory
@ -2413,6 +2415,7 @@ static enum fill_status fill_desktopmonitor( struct table *table, const struct e
if (!resize_table( table, 1, sizeof(*rec) )) return FILL_STATUS_FAILED;
rec = (struct record_desktopmonitor *)table->data;
rec->name = L"Generic Non-PnP Monitor";
rec->pixelsperxlogicalinch = get_pixelsperxlogicalinch();
if (match_row( table, row, cond, &status )) row++;

View File

@ -35,6 +35,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
static HINSTANCE instance;
struct list *table_list;
typedef HRESULT (*fnCreateInstance)( LPVOID *ppObj );
typedef struct

View File

@ -1710,6 +1710,32 @@ static void test_Win32_WinSAT( IWbemServices *services )
SysFreeString( wql );
}
static void test_Win32_DesktopMonitor( IWbemServices *services )
{
BSTR wql = SysAllocString( wqlW ), query = SysAllocString( L"SELECT * FROM Win32_DesktopMonitor" );
IEnumWbemClassObject *result;
IWbemClassObject *obj;
HRESULT hr;
DWORD count;
hr = IWbemServices_ExecQuery( services, wql, query, 0, NULL, &result );
ok( hr == S_OK, "got %08x\n", hr );
for (;;)
{
hr = IEnumWbemClassObject_Next( result, 10000, 1, &obj, &count );
if (hr != S_OK) break;
check_property( obj, L"Name", VT_BSTR, CIM_STRING );
check_property( obj, L"PixelsPerXlogicalInch", VT_I4, CIM_UINT32 );
IWbemClassObject_Release( obj );
}
IEnumWbemClassObject_Release( result );
SysFreeString( query );
SysFreeString( wql );
}
static void test_Win32_DisplayControllerConfiguration( IWbemServices *services )
{
static const WCHAR bitsperpixelW[] =
@ -1835,6 +1861,7 @@ START_TEST(query)
test_Win32_ComputerSystem( services );
test_Win32_ComputerSystemProduct( services );
test_Win32_Bios( services );
test_Win32_DesktopMonitor( services );
test_Win32_DisplayControllerConfiguration( services );
test_Win32_IP4RouteTable( services );
test_Win32_OperatingSystem( services );

View File

@ -20,8 +20,8 @@
#include "wine/heap.h"
#include "wine/list.h"
IClientSecurity client_security DECLSPEC_HIDDEN;
struct list *table_list DECLSPEC_HIDDEN;
extern IClientSecurity client_security DECLSPEC_HIDDEN;
extern struct list *table_list DECLSPEC_HIDDEN;
enum param_direction
{

View File

@ -18,7 +18,7 @@
#include "winhttp.h"
_locale_t c_locale DECLSPEC_HIDDEN;
extern _locale_t c_locale DECLSPEC_HIDDEN;
#define STREAM_BUFSIZE 4096
@ -50,8 +50,8 @@ struct dictionary
ULONG current_sequence;
ULONG *sequence;
};
struct dictionary dict_builtin DECLSPEC_HIDDEN;
const struct dictionary dict_builtin_static DECLSPEC_HIDDEN;
extern struct dictionary dict_builtin DECLSPEC_HIDDEN;
extern const struct dictionary dict_builtin_static DECLSPEC_HIDDEN;
int find_string( const struct dictionary *, const unsigned char *, ULONG, ULONG * ) DECLSPEC_HIDDEN;
HRESULT insert_string( struct dictionary *, unsigned char *, ULONG, int, ULONG * ) DECLSPEC_HIDDEN;

View File

@ -54,5 +54,5 @@ DEVICE_OBJECT* bus_enumerate_hid_devices(const platform_vtbl *vtbl, enum_func fu
DWORD check_bus_option(const UNICODE_STRING *option, DWORD default_value) DECLSPEC_HIDDEN;
BOOL is_xbox_gamepad(WORD vid, WORD pid) DECLSPEC_HIDDEN;
HANDLE driver_key DECLSPEC_HIDDEN;
DEVICE_OBJECT *bus_pdo DECLSPEC_HIDDEN;
extern HANDLE driver_key DECLSPEC_HIDDEN;
extern DEVICE_OBJECT *bus_pdo DECLSPEC_HIDDEN;

View File

@ -1359,11 +1359,14 @@ cards_nvidia_binary[] =
{"RTX 2070", CARD_NVIDIA_GEFORCE_RTX2070}, /* GeForce 2000 - highend */
{"RTX 2060", CARD_NVIDIA_GEFORCE_RTX2060}, /* GeForce 2000 - highend */
{"GTX 1660 Ti", CARD_NVIDIA_GEFORCE_GTX1660TI}, /* GeForce 1600 - highend */
{"GTX 1660 SUPER", CARD_NVIDIA_GEFORCE_GTX1660SUPER}, /* GeForce 1600 - highend */
{"GTX 1650 SUPER", CARD_NVIDIA_GEFORCE_GTX1650SUPER}, /* GeForce 1600 - midend high */
{"TITAN V", CARD_NVIDIA_TITANV}, /* GeForce 1000 - highend */
{"TITAN X (Pascal)", CARD_NVIDIA_TITANX_PASCAL}, /* GeForce 1000 - highend */
{"GTX 1080 Ti", CARD_NVIDIA_GEFORCE_GTX1080TI}, /* GeForce 1000 - highend */
{"GTX 1080", CARD_NVIDIA_GEFORCE_GTX1080}, /* GeForce 1000 - highend */
{"GTX 1070", CARD_NVIDIA_GEFORCE_GTX1070}, /* GeForce 1000 - highend */
{"GTX 1060 3GB", CARD_NVIDIA_GEFORCE_GTX1060_3GB},/* GeForce 1000 - midend high */
{"GTX 1060", CARD_NVIDIA_GEFORCE_GTX1060}, /* GeForce 1000 - midend high */
{"GTX 1050 Ti", CARD_NVIDIA_GEFORCE_GTX1050TI}, /* GeForce 1000 - midend */
{"GTX 1050", CARD_NVIDIA_GEFORCE_GTX1050}, /* GeForce 1000 - midend */
@ -4848,7 +4851,7 @@ static void wined3d_view_gl_destroy(struct wined3d_device *device,
ctx->free = ctx != &c ? ctx : NULL;
wined3d_cs_destroy_object(device->cs, wined3d_view_gl_destroy_object, ctx);
if (!ctx->free)
if (ctx == &c)
device->cs->ops->finish(device->cs, WINED3D_CS_QUEUE_DEFAULT);
}

View File

@ -414,12 +414,15 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX980TI, "NVIDIA GeForce GTX 980 Ti", DRIVER_NVIDIA_GEFORCE8, 6144},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1050, "NVIDIA GeForce GTX 1050", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1050TI, "NVIDIA GeForce GTX 1050 Ti", DRIVER_NVIDIA_GEFORCE8, 4096},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1060_3GB,"NVIDIA GeForce GTX 1060 3GB", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1060, "NVIDIA GeForce GTX 1060", DRIVER_NVIDIA_GEFORCE8, 6144},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1070, "NVIDIA GeForce GTX 1070", DRIVER_NVIDIA_GEFORCE8, 8192},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1080, "NVIDIA GeForce GTX 1080", DRIVER_NVIDIA_GEFORCE8, 8192},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1080TI, "NVIDIA GeForce GTX 1080 Ti", DRIVER_NVIDIA_GEFORCE8, 11264},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_TITANX_PASCAL, "NVIDIA TITAN X (Pascal)", DRIVER_NVIDIA_GEFORCE8, 12288},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_TITANV, "NVIDIA TITAN V", DRIVER_NVIDIA_GEFORCE8, 12288},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1650SUPER,"NVIDIA GeForce GTX 1650 SUPER", DRIVER_NVIDIA_GEFORCE8, 4096},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1660SUPER,"NVIDIA GeForce GTX 1660 SUPER", DRIVER_NVIDIA_GEFORCE8, 6144},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1660TI, "NVIDIA GeForce GTX 1660 Ti", DRIVER_NVIDIA_GEFORCE8, 6144},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX2060, "NVIDIA GeForce RTX 2060", DRIVER_NVIDIA_GEFORCE8, 6144},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX2070, "NVIDIA GeForce RTX 2070", DRIVER_NVIDIA_GEFORCE8, 8192},

View File

@ -1459,10 +1459,10 @@ void CDECL wined3d_stateblock_set_texture_stage_state(struct wined3d_stateblock
return;
}
if (stage > WINED3D_MAX_TEXTURES)
if (stage >= WINED3D_MAX_TEXTURES)
{
WARN("Attempting to set stage %u which is higher than the max stage %u, ignoring.\n",
stage, WINED3D_MAX_TEXTURES);
stage, WINED3D_MAX_TEXTURES - 1);
return;
}

View File

@ -1490,15 +1490,15 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
| WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B5G6R5_UNORM, GL_RGB5, GL_RGB5, GL_RGB8,
{WINED3DFMT_B5G6R5_UNORM, GL_RGB5, GL_SRGB8_EXT, GL_RGB8,
GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 0,
WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
| WINED3DFMT_FLAG_RENDERTARGET,
| WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B5G6R5_UNORM, GL_RGB565, GL_RGB565, GL_RGB8,
{WINED3DFMT_B5G6R5_UNORM, GL_RGB565, GL_SRGB8_EXT, GL_RGB8,
GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 0,
WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
| WINED3DFMT_FLAG_RENDERTARGET,
| WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ,
ARB_ES2_COMPATIBILITY, NULL},
{WINED3DFMT_B5G5R5X1_UNORM, GL_RGB5, GL_RGB5, 0,
GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0,

View File

@ -2540,12 +2540,15 @@ enum wined3d_pci_device
CARD_NVIDIA_GEFORCE_GTX980TI = 0x17c8,
CARD_NVIDIA_GEFORCE_GTX1050 = 0x1c81,
CARD_NVIDIA_GEFORCE_GTX1050TI = 0x1c82,
CARD_NVIDIA_GEFORCE_GTX1060_3GB = 0x1c02,
CARD_NVIDIA_GEFORCE_GTX1060 = 0x1c03,
CARD_NVIDIA_GEFORCE_GTX1070 = 0x1b81,
CARD_NVIDIA_GEFORCE_GTX1080 = 0x1b80,
CARD_NVIDIA_GEFORCE_GTX1080TI = 0x1b06,
CARD_NVIDIA_TITANX_PASCAL = 0x1b00,
CARD_NVIDIA_TITANV = 0x1d81,
CARD_NVIDIA_GEFORCE_GTX1650SUPER= 0x2187,
CARD_NVIDIA_GEFORCE_GTX1660SUPER= 0x21c4,
CARD_NVIDIA_GEFORCE_GTX1660TI = 0x2182,
CARD_NVIDIA_GEFORCE_RTX2060 = 0x1f08,
CARD_NVIDIA_GEFORCE_RTX2070 = 0x1f07,

View File

@ -208,6 +208,9 @@ static void macdrv_surface_destroy(struct window_surface *window_surface)
struct macdrv_window_surface *surface = get_mac_surface(window_surface);
TRACE("freeing %p bits %p\n", surface, surface->bits);
if (surface->region) DeleteObject(surface->region);
if (surface->drawn) DeleteObject(surface->drawn);
HeapFree(GetProcessHeap(), 0, surface->blit_data);
HeapFree(GetProcessHeap(), 0, surface->bits);
pthread_mutex_destroy(&surface->mutex);
HeapFree(GetProcessHeap(), 0, surface);

View File

@ -26,8 +26,8 @@ typedef struct _xinput_controller
XINPUT_VIBRATION vibration;
} xinput_controller;
CRITICAL_SECTION xinput_crit;
xinput_controller controllers[XUSER_MAX_COUNT];
extern CRITICAL_SECTION xinput_crit;
extern xinput_controller controllers[XUSER_MAX_COUNT];
void HID_find_gamepads(xinput_controller *devices) DECLSPEC_HIDDEN;
void HID_destroy_gamepads(xinput_controller *devices) DECLSPEC_HIDDEN;

View File

@ -137,20 +137,20 @@ typedef enum
typedef enum
{
BM_x555RGB = 0x00,
BM_565RGB = 0x01,
BM_RGBTRIPLETS = 0x02,
BM_BGRTRIPLETS = 0x04,
BM_xRGBQUADS = 0x08,
BM_10b_RGB = 0x09,
BM_16b_RGB = 0x0a,
BM_xBGRQUADS = 0x10,
BM_CMYKQUADS = 0x20,
BM_x555XYZ = 0x101,
BM_x555RGB = 0x0000,
BM_565RGB = 0x0001,
BM_RGBTRIPLETS = 0x0002,
BM_BGRTRIPLETS = 0x0004,
BM_xRGBQUADS = 0x0008,
BM_10b_RGB = 0x0009,
BM_16b_RGB = 0x000a,
BM_xBGRQUADS = 0x0010,
BM_CMYKQUADS = 0x0020,
BM_x555XYZ = 0x0101,
BM_x555Yxz,
BM_x555Lab,
BM_x555G3CH,
BM_XYZTRIPLETS = 0x201,
BM_XYZTRIPLETS = 0x0201,
BM_YxyTRIPLETS,
BM_LabTRIPLETS,
BM_G3CHTRIPLETS,
@ -159,21 +159,28 @@ typedef enum
BM_7CHANNEL,
BM_8CHANNEL,
BM_GRAY,
BM_xXYZQUADS = 0x301,
BM_xXYZQUADS = 0x0301,
BM_xYxyQUADS,
BM_xLabQUADS,
BM_xG3CHQUADS,
BM_KYMCQUADS,
BM_10b_XYZ = 0x401,
BM_10b_XYZ = 0x0401,
BM_10b_Yxy,
BM_10b_Lab,
BM_10b_G3CH,
BM_NAMED_INDEX,
BM_16b_XYZ = 0x501,
BM_16b_XYZ = 0x0501,
BM_16b_Yxy,
BM_16b_Lab,
BM_16b_G3CH,
BM_16b_GRAY,
BM_32b_scRGB = 0x0601,
BM_32b_scARGB,
BM_S2DOT13FIXED_scRGB,
BM_S2DOT13FIXED_scARGB,
BM_R10G10B10A2 = 0x0701,
BM_R10G10B10A2_XR,
BM_R16G16B16A16_FLOAT
} BMFORMAT, *PBMFORMAT, *LPBMFORMAT;
typedef enum
@ -182,6 +189,36 @@ typedef enum
WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER
} WCS_PROFILE_MANAGEMENT_SCOPE;
#define DONT_USE_EMBEDDED_WCS_PROFILES 0x00000001
#define PROOF_MODE 0x00000001
#define NORMAL_MODE 0x00000002
#define BEST_MODE 0x00000003
#define ENABLE_GAMUT_CHECKING 0x00010000
#define USE_RELATIVE_COLORIMETRIC 0x00020000
#define FAST_TRANSLATE 0x00040000
#define PRESERVEBLACK 0x00100000
#define WCS_ALWAYS 0x00200000
#define RESERVED 0x80000000
#define SEQUENTIAL_TRANSFORM 0x80800000
#define CSA_A 1
#define CSA_ABC 2
#define CSA_DEF 3
#define CSA_DEFG 4
#define CSA_GRAY 5
#define CSA_RGB 6
#define CSA_CMYK 7
#define CSA_Lab 8
#define CMM_WIN_VERSION 0
#define CMM_IDENT 1
#define CMM_DRIVER_VERSION 2
#define CMM_DLL_VERSION 3
#define CMM_VERSION 4
#define CMM_DESCRIPTION 5
#define CMM_LOGOICON 6
typedef BOOL (CALLBACK *PBMCALLBACKFN)(ULONG,ULONG,LPARAM);
typedef PBMCALLBACKFN LPPBMCALLBACKFN;
@ -190,6 +227,38 @@ typedef PBMCALLBACKFN LPPBMCALLBACKFN;
#define INTENT_SATURATION 2
#define INTENT_ABSOLUTE_COLORIMETRIC 3
typedef enum
{
CPT_ICC,
CPT_DMP,
CPT_CAMP,
CPT_GMMP
} COLORPROFILETYPE, *PCOLORPROFILETYPE, *LPCOLORPROFILETYPE;
typedef enum
{
CPST_PERCEPTUAL = INTENT_PERCEPTUAL,
CPST_RELATIVE_COLORIMETRIC = INTENT_RELATIVE_COLORIMETRIC,
CPST_SATURATION = INTENT_SATURATION,
CPST_ABSOLUTE_COLORIMETRIC = INTENT_ABSOLUTE_COLORIMETRIC,
CPST_NONE,
CPST_RGB_WORKING_SPACE,
CPST_CUSTOM_WORKING_SPACE,
CPST_STANDARD_DISPLAY_COLOR_MODE,
CPST_EXTENDED_DISPLAY_COLOR_MODE
} COLORPROFILESUBTYPE, *PCOLORPROFILESUBTYPE, *LPCOLORPROFILESUBTYPE;
typedef enum
{
COLOR_BYTE = 1,
COLOR_WORD,
COLOR_FLOAT,
COLOR_S2DOT13FIXED,
COLOR_10b_R10G10B10A2,
COLOR_10b_R10G10B10A2_XR,
COLOR_FLOAT16
} COLORDATATYPE, *PCOLORDATATYPE, *LPCOLORDATATYPE;
typedef struct tagPROFILEHEADER
{
DWORD phSize;
@ -268,23 +337,43 @@ typedef struct tagENUMTYPEW
DWORD dwDeviceClass;
} ENUMTYPEW, *PENUMTYPEW, *LPENUMTYPEW;
#define ET_DEVICENAME 0x00000001
#define ET_MEDIATYPE 0x00000002
#define ET_DITHERMODE 0x00000004
#define ET_RESOLUTION 0x00000008
#define ET_CMMTYPE 0x00000010
#define ET_CLASS 0x00000020
#define ET_DATACOLORSPACE 0x00000040
#define ET_CONNECTIONSPACE 0x00000080
#define ET_SIGNATURE 0x00000100
#define ET_PLATFORM 0x00000200
#define ET_PROFILEFLAGS 0x00000400
#define ET_MANUFACTURER 0x00000800
#define ET_MODEL 0x00001000
#define ET_ATTRIBUTES 0x00002000
#define ET_RENDERINGINTENT 0x00004000
#define ET_CREATOR 0x00008000
#define ET_DEVICECLASS 0x00010000
#define ET_DEVICENAME 0x00000001
#define ET_MEDIATYPE 0x00000002
#define ET_DITHERMODE 0x00000004
#define ET_RESOLUTION 0x00000008
#define ET_CMMTYPE 0x00000010
#define ET_CLASS 0x00000020
#define ET_DATACOLORSPACE 0x00000040
#define ET_CONNECTIONSPACE 0x00000080
#define ET_SIGNATURE 0x00000100
#define ET_PLATFORM 0x00000200
#define ET_PROFILEFLAGS 0x00000400
#define ET_MANUFACTURER 0x00000800
#define ET_MODEL 0x00001000
#define ET_ATTRIBUTES 0x00002000
#define ET_RENDERINGINTENT 0x00004000
#define ET_CREATOR 0x00008000
#define ET_DEVICECLASS 0x00010000
#define ET_STANDARDDISPLAYCOLOR 0x00020000
#define ET_EXTENDEDDISPLAYCOLOR 0x00040000
#define COLOR_MATCH_VERSION 0x0200
#define CMS_DISABLEICM 0x00000001
#define CMS_ENABLEPROOFING 0x00000002
#define CMS_SETRENDERINTENT 0x00000004
#define CMS_SETPROOFINTENT 0x00000008
#define CMS_SETMONITORPROFILE 0x00000010
#define CMS_SETPRINTERPROFILE 0x00000020
#define CMS_SETTARGETPROFILE 0x00000040
#define CMS_USEHOOK 0x00000080
#define CMS_USEAPPLYCALLBACK 0x00000100
#define CMS_USEDESCRIPTION 0x00000200
#define CMS_DISABLEINTENT 0x00000400
#define CMS_DISABLERENDERINTENT 0x00000800
#define CMS_TARGETOVERFLOW 0x20000000
#define CMS_PRINTERROVERFLOW 0x40000000
#define CMS_MONITOROVERFLOW 0x80000000
struct _tagCOLORMATCHSETUPA;
struct _tagCOLORMATCHSETUPW;
@ -410,6 +499,8 @@ BOOL WINAPI UnregisterCMMA(PCSTR,DWORD);
BOOL WINAPI UnregisterCMMW(PCWSTR,DWORD);
#define UnregisterCMM WINELIB_NAME_AW(UnregisterCMM)
BOOL WINAPI WcsEnumColorProfilesSize(WCS_PROFILE_MANAGEMENT_SCOPE,ENUMTYPEW*,DWORD*);
BOOL WINAPI WcsGetDefaultColorProfileSize(WCS_PROFILE_MANAGEMENT_SCOPE,const WCHAR*,COLORPROFILETYPE,COLORPROFILESUBTYPE,DWORD,DWORD*);
BOOL WINAPI WcsGetDefaultRenderingIntent(WCS_PROFILE_MANAGEMENT_SCOPE,DWORD*);
BOOL WINAPI WcsGetUsePerUserProfiles(const WCHAR*,DWORD,BOOL*);
HPROFILE WINAPI WcsOpenColorProfileA(PROFILE*,PROFILE*,PROFILE*,DWORD,DWORD,DWORD,DWORD);
HPROFILE WINAPI WcsOpenColorProfileW(PROFILE*,PROFILE*,PROFILE*,DWORD,DWORD,DWORD,DWORD);
@ -420,6 +511,23 @@ HPROFILE WINAPI WcsOpenColorProfileW(PROFILE*,PROFILE*,PROFILE*,DWORD,DWORD,DW
#define PROFILE_READ 1
#define PROFILE_READWRITE 2
#define FLAG_EMBEDDEDPROFILE 0x00000001
#define FLAG_DEPENDENTONDATA 0x00000002
#define FLAG_ENABLE_CHROMATIC_ADAPTATION 0x02000000
#define ATTRIB_TRANSPARENCY 0x00000001
#define ATTRIB_MATTE 0x00000002
#define CLASS_MONITOR 0x6D6E7472 /* 'mntr' */
#define CLASS_PRINTER 0x70727472 /* 'prtr' */
#define CLASS_SCANNER 0x73636E72 /* 'scnr' */
#define CLASS_LINK 0x6C696E6B /* 'link' */
#define CLASS_ABSTRACT 0x61627374 /* 'abst' */
#define CLASS_COLORSPACE 0x73617063 /* 'spac' */
#define CLASS_NAMED 0x6E6D636C /* 'nmcl' */
#define CLASS_CAMP 0x63616D70 /* 'camp' */
#define CLASS_GMMP 0x676D6D70 /* 'gmmp' */
#define SPACE_XYZ 0x58595A20 /* 'XYZ ' */
#define SPACE_Lab 0x4C616220 /* 'Lab ' */
#define SPACE_Luv 0x4C757620 /* 'Luv ' */

View File

@ -430,12 +430,12 @@ typedef [uuid(00000574-0000-0010-8000-00aa006d2ea4)] enum CopyRecordOptionsEnum
typedef [uuid(00000570-0000-0010-8000-00aa006d2ea4)] enum RecordCreateOptionsEnum
{
adCreateCollection = 0x00002000,
adCreateStructDoc = 0x80000000,
adCreateNonCollection = 0x00000000,
adOpenIfExists = 0x02000000,
adCreateOverwrite = 0x04000000,
adFailIfNotExists = -1
adCreateCollection = (int) 0x00002000,
adCreateStructDoc = (int) 0x80000000,
adCreateNonCollection = (int) 0x00000000,
adOpenIfExists = (int) 0x02000000,
adCreateOverwrite = (int) 0x04000000,
adFailIfNotExists = (int) -1
} RecordCreateOptionsEnum;
typedef [uuid(00000571-0000-0010-8000-00aa006d2ea4)] enum RecordOpenOptionsEnum

View File

@ -25,185 +25,185 @@ cpp_quote("#endif")
typedef enum tagTomConstants
{
tomFalse = 0,
tomTrue = -1,
tomUndefined = -9999999,
tomToggle = -9999998,
tomAutoColor = -9999997,
tomDefault = -9999996,
tomSuspend = -9999995,
tomResume = -9999994,
tomFalse = (int) 0,
tomTrue = (int) -1,
tomUndefined = (int) -9999999,
tomToggle = (int) -9999998,
tomAutoColor = (int) -9999997,
tomDefault = (int) -9999996,
tomSuspend = (int) -9999995,
tomResume = (int) -9999994,
/* ITextFont::Reset() modes */
tomApplyNow = 0,
tomApplyLater = 1,
tomTrackParms = 2,
tomCacheParms = 3,
tomApplyTmp = 4,
tomDisableSmartFont = 8,
tomEnableSmartFont = 9,
tomUsePoints = 10,
tomUseTwips = 11,
tomApplyNow = (int) 0,
tomApplyLater = (int) 1,
tomTrackParms = (int) 2,
tomCacheParms = (int) 3,
tomApplyTmp = (int) 4,
tomDisableSmartFont = (int) 8,
tomEnableSmartFont = (int) 9,
tomUsePoints = (int) 10,
tomUseTwips = (int) 11,
tomBackward = 0xc0000001,
tomForward = 0x3fffffff,
tomMove = 0,
tomExtend = 1,
tomNoSelection = 0,
tomSelectionIP = 1,
tomSelectionNormal = 2,
tomSelectionFrame = 3,
tomSelectionColumn = 4,
tomSelectionRow = 5,
tomSelectionBlock = 6,
tomSelectionInlineShape = 7,
tomSelectionShape = 8,
tomSelStartActive = 1,
tomSelAtEOL = 2,
tomSelOvertype = 4,
tomSelActive = 8,
tomSelReplace = 16,
tomEnd = 0,
tomStart = 32,
tomCollapseEnd = 0,
tomCollapseStart = 1,
tomClientCoord = 256,
tomNone = 0,
tomSingle = 1,
tomWords = 2,
tomDouble = 3,
tomDotted = 4,
tomDash = 5,
tomDashDot = 6,
tomDashDotDot = 7,
tomWave = 8,
tomThick = 9,
tomHair = 10,
tomLineSpaceSingle = 0,
tomLineSpace1pt5 = 1,
tomLineSpaceDouble = 2,
tomLineSpaceAtLeast = 3,
tomLineSpaceExactly = 4,
tomLineSpaceMultiple = 5,
tomAlignLeft = 0,
tomAlignCenter = 1,
tomAlignRight = 2,
tomAlignJustify = 3,
tomAlignDecimal = 3,
tomAlignBar = 4,
tomAlignInterWord = 3,
tomAlignInterLetter = 4,
tomAlignScaled = 5,
tomAlignGlyphs = 6,
tomAlignSnapGrid = 7,
tomSpaces = 0,
tomDots = 1,
tomDashes = 2,
tomLines = 3,
tomThickLines = 4,
tomEquals = 5,
tomTabBack = -3,
tomTabNext = -2,
tomTabHere = -1,
tomListBullet = 1,
tomListNumberAsArabic = 2,
tomListNumberAsLCLetter = 3,
tomListNumberAsUCLetter = 4,
tomListNumberAsLCRoman = 5,
tomListNumberAsUCRoman = 6,
tomListNumberAsSequence = 7,
tomListParentheses = 0x10000,
tomListPeriod = 0x20000,
tomListPlain = 0x30000,
tomCharacter = 1,
tomWord = 2,
tomSentence = 3,
tomParagraph = 4,
tomLine = 5,
tomStory = 6,
tomScreen = 7,
tomSection = 8,
tomColumn = 9,
tomRow = 10,
tomWindow = 11,
tomCell = 12,
tomCharFormat = 13,
tomParaFormat = 14,
tomTable = 15,
tomObject = 16,
tomMatchWord = 2,
tomMatchCase = 4,
tomMatchPattern = 8,
tomBackward = (int) 0xc0000001,
tomForward = (int) 0x3fffffff,
tomMove = (int) 0,
tomExtend = (int) 1,
tomNoSelection = (int) 0,
tomSelectionIP = (int) 1,
tomSelectionNormal = (int) 2,
tomSelectionFrame = (int) 3,
tomSelectionColumn = (int) 4,
tomSelectionRow = (int) 5,
tomSelectionBlock = (int) 6,
tomSelectionInlineShape = (int) 7,
tomSelectionShape = (int) 8,
tomSelStartActive = (int) 1,
tomSelAtEOL = (int) 2,
tomSelOvertype = (int) 4,
tomSelActive = (int) 8,
tomSelReplace = (int) 16,
tomEnd = (int) 0,
tomStart = (int) 32,
tomCollapseEnd = (int) 0,
tomCollapseStart = (int) 1,
tomClientCoord = (int) 256,
tomNone = (int) 0,
tomSingle = (int) 1,
tomWords = (int) 2,
tomDouble = (int) 3,
tomDotted = (int) 4,
tomDash = (int) 5,
tomDashDot = (int) 6,
tomDashDotDot = (int) 7,
tomWave = (int) 8,
tomThick = (int) 9,
tomHair = (int) 10,
tomLineSpaceSingle = (int) 0,
tomLineSpace1pt5 = (int) 1,
tomLineSpaceDouble = (int) 2,
tomLineSpaceAtLeast = (int) 3,
tomLineSpaceExactly = (int) 4,
tomLineSpaceMultiple = (int) 5,
tomAlignLeft = (int) 0,
tomAlignCenter = (int) 1,
tomAlignRight = (int) 2,
tomAlignJustify = (int) 3,
tomAlignDecimal = (int) 3,
tomAlignBar = (int) 4,
tomAlignInterWord = (int) 3,
tomAlignInterLetter = (int) 4,
tomAlignScaled = (int) 5,
tomAlignGlyphs = (int) 6,
tomAlignSnapGrid = (int) 7,
tomSpaces = (int) 0,
tomDots = (int) 1,
tomDashes = (int) 2,
tomLines = (int) 3,
tomThickLines = (int) 4,
tomEquals = (int) 5,
tomTabBack = (int) -3,
tomTabNext = (int) -2,
tomTabHere = (int) -1,
tomListBullet = (int) 1,
tomListNumberAsArabic = (int) 2,
tomListNumberAsLCLetter = (int) 3,
tomListNumberAsUCLetter = (int) 4,
tomListNumberAsLCRoman = (int) 5,
tomListNumberAsUCRoman = (int) 6,
tomListNumberAsSequence = (int) 7,
tomListParentheses = (int) 0x10000,
tomListPeriod = (int) 0x20000,
tomListPlain = (int) 0x30000,
tomCharacter = (int) 1,
tomWord = (int) 2,
tomSentence = (int) 3,
tomParagraph = (int) 4,
tomLine = (int) 5,
tomStory = (int) 6,
tomScreen = (int) 7,
tomSection = (int) 8,
tomColumn = (int) 9,
tomRow = (int) 10,
tomWindow = (int) 11,
tomCell = (int) 12,
tomCharFormat = (int) 13,
tomParaFormat = (int) 14,
tomTable = (int) 15,
tomObject = (int) 16,
tomMatchWord = (int) 2,
tomMatchCase = (int) 4,
tomMatchPattern = (int) 8,
/* ITextRange story type values */
tomUnknownStory = 0,
tomMainTextStory = 1,
tomFootnotesStory = 2,
tomEndnotesStory = 3,
tomCommentsStory = 4,
tomTextFrameStory = 5,
tomEvenPagesHeaderStory = 6,
tomPrimaryHeaderStory = 7,
tomEvenPagesFooterStory = 8,
tomPrimaryFooterStory = 9,
tomFirstPageHeaderStory = 10,
tomFirstPageFooterStory = 11,
tomUnknownStory = (int) 0,
tomMainTextStory = (int) 1,
tomFootnotesStory = (int) 2,
tomEndnotesStory = (int) 3,
tomCommentsStory = (int) 4,
tomTextFrameStory = (int) 5,
tomEvenPagesHeaderStory = (int) 6,
tomPrimaryHeaderStory = (int) 7,
tomEvenPagesFooterStory = (int) 8,
tomPrimaryFooterStory = (int) 9,
tomFirstPageHeaderStory = (int) 10,
tomFirstPageFooterStory = (int) 11,
/* ITextFont animation property */
tomNoAnimation = 0,
tomLasVegasLights = 1,
tomBlinkingBackground = 2,
tomSparkleText = 3,
tomMarchingBlackAnts = 4,
tomMarchingRedAnts = 5,
tomShimmer = 6,
tomWipeDown = 7,
tomWipeRight = 8,
tomAnimationMax = 8,
tomNoAnimation = (int) 0,
tomLasVegasLights = (int) 1,
tomBlinkingBackground = (int) 2,
tomSparkleText = (int) 3,
tomMarchingBlackAnts = (int) 4,
tomMarchingRedAnts = (int) 5,
tomShimmer = (int) 6,
tomWipeDown = (int) 7,
tomWipeRight = (int) 8,
tomAnimationMax = (int) 8,
tomLowerCase = 0,
tomUpperCase = 1,
tomTitleCase = 2,
tomSentenceCase = 4,
tomToggleCase = 5,
tomReadOnly = 0x100,
tomShareDenyRead = 0x200,
tomShareDenyWrite = 0x400,
tomPasteFile = 0x1000,
tomCreateNew = 0x10,
tomCreateAlways = 0x20,
tomOpenExisting = 0x30,
tomOpenAlways = 0x40,
tomTruncateExisting = 0x50,
tomRTF = 0x1,
tomText = 0x2,
tomHTML = 0x3,
tomWordDocument = 0x4,
tomBold = 0x80000001,
tomItalic = 0x80000002,
tomUnderline = 0x80000004,
tomStrikeout = 0x80000008,
tomProtected = 0x80000010,
tomLink = 0x80000020,
tomSmallCaps = 0x80000040,
tomAllCaps = 0x80000080,
tomHidden = 0x80000100,
tomOutline = 0x80000200,
tomShadow = 0x80000400,
tomEmboss = 0x80000800,
tomImprint = 0x80001000,
tomDisabled = 0x80002000,
tomRevised = 0x80004000,
tomNormalCaret = 0,
tomKoreanBlockCaret = 0x1,
tomIncludeInset = 0x1,
tomIgnoreCurrentFont = 0,
tomMatchFontCharset = 0x1,
tomMatchFontSignature = 0x2,
tomCharset = 0x80000000,
tomRE10Mode = 0x1,
tomNoIME = 0x80000,
tomSelfIME = 0x40000
tomLowerCase = (int) 0,
tomUpperCase = (int) 1,
tomTitleCase = (int) 2,
tomSentenceCase = (int) 4,
tomToggleCase = (int) 5,
tomReadOnly = (int) 0x100,
tomShareDenyRead = (int) 0x200,
tomShareDenyWrite = (int) 0x400,
tomPasteFile = (int) 0x1000,
tomCreateNew = (int) 0x10,
tomCreateAlways = (int) 0x20,
tomOpenExisting = (int) 0x30,
tomOpenAlways = (int) 0x40,
tomTruncateExisting = (int) 0x50,
tomRTF = (int) 0x1,
tomText = (int) 0x2,
tomHTML = (int) 0x3,
tomWordDocument = (int) 0x4,
tomBold = (int) 0x80000001,
tomItalic = (int) 0x80000002,
tomUnderline = (int) 0x80000004,
tomStrikeout = (int) 0x80000008,
tomProtected = (int) 0x80000010,
tomLink = (int) 0x80000020,
tomSmallCaps = (int) 0x80000040,
tomAllCaps = (int) 0x80000080,
tomHidden = (int) 0x80000100,
tomOutline = (int) 0x80000200,
tomShadow = (int) 0x80000400,
tomEmboss = (int) 0x80000800,
tomImprint = (int) 0x80001000,
tomDisabled = (int) 0x80002000,
tomRevised = (int) 0x80004000,
tomNormalCaret = (int) 0,
tomKoreanBlockCaret = (int) 0x1,
tomIncludeInset = (int) 0x1,
tomIgnoreCurrentFont = (int) 0,
tomMatchFontCharset = (int) 0x1,
tomMatchFontSignature = (int) 0x2,
tomCharset = (int) 0x80000000,
tomRE10Mode = (int) 0x1,
tomNoIME = (int) 0x80000,
tomSelfIME = (int) 0x40000
} tomConstants;
interface ITextRange;

View File

@ -23,7 +23,7 @@ import "ocidl.idl";
[
uuid(1ff70682-0a51-30e8-076d-740be8cee98b),
implicit_handle(handle_t rpc_handle),
implicit_handle(handle_t atsvc_handle),
version(1.0),
pointer_default(unique)
]

Some files were not shown because too many files have changed in this diff Show More