Windows 10 [received support](https://devblogs.microsoft.com/commandline/af_unix-comes-to-window… for AF_UNIX sockets in Insider Build 17063. This merge request adds basic support for AF_UNIX sockets to ws2_32 and wineserver.
Of particular note is the difficulty in handling `sun_path`. Most of the functions that allow for translating Windows paths to Unix paths are not accessible from ws2_32. I considered the following options:
* Pass the Windows path to wineserver and do the conversion there.
* This is, as far as I can tell, not possible without major rearchitecting. wineserver does not have functions to translate Windows paths to Unix paths, for obvious reasons.
* Obtain the current working directory of the requesting process and temporarily change directories to there.
* This only handles relative paths and fails for absolute paths, UNC paths, etc.
* Conditionally change directories based on whether the path is relative or not.
* This is error-prone and wineserver does not have the requisite functions to do this cleanly.
I ultimately decided to pass the translated Unix path to wineserver, which changes directories to `dirname(path)`. It then provides `bind` and `connect` with `basename(path)`. This is not threadsafe, but wineserver is not (currently) multithreaded.
Abstract sockets are supported by this patch.
--
v9: ws2_32/tests: Add test for AF_UNIX sockets.
server: Introduce error when attempting to connect() to abstract AF_UNIX sockets.
server: Allow for deletion of socket files.
ws2_32: Add support for AF_UNIX sockets.
ntdll/unix: Add support for AF_UNIX sockets to multiple functions.
ws2_32: Add afunix.h header.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786
Fix Cafe Stella (SteamID: 1829980) Flowchart crashes once there are 2 things on it.
--
v7: gdiplus: Support playing back pen custom end line cap.
gdiplus: Support playing back pen custom start line cap.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2870
gdip_format_string doesn't write newline characters. It writes line by line making sure to skip the newline characters. This means we can resolve this issue(at least as far gdiplus is concerned) without concerning ourselves with the issue in GetTextExtentExPointW(which should be dealt with as a different bug).
This patch implements a fix but there might be possible improvements in the code so yeah, input is most welcome.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54962
Signed-off-by: David Kahurani <k.kahurani(a)gmail.com>
--
v4: gdiplus: Handle Windows style newline.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2865
> I'd also like to see the result of getsockname() on all tested paths.
On Windows, `getsockname` returns -1 with `WSAEINVAL` when called on an AF_UNIX socket. However, the paths you delineate are all valid to `bind` to.
> What protocol do these sockets actually have? I.e. what does SO_PROTOCOL_INFO return for them? 0 is usually a wildcard.
Windows returns the following:
```
dwServiceFlags1: 0x00020026 // (XP1_GUARANTEED_DELIVERY | XP1_GUARANTEED_ORDER | XP1_IFS_HANDLES)
dwServiceFlags2: <reserved>
dwServiceFlags3: <reserved>
dwServiceFlags4: <reserved>
dwProviderFlags: 8
ProviderId: <GUID>
dwCatalogEntryId: 1007
ProtocolChain: { ChainLen: 1, ChainEntries: { 0 } }
iVersion: 2
iAddressFamily: 1
iMaxSockAddr: 110
iMinSockAddr: 2
iSocketType: 1
iProtocol: 0
iProtocolMaxOffset: 0
iNetworkByteOrder: 0
iSecurityScheme: 0
dwMessageSize: 0
dwProviderReserved: <reserved>
szProtocol: AF_UNIX
```
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_34026
On Fri May 26 18:59:04 2023 +0000, Esme Povirk wrote:
> You'll want to check the length passed in, something like `lret + 1 <
> fit` maybe. We can't assume the string is null-terminated.
Woops, sorry. I didn't think of that
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2865#note_34025