From a7a709aaa974c394c001f6d7d9be138cc44fd22d Mon Sep 17 00:00:00 2001 From: Binary Craft Date: Fri, 24 Feb 2023 11:03:27 +0800 Subject: [PATCH] Fixes #13893 - some standard library networking tests are failing on Windows --- lib/std/os/windows.zig | 2 +- lib/std/os/windows/test.zig | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig index fe0ebc4951..b63fdb9f92 100644 --- a/lib/std/os/windows.zig +++ b/lib/std/os/windows.zig @@ -2068,7 +2068,7 @@ pub fn loadWinsockExtensionFunction(comptime T: type, sock: ws2_32.SOCKET, guid: ws2_32.SIO_GET_EXTENSION_FUNCTION_POINTER, @ptrCast(*const anyopaque, &guid), @sizeOf(GUID), - @intToPtr(?*anyopaque, @ptrToInt(function)), + @intToPtr(?*anyopaque, @ptrToInt(&function)), @sizeOf(T), &num_bytes, null, diff --git a/lib/std/os/windows/test.zig b/lib/std/os/windows/test.zig index 8e4d88615c..fa340da178 100644 --- a/lib/std/os/windows/test.zig +++ b/lib/std/os/windows/test.zig @@ -63,3 +63,28 @@ test "removeDotDirs" { try testRemoveDotDirs("a\\b\\..\\", "a\\"); try testRemoveDotDirs("a\\b\\..\\c", "a\\c"); } + +test "loadWinsockExtensionFunction" { + _ = try windows.WSAStartup(2, 2); + defer windows.WSACleanup() catch unreachable; + + const LPFN_CONNECTEX = *const fn ( + Socket: windows.ws2_32.SOCKET, + SockAddr: *const windows.ws2_32.sockaddr, + SockLen: std.os.socklen_t, + SendBuf: ?*const anyopaque, + SendBufLen: windows.DWORD, + BytesSent: *windows.DWORD, + Overlapped: *windows.OVERLAPPED, + ) callconv(windows.WINAPI) windows.BOOL; + + _ = windows.loadWinsockExtensionFunction( + LPFN_CONNECTEX, + try std.os.socket(std.os.AF.INET, std.os.SOCK.DGRAM, 0), + windows.ws2_32.WSAID_CONNECTEX, + ) catch |err| switch (err) { + error.OperationNotSupported => unreachable, + error.ShortRead => unreachable, + else => |e| return e, + }; +}