Skip to content

Commit

Permalink
V4L/DVB (10794): v4l2: Move code to zero querybuf output struct to v4…
Browse files Browse the repository at this point in the history
…l2_ioctl

For VIDIOC_QUERYBUF only the first two fields, size and type, are used as
input.  The rest can be filled in by the driver as output.  Most drivers do
not actually use all the field and unused ones should be zeroed out.  Some
drivers have code to do this and some drivers should but don't.  So put
some zero out code in v4l2_ioctl so that all drivers using that system get
it.

The drivers that have zeroing code get that code removed.

Some drivers checked that the type field was valid, but v4l2_ioctl already
does this so those checks can be removed as well.

Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Trent Piepho authored and Mauro Carvalho Chehab committed Mar 30, 2009
1 parent 86b5aea commit 9cfb6a3
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 20 deletions.
4 changes: 0 additions & 4 deletions drivers/media/video/meye.c
Original file line number Diff line number Diff line change
Expand Up @@ -1446,10 +1446,6 @@ static int vidioc_querybuf(struct file *file, void *fh, struct v4l2_buffer *buf)
if (index < 0 || index >= gbuffers)
return -EINVAL;

memset(buf, 0, sizeof(*buf));

buf->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf->index = index;
buf->bytesused = meye.grab_buffer[index].size;
buf->flags = V4L2_BUF_FLAG_MAPPED;

Expand Down
8 changes: 1 addition & 7 deletions drivers/media/video/stk-webcam.c
Original file line number Diff line number Diff line change
Expand Up @@ -1139,16 +1139,10 @@ static int stk_vidioc_reqbufs(struct file *filp,
static int stk_vidioc_querybuf(struct file *filp,
void *priv, struct v4l2_buffer *buf)
{
int index;
struct stk_camera *dev = priv;
struct stk_sio_buffer *sbuf;

if (buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL;

index = buf->index;

if (index < 0 || index >= dev->n_sbufs)
if (buf->index < 0 || buf->index >= dev->n_sbufs)
return -EINVAL;
sbuf = dev->sio_bufs + buf->index;
*buf = sbuf->v4lbuf;
Expand Down
3 changes: 0 additions & 3 deletions drivers/media/video/usbvision/usbvision-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -788,9 +788,6 @@ static int vidioc_querybuf (struct file *file,

/* FIXME : must control
that buffers are mapped (VIDIOC_REQBUFS has been called) */
if(vb->type != V4L2_CAP_VIDEO_CAPTURE) {
return -EINVAL;
}
if(vb->index>=usbvision->num_frames) {
return -EINVAL;
}
Expand Down
5 changes: 5 additions & 0 deletions drivers/media/video/v4l2-ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -969,6 +969,11 @@ static long __video_do_ioctl(struct file *file,
if (ret)
break;

/* Zero out all fields starting with bytesysed, which is
* everything but index and type. */
memset(0, &p->bytesused,
sizeof(*p) - offsetof(typeof(*p), bytesused));

ret = ops->vidioc_querybuf(file, fh, p);
if (!ret)
dbgbuf(cmd, vfd, p);
Expand Down
7 changes: 1 addition & 6 deletions drivers/media/video/zoran/zoran_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -2498,12 +2498,7 @@ static int zoran_querybuf(struct file *file, void *__fh, struct v4l2_buffer *buf
{
struct zoran_fh *fh = __fh;
struct zoran *zr = fh->zr;
__u32 type = buf->type;
int index = buf->index, res;

memset(buf, 0, sizeof(*buf));
buf->type = type;
buf->index = index;
int res;

mutex_lock(&zr->resource_lock);
res = zoran_v4l2_buffer_status(file, buf, buf->index);
Expand Down

0 comments on commit 9cfb6a3

Please sign in to comment.