zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 7f6e7e3e5db5f8dc749e58b704eb0ff812a1cdbf (tree)
parent 5c9eb94a2b22162758643c396d5e2cad4b764c09
Author: viri <hi@viri.moe>
Date:   Sat, 12 Jun 2021 18:36:22 -0600

std.windows: fix `OVERLAPPED`, add `OVERLAPPED_ENTRY`

Diffstat:
Mlib/std/event/loop.zig | 8++++++--
Mlib/std/fs/watch.zig | 8++++++--
Mlib/std/os/windows.zig | 32++++++++++++++++++++++++--------
Mlib/std/os/windows/bits.zig | 17+++++++++++++++--
4 files changed, 51 insertions(+), 14 deletions(-)

diff --git a/lib/std/event/loop.zig b/lib/std/event/loop.zig @@ -54,8 +54,12 @@ pub const Loop = struct { .windows => windows.OVERLAPPED{ .Internal = 0, .InternalHigh = 0, - .Offset = 0, - .OffsetHigh = 0, + .DUMMYUNIONNAME = .{ + .DUMMYSTRUCTNAME = .{ + .Offset = 0, + .OffsetHigh = 0, + }, + }, .hEvent = null, }, else => {}, diff --git a/lib/std/fs/watch.zig b/lib/std/fs/watch.zig @@ -437,8 +437,12 @@ pub fn Watch(comptime V: type) type { .overlapped = windows.OVERLAPPED{ .Internal = 0, .InternalHigh = 0, - .Offset = 0, - .OffsetHigh = 0, + .DUMMYUNIONNAME = .{ + .DUMMYSTRUCTNAME = .{ + .Offset = 0, + .OffsetHigh = 0, + }, + }, .hEvent = null, }, }, diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig @@ -454,8 +454,12 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64, io_mode: std.io.Mo .overlapped = OVERLAPPED{ .Internal = 0, .InternalHigh = 0, - .Offset = @truncate(u32, off), - .OffsetHigh = @truncate(u32, off >> 32), + .DUMMYUNIONNAME = .{ + .DUMMYSTRUCTNAME = .{ + .Offset = @truncate(u32, off), + .OffsetHigh = @truncate(u32, off >> 32), + }, + }, .hEvent = null, }, }, @@ -490,8 +494,12 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64, io_mode: std.io.Mo overlapped_data = .{ .Internal = 0, .InternalHigh = 0, - .Offset = @truncate(u32, off), - .OffsetHigh = @truncate(u32, off >> 32), + .DUMMYUNIONNAME = .{ + .DUMMYSTRUCTNAME = .{ + .Offset = @truncate(u32, off), + .OffsetHigh = @truncate(u32, off >> 32), + }, + }, .hEvent = null, }; break :blk &overlapped_data; @@ -534,8 +542,12 @@ pub fn WriteFile( .overlapped = OVERLAPPED{ .Internal = 0, .InternalHigh = 0, - .Offset = @truncate(u32, off), - .OffsetHigh = @truncate(u32, off >> 32), + .DUMMYUNIONNAME = .{ + .DUMMYSTRUCTNAME = .{ + .Offset = @truncate(u32, off), + .OffsetHigh = @truncate(u32, off >> 32), + }, + }, .hEvent = null, }, }, @@ -570,8 +582,12 @@ pub fn WriteFile( overlapped_data = .{ .Internal = 0, .InternalHigh = 0, - .Offset = @truncate(u32, off), - .OffsetHigh = @truncate(u32, off >> 32), + .DUMMYUNIONNAME = .{ + .DUMMYSTRUCTNAME = .{ + .Offset = @truncate(u32, off), + .OffsetHigh = @truncate(u32, off >> 32), + }, + }, .hEvent = null, }; break :blk &overlapped_data; diff --git a/lib/std/os/windows/bits.zig b/lib/std/os/windows/bits.zig @@ -363,12 +363,25 @@ pub const FILE_INFORMATION_CLASS = enum(c_int) { pub const OVERLAPPED = extern struct { Internal: ULONG_PTR, InternalHigh: ULONG_PTR, - Offset: DWORD, - OffsetHigh: DWORD, + DUMMYUNIONNAME: extern union { + DUMMYSTRUCTNAME: extern struct { + Offset: DWORD, + OffsetHigh: DWORD, + }, + Pointer: ?PVOID, + }, hEvent: ?HANDLE, }; pub const LPOVERLAPPED = *OVERLAPPED; +pub const OVERLAPPED_ENTRY = extern struct { + lpCompletionKey: ULONG_PTR, + lpOverlapped: LPOVERLAPPED, + Internal: ULONG_PTR, + dwNumberOfBytesTransferred: DWORD, +}; +pub const LPOVERLAPPED_ENTRY = *OVERLAPPED_ENTRY; + pub const MAX_PATH = 260; // TODO issue #305