47 pr_dinfo2(io,
"io_init(%p, %d, %d, %p)", (
void *) io, type, flags, (
void *)
ops);
57 mos_warn(
"ops->read is NULL for readable io");
61 mos_warn(
"ops->write is NULL for writable io");
65 mos_warn(
"io->ops->seek is NULL for seekable io");
85 mos_warn(
"%p is already closed", (
void *) io);
95 pr_dinfo2(io,
"io_unref(%p)", (
void *) io);
98 mos_warn(
"%p is already closed", (
void *) io);
104 mos_warn(
"%p has refcount 0", (
void *) io);
114 pr_dinfo2(io,
"closing %p", (
void *) io);
120 pr_dinfo2(io,
"%p is not closeable", (
void *) io);
135 pr_dinfo2(io,
"io_read(%p, %p, %zu)", (
void *) io, buf, count);
139 mos_warn(
"%p is already closed", (
void *) io);
145 pr_info2(
"%p is not readable\n", (
void *) io);
149 return io->
ops->
read(io, buf, count);
154 pr_dinfo2(io,
"io_pread(%p, %p, %zu, %lu)", (
void *) io, buf, count, offset);
158 mos_warn(
"%p is already closed", (
void *) io);
164 pr_info2(
"%p is not readable\n", (
void *) io);
170 pr_info2(
"%p is not seekable\n", (
void *) io);
176 const size_t ret =
io_read(io, buf, count);
183 pr_dinfo2(io,
"io_write(%p, %p, %zu)", (
void *) io, buf, count);
187 mos_warn(
"%p is already closed", (
void *) io);
193 pr_info2(
"%p is not writable", (
void *) io);
197 return io->
ops->
write(io, buf, count);
202 pr_dinfo2(io,
"io_seek(%p, %lu, %d)", (
void *) io, offset, whence);
206 mos_warn(
"%p is already closed", (
void *) io);
212 pr_info2(
"%p is not seekable", (
void *) io);
216 return io->
ops->
seek(io, offset, whence);
221 pr_dinfo2(io,
"io_tell(%p)", (
void *) io);
229 mos_warn(
"%p is already closed", (
void *) io);
235 pr_info2(
"%p is not mmapable", (
void *) io);
245 if (!may_mmap_writeable)
257 pr_dinfo2(io,
"io_mmap(%p, %p, %lu)", (
void *) io, (
void *) vmap, offset);
264 if (!io->
ops->
mmap(io, vmap, offset))
268 mos_panic(
"vmap->on_fault is NULL, possibly buggy io->ops->mmap() implementation");
276 pr_dinfo2(io,
"io_unmap(%p, %p, %p)", (
void *) io, (
void *) vmap, (
void *) unmapped);
279 mos_warn(
"%p is already closed", (
void *) io);
299 mos_warn(
"vmap->io->ops->unmap() failed");
#define mos_warn(fmt,...)
MOSAPI void(1, 2) fatal_abort(const char *fmt
bool io_mmap_perm_check(io_t *io, vm_flags flags, bool is_private)
size_t io_pread(io_t *io, void *buf, size_t count, off_t offset)
bool io_munmap(io_t *io, vmap_t *vmap, bool *unmapped)
static size_t _null_read(io_t *io, void *buffer, size_t size)
void io_init(io_t *io, io_type_t type, io_flags_t flags, const io_op_t *ops)
bool io_mmap(io_t *io, vmap_t *vmap, off_t offset)
off_t io_seek(io_t *io, off_t offset, io_seek_whence_t whence)
io_t * io_unref(io_t *io)
size_t io_write(io_t *io, const void *buf, size_t count)
bool io_valid(const io_t *io)
size_t io_read(io_t *io, void *buf, size_t count)
static size_t _null_write(io_t *io, const void *buffer, size_t size)
void io_get_name(const io_t *io, char *buf, size_t size)
int snprintf(char *__restrict str, size_t size, const char *__restrict format,...)
#define mos_panic(fmt,...)
#define pr_info2(fmt,...)
#define pr_dinfo2(feat, fmt,...)
size_t(* read)(io_t *io, void *buf, size_t count)
off_t(* seek)(io_t *io, off_t offset, io_seek_whence_t whence)
bool(* mmap)(io_t *io, vmap_t *vmap, off_t offset)
bool(* munmap)(io_t *io, vmap_t *vmap, bool *unmapped)
void(* get_name)(const io_t *io, char *buf, size_t size)
size_t(* write)(io_t *io, const void *buf, size_t count)
vmfault_handler_t on_fault