[media] gspca - stk014 / t613: Accept the index 0 in querymenu
authorJean-François Moine <moinejf@free.fr>
Tue, 17 May 2011 06:58:57 +0000 (03:58 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 21 May 2011 12:33:31 +0000 (09:33 -0300)
This patch fixes the kernel bug #15122.

Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/stk014.c
drivers/media/video/gspca/t613.c

index 87be52b5e1e3666528226966d5d7456d369faddb..763747700f10be0ed6e7731c26de841b0f22bcbb 100644 (file)
@@ -436,17 +436,14 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
 static int sd_querymenu(struct gspca_dev *gspca_dev,
                        struct v4l2_querymenu *menu)
 {
+       static const char *freq_nm[3] = {"NoFliker", "50 Hz", "60 Hz"};
+
        switch (menu->id) {
        case V4L2_CID_POWER_LINE_FREQUENCY:
-               switch (menu->index) {
-               case 1:         /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */
-                       strcpy((char *) menu->name, "50 Hz");
-                       return 0;
-               case 2:         /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */
-                       strcpy((char *) menu->name, "60 Hz");
-                       return 0;
-               }
-               break;
+               if ((unsigned) menu->index >= ARRAY_SIZE(freq_nm))
+                       break;
+               strcpy((char *) menu->name, freq_nm[menu->index]);
+               return 0;
        }
        return -EINVAL;
 }
index a3eccd81576625119350e6177cb834d72c7ba652..7e762d55109915d52e0d7306e554f2210d2f6461 100644 (file)
@@ -92,8 +92,6 @@ static int sd_setmirror(struct gspca_dev *gspca_dev, __s32 val);
 static int sd_getmirror(struct gspca_dev *gspca_dev, __s32 *val);
 static int sd_seteffect(struct gspca_dev *gspca_dev, __s32 val);
 static int sd_geteffect(struct gspca_dev *gspca_dev, __s32 *val);
-static int sd_querymenu(struct gspca_dev *gspca_dev,
-                       struct v4l2_querymenu *menu);
 
 static const struct ctrl sd_ctrls[] = {
        {
@@ -1379,17 +1377,14 @@ static int sd_getlowlight(struct gspca_dev *gspca_dev, __s32 *val)
 static int sd_querymenu(struct gspca_dev *gspca_dev,
                        struct v4l2_querymenu *menu)
 {
+       static const char *freq_nm[3] = {"NoFliker", "50 Hz", "60 Hz"};
+
        switch (menu->id) {
        case V4L2_CID_POWER_LINE_FREQUENCY:
-               switch (menu->index) {
-               case 1:         /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */
-                       strcpy((char *) menu->name, "50 Hz");
-                       return 0;
-               case 2:         /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */
-                       strcpy((char *) menu->name, "60 Hz");
-                       return 0;
-               }
-               break;
+               if ((unsigned) menu->index >= ARRAY_SIZE(freq_nm))
+                       break;
+               strcpy((char *) menu->name, freq_nm[menu->index]);
+               return 0;
        case V4L2_CID_EFFECTS:
                if ((unsigned) menu->index < ARRAY_SIZE(effects_control)) {
                        strncpy((char *) menu->name,