Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › Io › Threaded › fileWriteStreamingWindows Private Function fileWriteStreamingWindows Doc Source Private Function std.Io.Threaded.fileWriteStreamingWindows
fn fileWriteStreamingWindows (file : File , buffer : []const u8 ) File .Writer .Error !usize Params file : File buffer : []const u8 File Io/Threaded.zig: 11038
11038
11039
11040
11041
11042
11043
11044
11045
11046
11047
11048
11049
11050
11051
11052
11053
11054
11055
11056
11057
11058
11059
11060
11061
11062
11063
11064
11065
11066
11067
11068
11069
11070
11071
11072
11073
11074
11075
11076
11077
11078
11079
11080
11081
11082
11083
11084
11085
11086
11087
11088
11089
11090
11091
11092
11093
11094 fn fileWriteStreamingWindows (file : File , buffer : []const u8 ) File .Writer .Error !usize {
assert (buffer .len != 0 );
var iosb : windows .IO_STATUS_BLOCK = undefined ;
if (file .flags .nonblocking ) {
var done : bool = false ;
switch (windows .ntdll .NtWriteFile (
file .handle ,
null , // event
flagApc ,
&done , // APC context
&iosb ,
buffer .ptr ,
@intCast (buffer .len ),
null , // byte offset
null , // key
)) {
// We must wait for the APC routine.
.PENDING , .SUCCESS => while (!done ) {
// Once we get here we must not return from the function until the
// operation completes, thereby releasing reference to io_status_block.
const alertable_syscall = AlertableSyscall .start () catch |err | switch (err ) {
error .Canceled => |e | {
var cancel_iosb : windows .IO_STATUS_BLOCK = undefined ;
_ = windows .ntdll .NtCancelIoFileEx (file .handle , &iosb , &cancel_iosb );
while (!done ) waitForApcOrAlert ();
return e ;
},
};
waitForApcOrAlert ();
alertable_syscall .finish ();
},
else => |status | iosb .u .Status = status ,
}
} else {
const syscall : Syscall = try .start ();
while (true ) switch (windows .ntdll .NtWriteFile (
file .handle ,
null , // event
null , // APC routine
null , // APC context
&iosb ,
buffer .ptr ,
@intCast (buffer .len ),
null , // byte offset
null , // key
)) {
.PENDING => unreachable , // unrecoverable: wrong File nonblocking flag
.CANCELLED => try syscall .checkCancel (),
else => |status | {
syscall .finish ();
iosb .u .Status = status ;
break ;
},
};
}
return ntWriteFileResult (&iosb );
}