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 library itself.
Zig › std/ › Io/ › File/ › Reader.zig › readVecPositional
readVecPositional
Reader.readVecPositional
fn readVecPositional (r : *Reader , data : [][]u8 ) Io .Reader .Error !usize
File
Code
fn readVecPositional (r : *Reader , data : [][]u8 ) Io .Reader .Error !usize {
const io = r .io ;
var iovecs_buffer : [max_buffers_len ][]u8 = undefined ;
const dest_n , const data_size = try r .interface .writableVector (&iovecs_buffer , data );
const dest = iovecs_buffer [0 ..dest_n ];
assert (dest [0 ].len > 0 );
const n = io .vtable .fileReadPositional (io .userdata , r .file , dest , r .pos ) catch |err | switch (err ) {
error .Unseekable => {
r .mode = r .mode .toStreaming ();
const pos = r .pos ;
if (pos != 0 ) {
r .pos = 0 ;
r .seekBy (@intCast (pos )) catch {
r .mode = .failure ;
return error .ReadFailed ;
};
}
return 0 ;
},
else => |e | {
r .err = e ;
return error .ReadFailed ;
},
};
if (n == 0 ) {
r .size = r .pos ;
return error .EndOfStream ;
}
r .pos += n ;
if (n > data_size ) {
r .interface .end += n - data_size ;
return data_size ;
}
return n ;
}