// read file int file_read(int fd, void *base, size_t len, size_t *copied_store) { cprintf("file_read begin\n"); int ret; struct file *file; *copied_store = 0; if ((ret = fd2file(fd, &file)) != 0) { return ret; } if (!file->readable) { return -E_INVAL; } fd_array_acquire(file); cprintf("file_read file acquired\n"); struct iobuf __iob, *iob = iobuf_init(&__iob, base, len, file->pos); ret = vop_read(file->node, iob); size_t copied = iobuf_used(iob); if (file->status == FD_OPENED) { file->pos += copied; } *copied_store = copied; fd_array_release(file); cprintf("file_read file released\n"); cprintf("file_read end\n"); return ret; }
int filestruct_read(struct file *file, void *base, size_t len) { struct iobuf __iob, *iob = iobuf_init(&__iob, base, len, file->pos); vop_read(file->node, iob); size_t copied = iobuf_used(iob); file->pos += copied; return copied; }
/* * file_read - read file * */ int file_read(int fd, void *base, size_t len, size_t * copied_store) { int ret; struct file *file; *copied_store = 0; if ((ret = fd2file(fd, &file)) != 0) { return ret; } if (!file->readable) { return -E_INVAL; } filemap_acquire(file); struct iobuf __iob, *iob = iobuf_init(&__iob, base, len, file->pos); ret = vop_read(file->node, iob, file->io_flags); size_t copied = iobuf_used(iob); file->pos += copied; *copied_store = copied; filemap_release(file); return ret; }