示例#1
0
文件: fd.cpp 项目: simonsouth/haiku
status_t
user_fd_kernel_ioctl(int fd, uint32 op, void* buffer, size_t length)
{
	TRACE(("user_fd_kernel_ioctl: fd %d\n", fd));

	return fd_ioctl(false, fd, op, buffer, length);
}
示例#2
0
int ioctl(int fd, unsigned long int request, ...)
{
	static int (*orig_ioctl)(int fd, unsigned long int request, ...);
	void *argp;
	int ret;
	int i;

	ASSIGN(ioctl);

	va_list ap;
	va_start(ap, request);
	argp = va_arg(ap, void*);
	va_end(ap);

	for (i = 0; ioctl_sockios[i].request; i++)
		if (ioctl_sockios[i].request == request) break;

	ret = fd_ioctl(fd, request, argp);
	if (ret == FD_NONE)
		ret = orig_ioctl(fd, request, argp);

	if (ioctl_sockios[i].request)
		dbg("%s(fd=%d, request=%s, argp=%p) = %d\n", __func__, fd,
			ioctl_sockios[i].name, argp, ret);
	else
		dbg("%s(fd=%d, request=%ld, argp=%p) = %d\n", __func__, fd,
			request, argp, ret);

	return ret;
}
示例#3
0
文件: fd.cpp 项目: simonsouth/haiku
status_t
_kern_ioctl(int fd, uint32 op, void* buffer, size_t length)
{
	TRACE(("kern_ioctl: fd %d\n", fd));

	SyscallFlagUnsetter _;

	return fd_ioctl(true, fd, op, buffer, length);
}
示例#4
0
文件: fd.cpp 项目: simonsouth/haiku
status_t
_user_ioctl(int fd, uint32 op, void* buffer, size_t length)
{
	if (!IS_USER_ADDRESS(buffer))
		return B_BAD_ADDRESS;

	TRACE(("user_ioctl: fd %d\n", fd));

	SyscallRestartWrapper<status_t> status;

	return status = fd_ioctl(false, fd, op, buffer, length);
}