V4L/DVB (11660): zoran: fix bug when enumerating format -1
If someone requests a format at fmt->index == (unsigned)-1 and the first format in the array doesn't have the requested type then num will still be -1 when it's compared to fmt->index and there will appear to be a match. Restructure the loop so this can't happen. It's simpler this way too. The unnecessary check for (unsigned)fmt->index < 0 found by Roel Kluin <roel.kluin@gmail.com> is removed this way too. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
cb1287a822
commit
171f48e254
|
@ -1863,22 +1863,20 @@ static int zoran_querycap(struct file *file, void *__fh, struct v4l2_capability
|
|||
|
||||
static int zoran_enum_fmt(struct zoran *zr, struct v4l2_fmtdesc *fmt, int flag)
|
||||
{
|
||||
int num = -1, i;
|
||||
unsigned int num, i;
|
||||
|
||||
for (i = 0; i < NUM_FORMATS; i++) {
|
||||
if (zoran_formats[i].flags & flag)
|
||||
num++;
|
||||
if (num == fmt->index)
|
||||
break;
|
||||
for (num = i = 0; i < NUM_FORMATS; i++) {
|
||||
if (zoran_formats[i].flags & flag && num++ == fmt->index) {
|
||||
strncpy(fmt->description, zoran_formats[i].name,
|
||||
sizeof(fmt->description) - 1);
|
||||
/* fmt struct pre-zeroed, so adding '\0' not neeed */
|
||||
fmt->pixelformat = zoran_formats[i].fourcc;
|
||||
if (zoran_formats[i].flags & ZORAN_FORMAT_COMPRESSED)
|
||||
fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (fmt->index < 0 /* late, but not too late */ || i == NUM_FORMATS)
|
||||
return -EINVAL;
|
||||
|
||||
strncpy(fmt->description, zoran_formats[i].name, sizeof(fmt->description)-1);
|
||||
fmt->pixelformat = zoran_formats[i].fourcc;
|
||||
if (zoran_formats[i].flags & ZORAN_FORMAT_COMPRESSED)
|
||||
fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
|
||||
return 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int zoran_enum_fmt_vid_cap(struct file *file, void *__fh,
|
||||
|
|
Loading…
Reference in New Issue