The Wine development release 7.21 is now available. What's new in this release: - OpenGL library converted to PE. - Support for multi-architecture PE builds. - More preparation work for Vulkan 32-on-64 support. - Support for creating import libraries without dlltool. - Locale data updates. - Various bug fixes. The source is available at: https://dl.winehq.org/wine/source/7.x/wine-7.21.tar.xz Binary packages for various distributions will be available from: https://www.winehq.org/download You will find documentation on https://www.winehq.org/documentation You can also get the current source directly from the git repository. Check https://www.winehq.org/git for details. Wine is available thanks to the work of many people. See the file AUTHORS in the distribution for the complete list. ---------------------------------------------------------------- Bugs fixed in 7.21 (total 25): - #29974 StarBurn 13 crashes on disabling skins - #51418 fotoBiz X - Fatal error on startup - #51779 Visual Studio msvsmon fails to bind server socket in child processes - #52467 Kaseya Live Connect 9.5.0.28 management software sub-component crashes - #53081 Retina Mode broken since 7f7f9fa22c5cbe629e79a54257d5bd21403e80db - #53100 Euphoria: freezes every second while controllers are plugged in - #53153 SetWindowPos() incorrectly computes exposure region of parent window with WS_EX_COMPOSITED - #53484 dxgi:dxgi times out on the debiant VM - #53590 GetFileInformationByHandleEx() not fully implemented causing boost::directory_iterator failures with boost v1.79 and newer - #53606 First intro stops on last frame in multiple games (Darksiders Genesis, The Medium) - #53617 Imaris fails at exit with error, and keeps a process running. - #53631 Multiple 64-bit applications have issues with dialogs (DipTrace, foobar2000 installer) - #53676 vbscript can not exec_script - invalid number of arguments for Randomize - #53738 Cherry MIDI sequencer cannot read files with a path including CJK characters - #53749 Hotel Giant 2: black screen after changing resolution or enabling anti-aliasing - #53768 Winfile crashes due to unimplemented user32.dll.DragObject - #53798 Port Royale 2: incomplete text rendering - #53849 Apiset DLLs broken in non-PE builds - #53856 Wine 7.20 installs some windows files to the wrong location - #53859 Hades shows black screen at Vulkan mode - #53861 Non-PE builds fail after "makefiles: Add support for multiple PE architectures." - #53872 Adobe Reader XI crash opening settings in Protected Mode - #53879 Gothic 1 doesn't launch (msdbi.dll failed to initialize) - #53888 vbscript does not allow Mid on non VT_BSTR - #53893 ws2_32:sock - test_WSASocket() gets an unexpected raw protocol name in French on Windows ---------------------------------------------------------------- Changes since 7.20: Alex Henrie (13): include: Include minidumpapiset.h in imagehlp.h. msvcrt: Change return type of _splitpath_s to errno_t. include: Add _splitpath_s. msvcrt: Change return type of freopen_s to errno_t. include: Add freopen_s. msvcrt: Change return type of wcsncat_s to errno_t. include: Add wcsncat_s. cmd: Remove inapplicable comment from WCMD_getfileowner. cmd: Use the wcsrev function instead of reimplementing it. include: Add sdkddkver.h. uuid: Add propkey.h. include: Define PROPSHEETPAGE[AW]_V[1-4]. mscoree: Use standard C functions for memory allocation in assembly.c. Alexandre Julliard (34): makefiles: Add support for multiple PE architectures. makedep: Always generate a fake module for the native architecture. ntdll: Fix trace formats for 64-bit values on ARM64. wow64: Load dependencies of 64-bit modules only from the 64-bit system directory. msvcrt: Use WINAPIV calling convention for variadic functions. xml2: Use WINAPIV calling convention for variadic functions. xslt: Use WINAPIV calling convention for variadic functions. ntdll: Reimplement KeUserModeCallback in assembly on i386. ntdll: Reimplement KeUserModeCallback in assembly on x86_64. ntdll: Reimplement KeUserModeCallback in assembly on ARM. ntdll: Reimplement KeUserModeCallback in assembly on ARM64. faudio: Import upstream release 22.11. png: Import upstream release 1.6.38. zlib: Import upstream release 1.2.13. lcms2: Import upstream release 2.14. xml2: Import upstream release 2.10.3. xslt: Import upstream release 1.1.37. nls: Update locale data to CLDR version 42. kernelbase: Update timezone data to version 2022f. win32u: Always use the full union for sysparams entries. ntdll: Don't inline NtCurrentTeb() in Unix libraries. openal32: Remove dll. ntdll: Use a pthread key for the TEB on all platforms. ntdll: Move the initialization of the thread register into signal_start_thread(). ntdll: Use a separate function pointer for the TEB hack on ARM64. ntdll: Use a proper Unix syscall for load_so_dll(). ntdll: Use a proper Unix syscall for init_builtin_dll(). ntdll: Use a proper Unix syscall for unwind_builtin_dll(). ntdll: Use a proper Unix syscall for RtlGetSystemTimePrecise(). Revert "light.msstyles: Add nonclient metrics.". ntdll: Add a Wine-specific process info class for the LDT copy. makedep: Remove support for "hybrid" Unix libraries. winegcc: Remove support for "hybrid" Unix libraries. winebuild: Remove support for "hybrid" Unix libraries. Anton Baskanov (6): quartz/tests: Add tests for MPEG layer-3 decoder IEnumMediaTypes. winegstreamer: Add a skeleton MPEG layer-3 decoder filter. quartz/tests: Add tests for MPEG layer-3 decoder accepted media types. winegstreamer: Reject incompatible input media types in MPEG layer-3 decoder. quartz/tests: Add tests for MPEG layer-3 decoder sink connection. winegstreamer: Reject incompatible output types in MPEG layer-3 decoder. Arkadiusz Hiler (1): cmd/tests: Make sure for /f doesn't loop infinitely on NULs. Bartosz Kosiorek (19): msvcrt: Add _fprintf_l implementation. msvcrt: Add _fprintf_p implementation. msvcrt: Add _fprintf_p_l implementation. msvcrt: Add _fprintf_s_l implementation. msvcrt: Add _fwprintf_p implementation. msvcrt: Add _fwprintf_p_l implementation. msvcrt: Add _fwprintf_s_l implementation. msvcrt: Add _scprintf_l implementation. msvcrt: Add _scprintf_p implementation. msvcrt: Add _scprintf_p_l implementation. msvcrt: Add _swprintf_p_l implementation. msvcp90: Add _Cin_func implementation. msvcp90: Add _Wcin_func implementation. msvcp90: Add _Cout_func implementation. msvcp90: Add _Clog_func implementation. msvcp90: Add _Cerr_func implementation. msvcp90: Add _Wcout_func implementation. msvcp90: Add _Wclog_func implementation. msvcp90: Add _Wcerr_func implementation. Bernhard Kölbl (3): mf/tests: Test for copier node in topology using evr. mf: Assume same up and downstream media type for copier creation. mf: Set media types for output nodes in the media session. Brendan Shanks (12): ntdll: Print correct thread rename trace if non-pseudo-handle to current thread is used. winemac: Remove pre-Mac OS X 10.8 workarounds. ntdll: Set the QoS class of the main Wine thread on macOS. ntdll: Add a Wine-specific THREADINFOCLASS to set just the native thread name. ntdll: Add native thread renaming for exception method. dsound: Set name of internal threads. winepulse: Set name of internal threads. winealsa: Set name of internal threads. ntdll: Fix runtime availability check for pthread_attr_set_qos_class_np. ntdll: Suppress deprecation warnings when calling MPTaskIsPreemptive(). ntdll: Stop using deprecated kIOMasterPortDefault constant. winemac.drv: Stop using deprecated kIOMasterPortDefault constant. Connor McAdams (7): uiautomationcore: Add UiaNavigate stub. uiautomationcore: Add parent link check to prepare_uia_node(). uiautomationcore: Add helper function for returning a new node from an IWineUiaProvider. uiautomationcore: Implement ConditionType_True parent navigation for HUIANODEs. uiautomationcore: Partially implement ConditionType_True sibling navigation for HUIANODEs. uiautomationcore: Implement ConditionType_True child navigation for HUIANODEs. uiautomationcore: Add support for navigating between sibling node providers of a parent HUIANODE. Dmitry Timoshkov (1): uxtheme: Protect CloseThemeData() from invalid input. Eric Pouech (13): dbghelp: No longer pass inline site's address upon creation. dbghelp: Store address range as FAM in symt_inlinesite. dbghelp: Use addr_range for storing symt_function address and size. dbghelp: Get rid of symt_inlinesite by merging it inside symt_function. user32: Fix rounding issue in edit tests for char pos messages. conhost/tests: Fix some conditions on tty test termination. rpcrt4: Fix unexpected exception in ndr_marshal tests. shell32/tests: Improve timeout detection in shlexec tests. dbghelp: Added missing DECLSPEC_HIDDEN attribute. dbghelp: Introduce a helper for module lookup. dbghelp: Support loading modules from Wine's multi-arch build tree. cmd: Use CRT file I/O function inside 'for /F' handling. riched20: Fix failing test in UTF8 locales. Etaash Mathamsetty (1): ntoskrnl.exe: Implement KeInitializeGuardedMutex. Evan Tang (4): kernel32: Null-terminate the atom names passed to NtAddAtom. riched20: Move test class creation to a helper function. riched20: Add test for EN_CHANGE events during window creation. riched20: Don't emit EN_CHANGE events during window creation. Fabian Maurer (6): wbemproxy/tests: Prevent double free (Coverity). shell32: Prevent double free (Coverity). win32u: Prevent use after free (Coverity). ntdll/tests: Fix uninitialized read in ok (Coverity). sapi: Prevent resource leak (Coverity). msvcrt/tests: Fix typo (Coverity). Gabriel Ivăncescu (12): mshtml/tests: Handle broken localStorage on native. mshtml: Implement isContentEditable for HTML elements. mshtml: Improve locale stub for KeyboardEvent. mshtml: Return E_ABORT if wine-gecko's OnDataAvailable aborts the binding. mshtml: Don't include fragment in storage event's url prop. mshtml: Implement HTMLLocation_put_hash. mshtml: Implement document.importNode. mshtml: Use nsIDOMDocument instead of nsIDOMHTMLDocument where possible. jscript: Convert filetime to date properly using unsigned division. include: Add IDOMParser interface, dispinterface, and coclass. include: Add CLSID_XHTMLDocument and CLSID_SVGDocument. mshtml: Add SVG and XHTML document information to the registry. Georg Lehmann (4): winevulkan: Update to VK spec version 1.3.233. winevulkan: VkDeviceAddress needs alignment. winevulkan: Fix handling bitmasks in needs_alignment. winevulkan: Fix handling enums in needs_alignment. Hans Leidekker (5): rsaenh: Pass exact size to BCryptFinishHash(). bcrypt: Use get_object() in more places. bcrypt: Validate hash output length. netprofm: Store a list manager pointer in the network object instead of creating a new list manager. netprofm: Use CRT allocation functions. Jacek Caban (41): winevulkan: Support optional dispatch handles. winevulkan: Assert Unix call result in generated thunks. winevulkan: Assert Unix call result in private thunks. winevulkan: Don't check thunk_type in VkParam.needs_unwrapping. winevulkan: Don't store conversion functions in VkParam. winevulkan: Introduce needs_host_type helper function. winevulkan: Remove unneeded needs_conversion() calls. winevulkan: Store returnedonly attribute in VkVariable. winevulkan: Pass direction to needs_conversion helpers. winevulkan: Move get_conversions implementation to VkVariable. winevulkan: Remove no longer used Direction.INPUT_OUTPUT. winevulkan: Pass type as uint32_t to wine_vk_unwrap_handle. winevulkan: Support output array conversion in _generate_array_conversion_func. winevulkan: Drop "static_array" from conversion function names. winevulkan: Use separated classes for struct and array conversions. winevulkan: Use struct conversion functions for array conversion implementations. winevulkan: Don't declare host types for structs that don't need it. winevulkan: Skip unsupported functions in a few more places. mshtml: Always use navigate_fragment for fragment-only navigation in navigate_uri. winevulkan: Move find_next_struct implementation to vulkan_private.h. winevulkan: Convert struct chains in struct conversion functions. winevulkan: Avoid unneeded copies in struct conversion functions. winevulkan: Support output dynamic array conversion. winevulkan: Always fill output in fill_luid_property. winevulkan: Store parent in VkVariable. winevulkan: Support pointer dynamic array lengths. winevulkan: Use generated thunks for vkGetImageSparseMemoryRequirements(2) conversion. winevulkan: Use const types in conversion function declarations. winevulkan: Convert struct chain conversions for all structs that need it. winevulkan: Use generated thunks for VkPipelineCreationFeedback conversion. winevulkan: Support conversion of optional parameters. winevulkan: Fix handling unions in needs_alignment(). winevulkan: Preserve const in array conversion output types. winevulkan: Add support for pointer array conversion. winevulkan: Use local params struct declarations for 32-bit thunks. winevulkan: Fix host aliases declaration. winevulkan: Use local structs declarations for 32-bit conversion functions. winevulkan: Get rid of *_host types. winevulkan: Remove no longer used make_vulkan functions. winevulkan: Move needs_unwrapping implementation to VkVariable. winevulkan: Don't generate private thunk prototypes for PE-only functions. Jinoh Kang (7): server: Correctly expose composited parent window and its child on position change. server: Redraw composited window child when its z-order changes. server: Don't invalidate the newly exposed child region on the parent if it doesn't clip children. ntdll: Move CFI helper macros out of signal_x86_64.c. ntdll: Add CFI unwind info to __wine_syscall_dispatcher (i386). comctl32/tests: Flush events before testing edit control SetFocus() messages. comctl32/tests: Flush events before testing edit control IME messages. Martin Storsjö (5): winegcc: Prefer -Wl,--pdb=<file> over -Wl,-pdb,<file>. ntdll: Add ARM EHABI unwind instructions in assembly functions. ntdll: Implement ARM EHABI unwinding. ntdll: Write ret_len with the right size in user_mode_callback_return on arm64. ntdll: Readd the missed initialization of the thread register on arm. Mohamad Al-Jaf (2): setx: Add stub program. certutil: Add stub program. Nikolay Sivov (9): mf/session: Add support for MESessionScrubSampleComplete event. vbscript: Implement PRNG functions. comctl32/edit: Check for control destruction on notification return. user32/edit: Check for control destruction on notification return. vbscript: Fix a typo in Right() argument type check. vbscript: Improve invalid argument checks in Right(). vbscript: Improve argument type handling in Mid(). d2d1/tests: Use correct flags constants with D3D11CreateDevice(). vbscript: Add support for argument list in ReDim. Paul Gofman (28): ws2_32/tests: Add tests for SO_EXCLUSIVEADDRUSE. ws2_32: Track SO_EXCLUSIVEADDRUSE option value. server: Make SO_REUSEADDR and SO_EXCLUSIVEADDRUSE mutually exclusive. server: Use struct bound_addr as a key to bound_addresses_tree. server: Set error in check_addr_usage(). server: Use htonl() with INADDR_ANY in ipv4addr_from_v6(). server: Do not translate loopback addr in ipv4addr_from_v6(). server: Support SO_EXCLUSIVEADDRUSE socket option. http.sys: Use SO_EXCLUSIVEADDRUSE on listening socket. include: Add windows.gaming.ui.idl. windows.gaming.ui.gamebar: Add stub DLL. windows.gaming.ui.gamebar: Add IGameBarStatics interface. mf: Handle timer time behind clock time in present_clock_schedule_timer(). mf/samplegrabber: Process samples in paused state in ignore_clock mode. mf/samplegrabber: Handle samples receieved in paused state. secure32/tests: Add tests for ApplyControlToken (schannel). secur32: Allocate buffer for either ISC_REQ_ALLOCATE_MEMORY or NULL output in schan_InitializeSecurityContextW(). secur32: Add semi-stub for ApplyControlToken (schannel). secur32: Implement ApplyControlToken for SCHANNEL_SHUTDOWN. ws2_32/tests: Don't test protocol name in test_WSASocket(). ntdll: Pass limit instead of zero_bits to map_view(). ntdll: Factor out allocate_virtual_memory(). ntdll: Support HighestEndingAddress in NtAllocateVirtualMemoryEx(). ntdll/tests: Add tests for memory address requirements. wow64: Support MEM_ADDRESS_REQUIREMENTS in wow64_NtAllocateVirtualMemoryEx(). wow64: Set HighestEndingAddress in wow64_NtAllocateVirtualMemoryEx() if it is absent. ntdll: Pass alignemnt mask to map_view(). ntdll: Support specified alignment in NtAllocateVirtualMemoryEx(). Piotr Caban (5): wineps.drv: Add DrvDocumentPropertySheets implementation. winspool.drv: Use DrvDocumentPropertySheets driver entry in DocumentProperties. wineps.drv: Remove DrvDocumentProperties entry point. msvcrt: Fix errno set on read from write-only file. msvcrt: Fix errno set on write to read-only file. Rémi Bernon (64): win32u: Add a BOOL force parameter to update_display_cache. win32u: Force update display cache after NtUserChangeDisplaySettingsEx. win32u: Add primary adapter name parameter to ChangeDisplaySettings. winemac.drv: Use the primary adapter name instead of calling back win32u. win32u: Add is_primary parameter to GetCurrentDisplaySettings. winex11.drv: Use the primary adapter info instead of calling back win32u. winmm: Use a separate last_check for joyGetDevCapsW and joyGetPosEx. winmm: Add missing void parameter in function definition. winebus.sys: Ignore SDL events for devices which aren't started. win32u: Lock display devices while applying display settings. win32u: Write display settings to the registry in apply_display_settings. win32u: Read mode from the registry if GetCurrentDisplaySettings fails. winebuild: Split get_link_name into a separate get_abi_name helper. winebuild: Use asm_name to add underscore prefix in asm_globl. winebuild: Split output_static_lib into output_(import|static)_lib. opengl32: Create a unixlib interface for GL functions. opengl32: Use the unixlib for glGet(String|Integerv). opengl32: Move the null functions to unix_thunks.c. opengl32: Use the unixlib interface for EXT functions. opengl32: Use the unixlib interface for WGL functions. opengl32: Avoid using internal functions in wglUseFontBitmaps. opengl32: Avoid using internal functions in wglUseFontOutlines. opengl32: Introduce a new NtUserCallOpenGLDebugMessageCallback callback. opengl32: Move some WGL functions to unix_wgl.c. opengl32: Use the unixlib interface for more WGL functions. winebuild: Avoid calling asm_name twice in function arguments. comctl32/tests: Remove a now succeeding todo_wine. xaudio2_7/tests: Mark tests failing randomly as flaky. mf: Always enumerate branch source types for transform nodes. mf: Add some topology source node checks in IMFMediaSession_SetTopology. gitlab: Add a 2s wait between macOS build iterations. opengl32: Introduce new disabled_extensions_index helper. opengl32: Move extension filtering helpers to unix_wgl.c. opengl32: Move glGetStringi extension filtering to unix_wgl.c. opengl32: Move glGetString extension filtering to unix_wgl.c. opengl32: Move glGetIntegerv extension filtering to unix_wgl.c. opengl32: Move function / extension registry mapping to unix_thunks.c. opengl32: Move wglGetProcAddress extension filtering to unix_wgl.c. winebuild: Introduce a new --without-dlltool winebuild flag. winebuild: Implement import lib generation without dlltool. winebuild: Enable unwind tables by default in PE files. winebuild: Implement delay import lib generation without dlltool. winebuild: Fix import hint value for symbols imported by name. winebuild: Put the delay import descriptor in data section. winegstreamer: Introduce new wm_stream_allocate_sample helper. winegstreamer: Split the wm_reader_get_stream_sample helper. winegstreamer: Allow wg_parser_stream_get_buffer to wait on all streams. winegstreamer: Return no buffer when wg_parser stream is disabled. winegstreamer: Merge wm_reader_get_stream_sample with GetNextSample. opengl32: Avoid calling back the wglMakeCurrent win32 thunk. opengl32: Use glReserved1[0] and glReserved1[1] for draw and read DCs. opengl32: Split opengl_ext.h into private.h and unix_private.h. opengl32: Avoid recursively entering WGL critical section. opengl32: Use ntdll registry functions to read disabled extensions. opengl32: Build with msvcrt. opengl32: Use msvcrt allocation functions. opengl32: Use RtlSetLastWin32Error instead of SetLastError. kernel32/tests: Test more Global/Local functions with invalid pointers. kernel32/tests: Test (Global|Local)Handle with heap allocated pointers. ntdll: Introduce a new heap block_set_flags helper. ntdll: Store the user flags in the heap block flags. ntdll: Check block user flags in RtlSetUserValueHeap. ntdll: Check block user flags in RtlGetUserInfoHeap. ntdll: Implement RtlSetUserFlagsHeap. Santino Mazza (2): user32/tests: Test for MB_SYSTEMMODAL. user32/msgbox: Implement MB_SYSTEMMODAL. Sebastián Aedo (2): netprofm: Add INetwork_GetNetworkConnections test. netprofm: Implement network_GetNetworkConnections. Stefan Dösinger (1): ntdll: Fix building on Mojave / Xcode 11.3.1. Tarcísio Ladeia de Oliveira (1): gdi32/tests: Fix assertion message. Tim Clem (3): wow64: Truncate too-large regions from NtQueryVirtualMemory(MemoryBasicInformation). wow64: Return error from NtQueryVirtualMemory(MemoryRegionInformation) for a too-large address. wow64: Truncate too-large regions from NtQueryVirtualMemory(MemoryRegionInformation). Torge Matthies (1): ntdll: Fix incorrectly sized mov in user_mode_callback_return. Zebediah Figura (12): winevulkan: Do not pass win32 allocation callbacks directly to the Unix side. winecoreaudio: Disable thread DllMain() calls. winecoreaudio: Clean up the timer queue handle in DllMain(). wined3d: Factor out creating the window state thread. wined3d: Set the window state thread description only if it's actually a new thread. d3d8/tests: Test drawing from a managed texture after Reset(). d3d9/tests: Test drawing from a managed texture after Reset(). wined3d: Factor out a mark_managed_resource_dirty() helper. wined3d: Add a dirty rect to managed textures when resetting. wined3d: Always invalidate ~map_binding in texture write maps. d3d8: Build without -DWINE_NO_LONG_TYPES. d3d9: Build without -DWINE_NO_LONG_TYPES. Zhiyi Zhang (15): comctl32/button: Initialize dtFlags in PB_Paint(). win32u: Skip detached monitors in is_window_rect_full_screen(). winex11.drv: Initialize escape.drawable in X11DRV_GetDC(). winecfg: Use SM_CYSIZE to set and get caption height. winecfg: Adjust top-level window rectangles after theme changes. user32: Hook drawing menu buttons. uxtheme: Support drawing themed menu buttons. user32/tests: Test creating a fullscreen window spanning multiple monitors. winex11.drv: Support _NET_WM_FULLSCREEN_MONITORS. d2d1/tests: Add hwnd render target pixel format tests. d2d1: Use D2D1_ALPHA_MODE_IGNORE if D2D1_ALPHA_MODE_UNKNOWN is used for creating hwnd render targets. uxtheme: Reference count theme classes. uxtheme: Use atomic functions for reference counting. light.msstyles: Add nonclient metrics. user32: Use NtUserSetWindowLongPtr() in set_dialog_proc(). Ziqing Hui (4): usp10/tests: Add CJK shaping test. usp10/tests: Add Hiragana shaping test. usp10/tests: Add Katakana shaping test. gdi32/uniscribe: Add fallback font for Kana and CJK script. wuliande (1): msvcp90: Make _Condition_variable_* function pointers static.