Преглед изворни кода

V4L/DVB (8083): videodev: zero fields for ENCODER_CMD and VIDIOC_G_SLICED_VBI_CAP

This avoids the need of memsets in the ivtv/cx18 drivers.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Hans Verkuil пре 17 година
родитељ
комит
8bfb9b1ce6
1 измењених фајлова са 16 додато и 11 уклоњено
  1. 16 11
      drivers/media/video/videodev.c

+ 16 - 11
drivers/media/video/videodev.c

@@ -1616,26 +1616,26 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
 	}
 	}
 	case VIDIOC_ENCODER_CMD:
 	case VIDIOC_ENCODER_CMD:
 	{
 	{
-		struct v4l2_encoder_cmd *p=arg;
+		struct v4l2_encoder_cmd *p = arg;
 
 
 		if (!vfd->vidioc_encoder_cmd)
 		if (!vfd->vidioc_encoder_cmd)
 			break;
 			break;
-		ret=vfd->vidioc_encoder_cmd(file, fh, p);
+		memset(&p->raw, 0, sizeof(p->raw));
+		ret = vfd->vidioc_encoder_cmd(file, fh, p);
 		if (!ret)
 		if (!ret)
-			dbgarg (cmd, "cmd=%d, flags=%d\n",
-					p->cmd,p->flags);
+			dbgarg(cmd, "cmd=%d, flags=%x\n", p->cmd, p->flags);
 		break;
 		break;
 	}
 	}
 	case VIDIOC_TRY_ENCODER_CMD:
 	case VIDIOC_TRY_ENCODER_CMD:
 	{
 	{
-		struct v4l2_encoder_cmd *p=arg;
+		struct v4l2_encoder_cmd *p = arg;
 
 
 		if (!vfd->vidioc_try_encoder_cmd)
 		if (!vfd->vidioc_try_encoder_cmd)
 			break;
 			break;
-		ret=vfd->vidioc_try_encoder_cmd(file, fh, p);
+		memset(&p->raw, 0, sizeof(p->raw));
+		ret = vfd->vidioc_try_encoder_cmd(file, fh, p);
 		if (!ret)
 		if (!ret)
-			dbgarg (cmd, "cmd=%d, flags=%d\n",
-					p->cmd,p->flags);
+			dbgarg(cmd, "cmd=%d, flags=%x\n", p->cmd, p->flags);
 		break;
 		break;
 	}
 	}
 	case VIDIOC_G_PARM:
 	case VIDIOC_G_PARM:
@@ -1738,12 +1738,17 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
 	}
 	}
 	case VIDIOC_G_SLICED_VBI_CAP:
 	case VIDIOC_G_SLICED_VBI_CAP:
 	{
 	{
-		struct v4l2_sliced_vbi_cap *p=arg;
+		struct v4l2_sliced_vbi_cap *p = arg;
+		__u32 type = p->type;
+
 		if (!vfd->vidioc_g_sliced_vbi_cap)
 		if (!vfd->vidioc_g_sliced_vbi_cap)
 			break;
 			break;
-		ret=vfd->vidioc_g_sliced_vbi_cap(file, fh, p);
+		memset(p, 0, sizeof(*p));
+		p->type = type;
+		ret = vfd->vidioc_g_sliced_vbi_cap(file, fh, p);
 		if (!ret)
 		if (!ret)
-			dbgarg (cmd, "service_set=%d\n", p->service_set);
+			dbgarg(cmd, "type=%d, service_set=%d\n",
+					p->type, p->service_set);
 		break;
 		break;
 	}
 	}
 	case VIDIOC_LOG_STATUS:
 	case VIDIOC_LOG_STATUS: