Warning: Due to various recent migrations, viewing non-HEAD refs may be broken.
/aio/op_read.ha (raw)
use io;
use linux::io_uring;
// The callback type for [[op_read]].
export type op_read_cb = fn(loop: *loop, file: io::file, r: (size | io::EOF | io::error), flags: completion_flags, user: nullable *opaque) void;
// An I/O request context for [[op_read]].
type op_read_ctx = struct {
callback: *op_read_cb,
user: nullable *opaque,
file: io::file,
};
// Prepares an I/O read request.
export fn op_read(
loop: *loop,
file: io::file,
buf: []u8,
offs: u64,
callback: *op_read_cb,
user: nullable *opaque,
flags: submission_flags
) (*submission | full | nomem) = {
let sqe = match (io_uring::ring_get_sqe(&loop.io_uring)) {
case null =>
return full;
case let s: *io_uring::sqe =>
yield s;
};
io_uring::op_read(sqe, file: int, *(&buf: **opaque), len(buf), offs, flags: io_uring::sqe_flags);
let ctx: op_ctx = op_read_ctx {
callback = callback,
user = user,
file = file,
};
io_uring::sqe_set_data(sqe, alloc(ctx)?);
return sqe: *submission;
};