Function seekBy [src]

Prototype

pub fn seekBy(r: *Reader, offset: i64) Reader.SeekError!void

Parameters

r: *Readeroffset: i64

Possible Errors

AccessDenied SeekError

In WASI, this error may occur when the file descriptor does not hold the required rights to seek on it.

EndOfStream

Seeking fell back to reading, and reached the end before the requested seek position. pos remains at the end of the file.

ReadFailed

Seeking fell back to reading, which failed.

Unexpected UnexpectedError

The Operating System returned an undocumented error code.

This error is in theory not possible, but it would be better to handle this error than to invoke undefined behavior.

When this error code is observed, it usually means the Zig Standard Library needs a small patch to add the error code to the error set for the respective function.

Unseekable SeekError

Source

pub fn seekBy(r: *Reader, offset: i64) Reader.SeekError!void { switch (r.mode) { .positional, .positional_reading => { setPosAdjustingBuffer(r, @intCast(@as(i64, @intCast(r.pos)) + offset)); }, .streaming, .streaming_reading => { if (posix.SEEK == void) { r.seek_err = error.Unseekable; return error.Unseekable; } const seek_err = r.seek_err orelse e: { if (posix.lseek_CUR(r.file.handle, offset)) |_| { setPosAdjustingBuffer(r, @intCast(@as(i64, @intCast(r.pos)) + offset)); return; } else |err| { r.seek_err = err; break :e err; } }; var remaining = std.math.cast(u64, offset) orelse return seek_err; while (remaining > 0) { remaining -= discard(&r.interface, .limited64(remaining)) catch |err| { r.seek_err = err; return err; }; } r.interface.seek = 0; r.interface.end = 0; }, .failure => return r.seek_err.?, } }