コード例 #1
0
static int put_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up)
{
	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_format32)) ||
		put_user(kp->type, &up->type))
		return -EFAULT;
	switch (kp->type) {
	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
	case V4L2_BUF_TYPE_VIDEO_OUTPUT:
		return put_v4l2_pix_format(&kp->fmt.pix, &up->fmt.pix);
	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
	case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
		return put_v4l2_window32(&kp->fmt.win, &up->fmt.win);
	case V4L2_BUF_TYPE_VBI_CAPTURE:
	case V4L2_BUF_TYPE_VBI_OUTPUT:
		return put_v4l2_vbi_format(&kp->fmt.vbi, &up->fmt.vbi);
	case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
	case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
		return put_v4l2_sliced_vbi_format(&kp->fmt.sliced, &up->fmt.sliced);
	case V4L2_BUF_TYPE_PRIVATE:
		if (copy_to_user(up, kp, sizeof(up->fmt.raw_data)))
			return -EFAULT;
		return 0;
	case 0:
		return -EINVAL;
	default:
		printk(KERN_INFO "compat_ioctl32: unexpected VIDIOC_FMT type %d\n",
								kp->type);
		return -EINVAL;
	}
}
コード例 #2
0
ファイル: compat_ioctl32.c プロジェクト: 274914765/C
static int put_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up)
{
    if(!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_format32)) ||
        put_user(kp->type, &up->type))
        return -EFAULT;
    switch (kp->type) {
    case V4L2_BUF_TYPE_VIDEO_CAPTURE:
        return put_v4l2_pix_format(&kp->fmt.pix, &up->fmt.pix);
    case V4L2_BUF_TYPE_VIDEO_OVERLAY:
        return put_v4l2_window32(&kp->fmt.win, &up->fmt.win);
    case V4L2_BUF_TYPE_VBI_CAPTURE:
        return put_v4l2_vbi_format(&kp->fmt.vbi, &up->fmt.vbi);
    default:
        return -ENXIO;
    }
}