Exemple #1
0
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);
}
Exemple #2
0
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);
}