13 auto fdt = (
struct fdtable*)curr_procc->fdtable;
14 auto curr_fd =
fdt->fds[fd];
16 if (fd < 0 || fd > (
int)
fdt->max_fds) {
17 LOG2_ERROR(
"writev",
"fd %d is invalid, max fd %d", fd,
24 LOG2_ERROR(
"writev",
"fd %d ops is missing", fd);
28 if (!curr_fd->vnode) {
29 LOG2_ERROR(
"writev",
"fd %d vnode is missing", fd);
39 LOG2_ERROR(
"writev",
"fd %d `write` ops is missing", fd);
45 memcopy(iovec_, (
void*)iov,
sizeof(
struct iovec) * (
size_t)iovcnt);
48 for (
int i = 0; i < iovcnt; i++) {
49 auto iov_ = &iovec_[i];
55 ops->write(curr_fd->vnode, iov_->iov_base,
56 (
size_t)iov_->iov_len, (
size_t)total_read);
61 total_read += write_count;
each_core_data * get_current_core_data(void)
void serial2_printf(const char *fmt,...)
void * kalloc(size_t size)
#define LOG2_ERROR(mod, fmt,...)
void memcopy(void *dest, void *src, size_t size)
long syscall_writev(int fd, const struct iovec *iov, int iovcnt)