From 2ebe0e23aa5ff196d647cc0166c91a60bfd9f016 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Sat, 29 May 2021 13:53:27 +1000 Subject: [PATCH] Rebase against 35180d368a94156cb77b09560b24d3af428b988b. --- ...t-Improved-tracing-of-Semantic-value.patch | 46 ----- ...ut-Support-username-in-Config-dialog.patch | 107 ++++++----- ...connecting-to-disconnected-joysticks.patch | 168 +++++++++--------- patches/patchinstall.sh | 7 +- ...-returning-the-proper-time-with-SO_C.patch | 28 +-- staging/upstream-commit | 2 +- 6 files changed, 159 insertions(+), 199 deletions(-) delete mode 100644 patches/dinput-SetActionMap-genre/0002-dinput-Improved-tracing-of-Semantic-value.patch diff --git a/patches/dinput-SetActionMap-genre/0002-dinput-Improved-tracing-of-Semantic-value.patch b/patches/dinput-SetActionMap-genre/0002-dinput-Improved-tracing-of-Semantic-value.patch deleted file mode 100644 index 333550f7..00000000 --- a/patches/dinput-SetActionMap-genre/0002-dinput-Improved-tracing-of-Semantic-value.patch +++ /dev/null @@ -1,46 +0,0 @@ -From a4cf8d9241b8dd94937408c9a1d20aacfb9dd2e3 Mon Sep 17 00:00:00 2001 -From: Alistair Leslie-Hughes -Date: Tue, 28 May 2019 14:37:25 +1000 -Subject: [PATCH 2/2] dinput: Improved tracing of Semantic value. - ---- - dlls/dinput/dinput_main.c | 16 +++++++++++++++- - 1 file changed, 15 insertions(+), 1 deletion(-) - -diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c -index cf050cb71ed..79ef9620de9 100644 ---- a/dlls/dinput/dinput_main.c -+++ b/dlls/dinput/dinput_main.c -@@ -290,6 +290,20 @@ static void _dump_EnumDevices_dwFlags(DWORD dwFlags) - TRACE("\n"); - } - -+static const char *dump_semantic(DWORD semantic) -+{ -+ if((semantic & 0xff000000) == 0xff000000) -+ return "Any AXIS"; -+ else if((semantic & 0x82000000) == 0x82000000) -+ return "Mouse"; -+ else if((semantic & 0x81000000) == 0x81000000) -+ return "Keybaord"; -+ else if((semantic & DIVIRTUAL_FLYING_HELICOPTER) == DIVIRTUAL_FLYING_HELICOPTER) -+ return "Helicopter"; -+ -+ return "Unknown"; -+} -+ - static void _dump_diactionformatA(LPDIACTIONFORMATA lpdiActionFormat) - { - unsigned int i; -@@ -312,7 +326,7 @@ static void _dump_diactionformatA(LPDIACTIONFORMATA lpdiActionFormat) - { - TRACE("diaf.rgoAction[%u]:\n", i); - TRACE("\tuAppData=0x%lx\n", lpdiActionFormat->rgoAction[i].uAppData); -- TRACE("\tdwSemantic=0x%08x\n", lpdiActionFormat->rgoAction[i].dwSemantic); -+ TRACE("\tdwSemantic=0x%08x (%s)\n", lpdiActionFormat->rgoAction[i].dwSemantic, dump_semantic(lpdiActionFormat->rgoAction[i].dwSemantic)); - TRACE("\tdwFlags=0x%x\n", lpdiActionFormat->rgoAction[i].dwFlags); - TRACE("\tszActionName=%s\n", debugstr_a(lpdiActionFormat->rgoAction[i].u.lptszActionName)); - TRACE("\tguidInstance=%s\n", debugstr_guid(&lpdiActionFormat->rgoAction[i].guidInstance)); --- -2.20.1 - diff --git a/patches/dinput-joy-mappings/0003-dinput-Support-username-in-Config-dialog.patch b/patches/dinput-joy-mappings/0003-dinput-Support-username-in-Config-dialog.patch index 0386c969..d0b8c2eb 100644 --- a/patches/dinput-joy-mappings/0003-dinput-Support-username-in-Config-dialog.patch +++ b/patches/dinput-joy-mappings/0003-dinput-Support-username-in-Config-dialog.patch @@ -1,17 +1,60 @@ -From ed590782f6149f56c0e4c6747cea5a297543047b Mon Sep 17 00:00:00 2001 +From c9ecf258a9186bb31a18f8a4728e20bb25b4e9cf Mon Sep 17 00:00:00 2001 From: Jetro Jormalainen Date: Tue, 30 Apr 2019 09:21:24 +1000 Subject: [PATCH] dinput: Support username in Config dialog. --- + dlls/dinput/ansi.c | 26 +++++ dlls/dinput/config.c | 187 ++++++++++++++++++++++++----------- dlls/dinput/device.c | 2 +- dlls/dinput/device_private.h | 1 + - dlls/dinput/dinput_main.c | 28 ++++++ - 4 files changed, 161 insertions(+), 57 deletions(-) + dlls/dinput/dinput_main.c | 1 + + 5 files changed, 160 insertions(+), 57 deletions(-) +diff --git a/dlls/dinput/ansi.c b/dlls/dinput/ansi.c +index 431b812aeb2..270fe6f1498 100644 +--- a/dlls/dinput/ansi.c ++++ b/dlls/dinput/ansi.c +@@ -840,11 +840,37 @@ static HRESULT WINAPI dinput8_a_ConfigureDevices( IDirectInput8A *iface_a, LPDIC + { + hr = diactionformat_atow( format_a, &format_w, TRUE ); + params_w.lprgFormats = &format_w; ++ params_w.dwcUsers = params_a->dwcUsers; ++ ++ if (params_a->lptszUserNames) { ++ char *start = params_a->lptszUserNames; ++ WCHAR *to = NULL; ++ int total_len = 0; ++ for (i = 0; i < params_a->dwcUsers; i++) ++ { ++ char *end = start + 1; ++ int len; ++ while (*(end++)); ++ len = MultiByteToWideChar(CP_ACP, 0, start, end - start, NULL, 0); ++ total_len += len + 2; /* length of string and two null char */ ++ if (to) ++ to = HeapReAlloc(GetProcessHeap(), 0, to, sizeof(WCHAR) * total_len); ++ else ++ to = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * total_len); ++ ++ MultiByteToWideChar(CP_ACP, 0, start, end - start, to + (total_len - len - 2), len); ++ to[total_len] = 0; ++ to[total_len - 1] = 0; ++ } ++ params_w.lptszUserNames = to; ++ } + + if (SUCCEEDED(hr)) hr = IDirectInput8_ConfigureDevices( iface_w, callback, ¶ms_w, flags, ref ); + + if (!format_w.hInstString) for (i = 0; i < format_w.dwNumActions; ++i) HeapFree( GetProcessHeap(), 0, (void *)format_w.rgoAction[i].lptszActionName ); + HeapFree( GetProcessHeap(), 0, format_w.rgoAction ); ++ HeapFree( GetProcessHeap(), 0, params_w.lptszUserNames); ++ + } + + HeapFree( GetProcessHeap(), 0, params_w.lptszUserNames ); diff --git a/dlls/dinput/config.c b/dlls/dinput/config.c -index bf44898589..c7a33d2da0 100644 +index bf448985893..c7a33d2da02 100644 --- a/dlls/dinput/config.c +++ b/dlls/dinput/config.c @@ -18,17 +18,23 @@ @@ -366,10 +409,10 @@ index bf44898589..c7a33d2da0 100644 return DI_OK; } diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c -index 6107ab2653..30483fe691 100644 +index 05a1dbbb2a1..daaaebdc0d0 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c -@@ -692,7 +692,7 @@ static HKEY get_mapping_key(const WCHAR *device, const WCHAR *username, const WC +@@ -704,7 +704,7 @@ static HKEY get_mapping_key(const WCHAR *device, const WCHAR *username, const WC return hkey; } @@ -379,10 +422,10 @@ index 6107ab2653..30483fe691 100644 WCHAR *guid_str = NULL; DIDEVICEINSTANCEW didev; diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h -index ea794d7396..114e3971ed 100644 +index 8d3425483c2..a6f22b28bf3 100644 --- a/dlls/dinput/device_private.h +++ b/dlls/dinput/device_private.h -@@ -125,6 +125,7 @@ extern const char *_dump_dinput_GUID(const GUID *guid) DECLSPEC_HIDDEN; +@@ -132,6 +132,7 @@ extern const char *_dump_dinput_GUID(const GUID *guid) DECLSPEC_HIDDEN; extern LPDIOBJECTDATAFORMAT dataformat_to_odf_by_type(LPCDIDATAFORMAT df, int n, DWORD type) DECLSPEC_HIDDEN; @@ -391,7 +434,7 @@ index ea794d7396..114e3971ed 100644 extern HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags, DWORD devMask, LPCDIDATAFORMAT df) DECLSPEC_HIDDEN; diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c -index 0855cb41cd..7af377026c 100644 +index 85de9f79b81..2f40bfbca96 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -39,6 +39,7 @@ @@ -402,50 +445,6 @@ index 0855cb41cd..7af377026c 100644 #include "wine/unicode.h" #include "wine/asm.h" #include "windef.h" -@@ -1253,9 +1254,34 @@ static HRESULT WINAPI IDirectInput8AImpl_ConfigureDevices( - - /* Copy parameters */ - diCDParamsW.dwSize = sizeof(DICONFIGUREDEVICESPARAMSW); -+ diCDParamsW.dwcUsers = lpdiCDParams->dwcUsers; - diCDParamsW.dwcFormats = lpdiCDParams->dwcFormats; - diCDParamsW.lprgFormats = &diafW; - diCDParamsW.hwnd = lpdiCDParams->hwnd; -+ diCDParamsW.lptszUserNames = NULL; -+ -+ if (lpdiCDParams->lptszUserNames) { -+ char *start = lpdiCDParams->lptszUserNames; -+ WCHAR *to = NULL; -+ int total_len = 0; -+ for (i = 0; i < lpdiCDParams->dwcUsers; i++) -+ { -+ char *end = start + 1; -+ int len; -+ while (*(end++)); -+ len = MultiByteToWideChar(CP_ACP, 0, start, end - start, NULL, 0); -+ total_len += len + 2; /* length of string and two null char */ -+ if (to) -+ to = HeapReAlloc(GetProcessHeap(), 0, to, sizeof(WCHAR) * total_len); -+ else -+ to = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * total_len); -+ -+ MultiByteToWideChar(CP_ACP, 0, start, end - start, to + (total_len - len - 2), len); -+ to[total_len] = 0; -+ to[total_len - 1] = 0; -+ } -+ diCDParamsW.lptszUserNames = to; -+ } - - diafW.rgoAction = HeapAlloc(GetProcessHeap(), 0, sizeof(DIACTIONW)*lpdiCDParams->lprgFormats->dwNumActions); - _copy_diactionformatAtoW(&diafW, lpdiCDParams->lprgFormats); -@@ -1283,6 +1309,8 @@ static HRESULT WINAPI IDirectInput8AImpl_ConfigureDevices( - - HeapFree(GetProcessHeap(), 0, diafW.rgoAction); - -+ heap_free((void*) diCDParamsW.lptszUserNames); -+ - return hr; - } - -- -2.17.1 +2.30.2 diff --git a/patches/dinput-reconnect-joystick/0001-dinput-Allow-reconnecting-to-disconnected-joysticks.patch b/patches/dinput-reconnect-joystick/0001-dinput-Allow-reconnecting-to-disconnected-joysticks.patch index 25b5f21c..db39e861 100644 --- a/patches/dinput-reconnect-joystick/0001-dinput-Allow-reconnecting-to-disconnected-joysticks.patch +++ b/patches/dinput-reconnect-joystick/0001-dinput-Allow-reconnecting-to-disconnected-joysticks.patch @@ -1,15 +1,15 @@ -From ff99f88bc6aabaa9ab5b7e4b44092f39a6079541 Mon Sep 17 00:00:00 2001 +From 80eb290cf245dcca259049a5bd948a5632d54608 Mon Sep 17 00:00:00 2001 From: Andrew Church Date: Mon, 25 Feb 2019 11:23:12 +1100 Subject: [PATCH] dinput: Allow reconnecting to disconnected joysticks Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=34297 --- - dlls/dinput/joystick_linuxinput.c | 152 ++++++++++++++++++++++-------- - 1 file changed, 115 insertions(+), 37 deletions(-) + dlls/dinput/joystick_linuxinput.c | 148 +++++++++++++++++++++++------- + 1 file changed, 113 insertions(+), 35 deletions(-) diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c -index 307b447d237..fcd60724853 100644 +index 3bc6114322f..3b5ad7c532a 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -84,6 +84,13 @@ struct wine_input_absinfo { @@ -25,7 +25,7 @@ index 307b447d237..fcd60724853 100644 + /* implemented in effect_linuxinput.c */ HRESULT linuxinput_create_effect(int* fd, REFGUID rguid, struct list *parent_list_entry, LPDIRECTINPUTEFFECT* peff); - HRESULT linuxinput_get_info_W(int fd, REFGUID rguid, LPDIEFFECTINFOW info); + HRESULT linuxinput_get_info_A(int fd, REFGUID rguid, LPDIEFFECTINFOA info); @@ -122,6 +129,7 @@ struct JoystickImpl /* joystick private */ @@ -34,106 +34,114 @@ index 307b447d237..fcd60724853 100644 int dev_axes_to_di[ABS_MAX]; POINTL povs[4]; -@@ -467,6 +475,7 @@ static JoystickImpl *alloc_device(REFGUID rguid, IDirectInputImpl *dinput, unsig - newDevice->generic.base.dinput = dinput; +@@ -459,6 +467,7 @@ static HRESULT alloc_device( REFGUID rguid, IDirectInputImpl *dinput, JoystickIm + newDevice->generic.joy_polldev = joy_polldev; newDevice->joyfd = -1; + newDevice->joyfd_state = WINE_FD_STATE_CLOSED; newDevice->joydev = &joydevs[index]; newDevice->generic.name = newDevice->joydev->name; list_init(&newDevice->ff_effects); -@@ -674,6 +683,44 @@ static HRESULT joydev_create_device(IDirectInputImpl *dinput, REFGUID rguid, REF +@@ -663,38 +672,15 @@ static HRESULT joydev_create_device(IDirectInputImpl *dinput, REFGUID rguid, REF return DIERR_DEVICENOTREG; } +- +-const struct dinput_device joystick_linuxinput_device = { +- "Wine Linux-input joystick driver", +- joydev_enum_deviceA, +- joydev_enum_deviceW, +- joydev_create_device +-}; +- +-/****************************************************************************** +- * Acquire : gets exclusive control of the joystick +- */ +-static HRESULT WINAPI JoystickWImpl_Acquire(LPDIRECTINPUTDEVICE8W iface) +static int joydev_open_evdev(JoystickImpl *This) -+{ + { +- JoystickImpl *This = impl_from_IDirectInputDevice8W(iface); +- HRESULT res; +- +- TRACE("(this=%p)\n",This); + int fd; -+ + +- if ((res = IDirectInputDevice2WImpl_Acquire(iface)) != DI_OK) + if ((fd = open(This->joydev->device, O_RDWR)) == -1) -+ { -+ if ((fd = open(This->joydev->device, O_RDONLY)) == -1) -+ { -+ /* Couldn't open the device at all */ -+ } -+ else -+ { -+ /* Couldn't open in r/w but opened in read-only. */ -+ WARN("Could not open %s in read-write mode. Force feedback will be disabled.\n", This->joydev->device); -+ } -+ } -+ else -+ { -+ struct input_event event; -+ -+ event.type = EV_FF; -+ event.code = FF_GAIN; -+ event.value = This->ff_gain; -+ if (write(fd, &event, sizeof(event)) == -1) -+ ERR("Failed to set gain (%i): %d %s\n", This->ff_gain, errno, strerror(errno)); -+ if (!This->ff_autocenter) -+ { -+ /* Disable autocenter. */ -+ event.code = FF_AUTOCENTER; -+ event.value = 0; -+ if (write(fd, &event, sizeof(event)) == -1) -+ ERR("Failed disabling autocenter: %d %s\n", errno, strerror(errno)); -+ } -+ } -+ -+ return fd; -+} -+ - - const struct dinput_device joystick_linuxinput_device = { - "Wine Linux-input joystick driver", -@@ -698,40 +745,14 @@ static HRESULT WINAPI JoystickWImpl_Acquire(LPDIRECTINPUTDEVICE8W iface) - return res; - } - -- if ((This->joyfd = open(This->joydev->device, O_RDWR)) == -1) -+ if ((This->joyfd = joydev_open_evdev(This)) == -1) { +- WARN("Failed to acquire: %x\n", res); +- return res; +- } +- +- if ((This->joyfd = open(This->joydev->device, O_RDWR)) == -1) +- { - if ((This->joyfd = open(This->joydev->device, O_RDONLY)) == -1) -- { -- /* Couldn't open the device at all */ ++ if ((fd = open(This->joydev->device, O_RDONLY)) == -1) + { + /* Couldn't open the device at all */ - ERR("Failed to open device %s: %d %s\n", This->joydev->device, errno, strerror(errno)); - IDirectInputDevice2WImpl_Unacquire(iface); - return DIERR_NOTFOUND; -- } -- else -- { -- /* Couldn't open in r/w but opened in read-only. */ -- WARN("Could not open %s in read-write mode. Force feedback will be disabled.\n", This->joydev->device); -- } -- } -- else -- { -- struct input_event event; -- -- event.type = EV_FF; -- event.code = FF_GAIN; -- event.value = This->ff_gain; + } + else + { +@@ -709,18 +695,53 @@ static HRESULT WINAPI JoystickWImpl_Acquire(LPDIRECTINPUTDEVICE8W iface) + event.type = EV_FF; + event.code = FF_GAIN; + event.value = This->ff_gain; - if (write(This->joyfd, &event, sizeof(event)) == -1) -- ERR("Failed to set gain (%i): %d %s\n", This->ff_gain, errno, strerror(errno)); -- if (!This->ff_autocenter) -- { -- /* Disable autocenter. */ -- event.code = FF_AUTOCENTER; -- event.value = 0; ++ if (write(fd, &event, sizeof(event)) == -1) + ERR("Failed to set gain (%i): %d %s\n", This->ff_gain, errno, strerror(errno)); + if (!This->ff_autocenter) + { + /* Disable autocenter. */ + event.code = FF_AUTOCENTER; + event.value = 0; - if (write(This->joyfd, &event, sizeof(event)) == -1) -- ERR("Failed disabling autocenter: %d %s\n", errno, strerror(errno)); -- } ++ if (write(fd, &event, sizeof(event)) == -1) + ERR("Failed disabling autocenter: %d %s\n", errno, strerror(errno)); + } + } + ++ return fd; ++} ++ ++ ++const struct dinput_device joystick_linuxinput_device = { ++ "Wine Linux-input joystick driver", ++ joydev_enum_deviceA, ++ joydev_enum_deviceW, ++ joydev_create_device ++}; ++ ++/****************************************************************************** ++ * Acquire : gets exclusive control of the joystick ++ */ ++static HRESULT WINAPI JoystickWImpl_Acquire(LPDIRECTINPUTDEVICE8W iface) ++{ ++ JoystickImpl *This = impl_from_IDirectInputDevice8W(iface); ++ HRESULT res; ++ ++ TRACE("(this=%p)\n",This); ++ ++ if ((res = IDirectInputDevice2WImpl_Acquire(iface)) != DI_OK) ++ { ++ WARN("Failed to acquire: %x\n", res); ++ return res; ++ } ++ ++ if ((This->joyfd = joydev_open_evdev(This)) == -1) ++ { + ERR("Failed to open device %s: %d %s\n", This->joydev->device, errno, strerror(errno)); + IDirectInputDevice2WImpl_Unacquire(iface); + return DIERR_NOTFOUND; - } - ++ } ++ + This->joyfd_state = WINE_FD_STATE_OK; return DI_OK; } -@@ -763,6 +784,7 @@ static HRESULT WINAPI JoystickWImpl_Unacquire(LPDIRECTINPUTDEVICE8W iface) +@@ -752,6 +773,7 @@ static HRESULT WINAPI JoystickWImpl_Unacquire(LPDIRECTINPUTDEVICE8W iface) close(This->joyfd); This->joyfd = -1; @@ -141,7 +149,7 @@ index 307b447d237..fcd60724853 100644 } return res; } -@@ -801,23 +823,79 @@ static void joy_polldev( IDirectInputDevice8W *iface ) +@@ -790,23 +812,79 @@ static void joy_polldev( IDirectInputDevice8W *iface ) struct input_event ie; JoystickImpl *This = impl_from_IDirectInputDevice8W( iface ); diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index b68ae966..0828b44e 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "ce151dd681fe5ee80daba96dce12e37d6846e152" + echo "35180d368a94156cb77b09560b24d3af428b988b" } # Show version information @@ -1840,7 +1840,7 @@ fi # | * [#34108] dinput: Improve support for user Joystick configuration. # | # | Modified files: -# | * dlls/dinput/config.c, dlls/dinput/device.c, dlls/dinput/device_private.h, dlls/dinput/dinput_main.c, +# | * dlls/dinput/ansi.c, dlls/dinput/config.c, dlls/dinput/device.c, dlls/dinput/device_private.h, dlls/dinput/dinput_main.c, # | dlls/dinput/joystick.c, dlls/dinput8/tests/device.c # | if test "$enable_dinput_joy_mappings" -eq 1; then @@ -1859,11 +1859,10 @@ fi # | * [#47326] dinput: Allow mapping of controls based of genre type. # | # | Modified files: -# | * dlls/dinput/device.c, dlls/dinput/dinput_main.c +# | * dlls/dinput/device.c # | if test "$enable_dinput_SetActionMap_genre" -eq 1; then patch_apply dinput-SetActionMap-genre/0001-dinput-Allow-mapping-of-controls-based-of-Genre-type.patch - patch_apply dinput-SetActionMap-genre/0002-dinput-Improved-tracing-of-Semantic-value.patch fi # Patchset dinput-axis-recalc diff --git a/patches/ws2_32-Connect_Time/0001-ws2_32-Implement-returning-the-proper-time-with-SO_C.patch b/patches/ws2_32-Connect_Time/0001-ws2_32-Implement-returning-the-proper-time-with-SO_C.patch index 1db4366c..35a496de 100644 --- a/patches/ws2_32-Connect_Time/0001-ws2_32-Implement-returning-the-proper-time-with-SO_C.patch +++ b/patches/ws2_32-Connect_Time/0001-ws2_32-Implement-returning-the-proper-time-with-SO_C.patch @@ -1,4 +1,4 @@ -From 02727b15297b66c66d622cc28dfa5f6cf1b044ac Mon Sep 17 00:00:00 2001 +From f9b83aeeeebe3c48fbc9d02c46ed78502a6a7733 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Thu, 20 Nov 2014 13:27:24 +0100 Subject: [PATCH] ws2_32: Implement returning the proper time with @@ -16,11 +16,11 @@ Needs tools/make_requests. 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c -index 4568e7f1bae..60c243d14f0 100644 +index ff24cc8f57c..25112eb0ef8 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c -@@ -1344,6 +1344,21 @@ static DWORD sock_is_blocking(SOCKET s, BOOL *ret) - return err; +@@ -898,6 +898,21 @@ static void _enable_event( HANDLE s, unsigned int event, + SERVER_END_REQ; } +static DWORD _get_connect_time(SOCKET s) @@ -41,7 +41,7 @@ index 4568e7f1bae..60c243d14f0 100644 static unsigned int _get_sock_mask(SOCKET s) { unsigned int ret; -@@ -3969,7 +3984,6 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, +@@ -2755,7 +2770,6 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, case WS_SO_CONNECT_TIME: { @@ -49,7 +49,7 @@ index 4568e7f1bae..60c243d14f0 100644 struct WS_sockaddr addr; int len = sizeof(addr); -@@ -3981,10 +3995,7 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, +@@ -2767,10 +2781,7 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, if (WS_getpeername(s, &addr, &len) == SOCKET_ERROR) *(DWORD *)optval = ~0u; else @@ -62,10 +62,10 @@ index 4568e7f1bae..60c243d14f0 100644 return ret; } diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c -index ba03e16ebb1..134433c4b6d 100644 +index 33ab1e1b576..6e5c29608ee 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c -@@ -4801,11 +4801,15 @@ static void test_send(void) +@@ -4131,11 +4131,15 @@ static void test_send(void) OVERLAPPED ov; BOOL bret; DWORD id, bytes_sent, dwRet; @@ -81,7 +81,7 @@ index ba03e16ebb1..134433c4b6d 100644 set_blocking(dst, FALSE); /* force disable buffering so we can get a pending overlapped request */ ret = setsockopt(dst, SOL_SOCKET, SO_SNDBUF, (char *) &zero, sizeof(zero)); -@@ -4878,6 +4882,22 @@ static void test_send(void) +@@ -4208,6 +4212,22 @@ static void test_send(void) ok(ret == SOCKET_ERROR && WSAGetLastError() == ERROR_IO_PENDING, "Failed to start overlapped send %d - %d\n", ret, WSAGetLastError()); @@ -105,10 +105,10 @@ index ba03e16ebb1..134433c4b6d 100644 if (src != INVALID_SOCKET) closesocket(src); diff --git a/server/protocol.def b/server/protocol.def -index 8360b2611a1..f5f505d69fb 100644 +index 57abacdf16b..5c236400dca 100644 --- a/server/protocol.def +++ b/server/protocol.def -@@ -1433,6 +1433,7 @@ enum server_fd_type +@@ -1453,6 +1453,7 @@ enum server_fd_type int family; /* family, see socket manpage */ int type; /* type, see socket manpage */ int protocol; /* protocol, see socket manpage */ @@ -117,10 +117,10 @@ index 8360b2611a1..f5f505d69fb 100644 diff --git a/server/sock.c b/server/sock.c -index 4f97fe72080..07e1cf3a2ca 100644 +index 228f987959b..e6d0fb7d6c0 100644 --- a/server/sock.c +++ b/server/sock.c -@@ -1565,6 +1565,7 @@ DECL_HANDLER(get_socket_info) +@@ -2414,6 +2414,7 @@ DECL_HANDLER(get_socket_info) reply->family = sock->family; reply->type = sock->type; reply->protocol = sock->proto; @@ -129,5 +129,5 @@ index 4f97fe72080..07e1cf3a2ca 100644 release_object( &sock->obj ); } -- -2.28.0 +2.30.2 diff --git a/staging/upstream-commit b/staging/upstream-commit index 10148bac..87109eb7 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -ce151dd681fe5ee80daba96dce12e37d6846e152 +35180d368a94156cb77b09560b24d3af428b988b