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 › Dispatch › childWait Private Function childWait Doc Source Private Function std.Io.Dispatch.childWait
fn childWait (userdata : ?*anyopaque , child : *process .Child ) process .Child .WaitError !process .Child .Term Params userdata : ?*anyopaque child : *process .Child File Io/Dispatch.zig: 4568
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594 fn childWait (userdata : ?*anyopaque , child : *process .Child ) process .Child .WaitError !process .Child .Term {
const ev : *Evented = @ptrCast (@alignCast (userdata ));
defer ev .childCleanup (child );
const pid = child .id .?;
const source = c .dispatch .source_create (
.PROC ,
@bitCast (@as (isize , pid )),
.{ .PROC = .{ .EXIT = true } },
ev .queue ,
) orelse return error .Unexpected ;
source .as_object ().set_context (Thread .current ().currentFiber ());
source .set_event_handler (&Fiber .@"resume" );
ev .yield (.{ .activate = source .as_object () });
source .as_object ().release ();
var status : c_int = undefined ;
var ru : c .rusage = undefined ;
const ru_ptr = if (child .request_resource_usage_statistics ) &ru else null ;
while (true ) switch (c .errno (c .wait4 (pid , &status , 0 , ru_ptr ))) {
.SUCCESS => {
if (ru_ptr ) |p | child .resource_usage_statistics .rusage = p .*;
return statusToTerm (@bitCast (status ));
},
.INTR => {},
.CHILD => |err | return errnoBug (err ), // Double-free.
else => |err | return unexpectedErrno (err ),
};
}