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 › fileSeekTo Private Function fileSeekTo Doc Source Private Function std.Io.Threaded.fileSeekTo
fn fileSeekTo (userdata : ?*anyopaque , file : File , offset : u64 ) File .SeekError !void Params userdata : ?*anyopaque file : File offset : u64 File Io/Threaded.zig: 10360
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
10374
10375
10376
10377
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415 fn fileSeekTo (userdata : ?*anyopaque , file : File , offset : u64 ) File .SeekError !void {
const t : *Threaded = @ptrCast (@alignCast (userdata ));
_ = t ;
if (is_windows ) {
var iosb : windows .IO_STATUS_BLOCK = undefined ;
var info : windows .FILE .POSITION_INFORMATION = .{ .CurrentByteOffset = @bitCast (offset ) };
const syscall : Syscall = try .start ();
while (true ) switch (windows .ntdll .NtSetInformationFile (
file .handle ,
&iosb ,
&info ,
@sizeOf (windows .FILE .POSITION_INFORMATION ),
.Position ,
)) {
.SUCCESS => return syscall .finish (),
.CANCELLED => try syscall .checkCancel (),
.ACCESS_DENIED => return syscall .fail (error .AccessDenied ),
.PIPE_NOT_AVAILABLE => return syscall .fail (error .Unseekable ),
else => |status | return syscall .unexpectedNtstatus (status ),
};
}
if (native_os == .wasi and !builtin .link_libc ) {
const syscall : Syscall = try .start ();
while (true ) {
var new_offset : std .os .wasi .filesize_t = undefined ;
switch (std .os .wasi .fd_seek (file .handle , @bitCast (offset ), .SET , &new_offset )) {
.SUCCESS => {
syscall .finish ();
return ;
},
.INTR => {
try syscall .checkCancel ();
continue ;
},
else => |e | {
syscall .finish ();
switch (e ) {
.BADF => |err | return errnoBug (err ), // File descriptor used after closed.
.INVAL => return error .Unseekable ,
.OVERFLOW => return error .Unseekable ,
.SPIPE => return error .Unseekable ,
.NXIO => return error .Unseekable ,
.NOTCAPABLE => return error .AccessDenied ,
else => |err | return posix .unexpectedErrno (err ),
}
},
}
}
}
if (posix .SEEK == void ) return error .Unseekable ;
return posixSeekTo (file .handle , offset );
}