authorgravatar for hi@viri.moeviri <hi@viri.moe> 2021-06-12 18:36:22-06:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-06-13 10:26:02+03:00
logb2879825d7e59fc40f3defe272039d723b692f43
treed1e3442602e74cdcfdf17233a5748282e8e5daec
parenta6d72fea06364da26b4efacb188303c5bddf5da3

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


4 files changed, 51 insertions(+), 14 deletions(-)

lib/std/event/loop.zig+6-2
...@@ -54,8 +54,12 @@ pub const Loop = struct {...@@ -54,8 +54,12 @@ pub const Loop = struct {
54 .windows => windows.OVERLAPPED{54 .windows => windows.OVERLAPPED{
55 .Internal = 0,55 .Internal = 0,
56 .InternalHigh = 0,56 .InternalHigh = 0,
57 .Offset = 0,57 .DUMMYUNIONNAME = .{
58 .OffsetHigh = 0,58 .DUMMYSTRUCTNAME = .{
59 .Offset = 0,
60 .OffsetHigh = 0,
61 },
62 },
59 .hEvent = null,63 .hEvent = null,
60 },64 },
61 else => {},65 else => {},
lib/std/fs/watch.zig+6-2
...@@ -437,8 +437,12 @@ pub fn Watch(comptime V: type) type {...@@ -437,8 +437,12 @@ pub fn Watch(comptime V: type) type {
437 .overlapped = windows.OVERLAPPED{437 .overlapped = windows.OVERLAPPED{
438 .Internal = 0,438 .Internal = 0,
439 .InternalHigh = 0,439 .InternalHigh = 0,
440 .Offset = 0,440 .DUMMYUNIONNAME = .{
441 .OffsetHigh = 0,441 .DUMMYSTRUCTNAME = .{
442 .Offset = 0,
443 .OffsetHigh = 0,
444 },
445 },
442 .hEvent = null,446 .hEvent = null,
443 },447 },
444 },448 },
lib/std/os/windows.zig+24-8
...@@ -455,8 +455,12 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64, io_mode: std.io.Mo...@@ -455,8 +455,12 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64, io_mode: std.io.Mo
455 .overlapped = OVERLAPPED{455 .overlapped = OVERLAPPED{
456 .Internal = 0,456 .Internal = 0,
457 .InternalHigh = 0,457 .InternalHigh = 0,
458 .Offset = @truncate(u32, off),458 .DUMMYUNIONNAME = .{
459 .OffsetHigh = @truncate(u32, off >> 32),459 .DUMMYSTRUCTNAME = .{
460 .Offset = @truncate(u32, off),
461 .OffsetHigh = @truncate(u32, off >> 32),
462 },
463 },
460 .hEvent = null,464 .hEvent = null,
461 },465 },
462 },466 },
...@@ -491,8 +495,12 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64, io_mode: std.io.Mo...@@ -491,8 +495,12 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64, io_mode: std.io.Mo
491 overlapped_data = .{495 overlapped_data = .{
492 .Internal = 0,496 .Internal = 0,
493 .InternalHigh = 0,497 .InternalHigh = 0,
494 .Offset = @truncate(u32, off),498 .DUMMYUNIONNAME = .{
495 .OffsetHigh = @truncate(u32, off >> 32),499 .DUMMYSTRUCTNAME = .{
500 .Offset = @truncate(u32, off),
501 .OffsetHigh = @truncate(u32, off >> 32),
502 },
503 },
496 .hEvent = null,504 .hEvent = null,
497 };505 };
498 break :blk &overlapped_data;506 break :blk &overlapped_data;
...@@ -535,8 +543,12 @@ pub fn WriteFile(...@@ -535,8 +543,12 @@ pub fn WriteFile(
535 .overlapped = OVERLAPPED{543 .overlapped = OVERLAPPED{
536 .Internal = 0,544 .Internal = 0,
537 .InternalHigh = 0,545 .InternalHigh = 0,
538 .Offset = @truncate(u32, off),546 .DUMMYUNIONNAME = .{
539 .OffsetHigh = @truncate(u32, off >> 32),547 .DUMMYSTRUCTNAME = .{
548 .Offset = @truncate(u32, off),
549 .OffsetHigh = @truncate(u32, off >> 32),
550 },
551 },
540 .hEvent = null,552 .hEvent = null,
541 },553 },
542 },554 },
...@@ -571,8 +583,12 @@ pub fn WriteFile(...@@ -571,8 +583,12 @@ pub fn WriteFile(
571 overlapped_data = .{583 overlapped_data = .{
572 .Internal = 0,584 .Internal = 0,
573 .InternalHigh = 0,585 .InternalHigh = 0,
574 .Offset = @truncate(u32, off),586 .DUMMYUNIONNAME = .{
575 .OffsetHigh = @truncate(u32, off >> 32),587 .DUMMYSTRUCTNAME = .{
588 .Offset = @truncate(u32, off),
589 .OffsetHigh = @truncate(u32, off >> 32),
590 },
591 },
576 .hEvent = null,592 .hEvent = null,
577 };593 };
578 break :blk &overlapped_data;594 break :blk &overlapped_data;
lib/std/os/windows/bits.zig+15-2
...@@ -359,12 +359,25 @@ pub const FILE_INFORMATION_CLASS = enum(c_int) {...@@ -359,12 +359,25 @@ pub const FILE_INFORMATION_CLASS = enum(c_int) {
359pub const OVERLAPPED = extern struct {359pub const OVERLAPPED = extern struct {
360 Internal: ULONG_PTR,360 Internal: ULONG_PTR,
361 InternalHigh: ULONG_PTR,361 InternalHigh: ULONG_PTR,
362 Offset: DWORD,362 DUMMYUNIONNAME: extern union {
363 OffsetHigh: DWORD,363 DUMMYSTRUCTNAME: extern struct {
364 Offset: DWORD,
365 OffsetHigh: DWORD,
366 },
367 Pointer: ?PVOID,
368 },
364 hEvent: ?HANDLE,369 hEvent: ?HANDLE,
365};370};
366pub const LPOVERLAPPED = *OVERLAPPED;371pub const LPOVERLAPPED = *OVERLAPPED;
367372
373pub const OVERLAPPED_ENTRY = extern struct {
374 lpCompletionKey: ULONG_PTR,
375 lpOverlapped: LPOVERLAPPED,
376 Internal: ULONG_PTR,
377 dwNumberOfBytesTransferred: DWORD,
378};
379pub const LPOVERLAPPED_ENTRY = *OVERLAPPED_ENTRY;
380
368pub const MAX_PATH = 260;381pub const MAX_PATH = 260;
369382
370// TODO issue #305383// TODO issue #305