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.
--
v30: ws2_32/tests: Add test for AF_UNIX sockets.
server: Fix getsockname() and accept() on 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
In a declaration with multiple variables, the variables must be created
before the initializer of the next variable is parsed. This is required
for initializers such as:
```
float a = 1, b = a, c = b + 1;
```
The solution is to parse the type information in the same rule as the first variable ('a' in this case) so that it can be declared before the parser reaches the initializer for the following variables.
To initialize the following variables, the type information is passed along from the first variable's struct parse_variable_def to the next and so on.
---
Solves https://bugs.winehq.org/show_bug.cgi?id=54484, pointed out by @nsivov.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/250
Reference
https://bugs.winehq.org/show_bug.cgi?id=54985
From the line we see the mingw version used causes an
In file included from /usr/share/mingw-w64/include/unknwnbase.h:47,
[ 935s] from /usr/share/mingw-w64/include/objidlbase.h:439,
[ 935s] from include/combaseapi.h:29,
[ 935s] from include/objbase.h:267,
[ 935s] from include/ole2.h:25,
[ 935s] from /usr/share/mingw-w64/include/wtypes.h:13,
[ 935s] from include/winscard.h:22,
[ 935s] from include/windows.h:68,
[ 935s] from libs/vkd3d/include/private/vkd3d_common.h:23,
[ 935s] from libs/vkd3d/libs/vkd3d-shader/vkd3d_shader_private.h:49,
[ 935s] from libs/vkd3d/libs/vkd3d-shader/preproc.y:24,
[ 935s] from libs/vkd3d/libs/vkd3d-shader/preproc.l:23:
[ 935s] /usr/share/mingw-w64/include/wtypesbase.h:148:16: error: redefinition of 'struct _SECURITY_ATTRIBUTES'
[ 935s] 148 | typedef struct _SECURITY_ATTRIBUTES {
The included file winscard.h seemed a little odd. The vkd3d isn't going to use this.
Adding the define WIN32_LEAN_AND_MEAN to the Makefile.in (in wine), produce the following warnings.
/home/alesliehughes/wine/libs/vkd3d/include/private/vkd3d_common.h:75:5: warning: implicit declaration of function ‘abort’ [-Wimplicit-function-declaration]
75 | abort();
| ^~~~~
/home/alesliehughes/wine/libs/vkd3d/include/private/vkd3d_common.h:258:14: warning: implicit declaration of function ‘atoi’ [-Wimplicit-function-declaration]
258 | *major = atoi(version);
Adding header <stdlib.h> removed all the warnings.
--
v2: include: Avoid including unnecessary Windows headers.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/217