int linux_readv(struct thread *td, struct linux_readv_args *uap) { struct uio *auio; int error; error = linux32_copyinuio(uap->iovp, uap->iovcnt, &auio); if (error) return (error); error = kern_readv(td, uap->fd, auio); free(auio, M_IOV); return (error); }
int cloudabi64_sys_fd_read(struct thread *td, struct cloudabi64_sys_fd_read_args *uap) { struct uio *uio; int error; error = cloudabi64_copyinuio(uap->iov, uap->iovcnt, &uio); if (error != 0) return (error); error = kern_readv(td, uap->fd, uio); free(uio, M_IOV); return (error); }
/* * Receive kvp msg on the established unix socket connection from the user */ static int kvp_rcv_user(void) { int rcv_fd, rcv_error=0; struct uio rcv_uio; struct iovec rcv_iovec; struct thread *thread_ptr = curthread; #ifdef DEBUG1 struct hv_kvp_msg *toprint; int op; #endif rcv_fd = sock_fd; memset(&rcv_uio, 0, sizeof(struct uio)); rcv_iovec.iov_base = (void *)&hv_user_kvp_msg; rcv_iovec.iov_len = sizeof(hv_kvp_bsd_msg); rcv_uio.uio_iov = &rcv_iovec; rcv_uio.uio_iovcnt = 1; rcv_uio.uio_resid = rcv_iovec.iov_len; rcv_uio.uio_segflg = UIO_SYSSPACE; /* Block read */ rcv_error = kern_readv(thread_ptr, rcv_fd, &rcv_uio); if (rcv_error) { printf("kvp_rcv_user: kern_readv failed:err:%d fd:%d th:%p\n", rcv_error, rcv_fd, thread_ptr); } #ifdef DEBUG1 else { toprint = (struct hv_kvp_msg *) &hv_user_kvp_msg; op = kvp_msg_state.host_kvp_msg->kvp_hdr.operation; printf("kvp_rcv_user:kern_readv successful op:%d\n", op); if (op == 0) printf("kvp_rcv_user: KVP_OP_GET:Key is : %s value is : %s\n", toprint->body.kvp_set.data.key, toprint->body.kvp_set.data.msg_value.value); else if (op == 3) printf("kvp_rcv_user: ENUMERATE:index is : %d \n", toprint->body.kvp_enum_data.index); } #endif return (rcv_error); }