On 07/12/2012 09:06 AM, Hans Verkuil wrote:

> Hi Mauro,
> 
> struct v4l2_ioctl_info uses an anonymous union, which is initialized
> in the v4l2_ioctls table.
> 
> Unfortunately gcc < 4.6 uses a non-standard syntax for that, so trying to
> compile v4l2-ioctl.c with an older gcc will fail.
> 
> It is possible to work around this by testing the gcc version, but in this
> case it is easier to make the union named since it is used in only a few
> places.
> 
> Randy, Stephen, this patch should solve the v4l2-ioctl.c compilation problem
> in linux-next. Since Mauro is still on holiday you'll have to apply it 
> manually.
> 
> Regards,
> 
>       Hans
> 
> Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>


Reported-by: Randy Dunlap <rdun...@xenotime.net>
Acked-by: Randy Dunlap <rdun...@xenotime.net>

Thanks.


> 
> diff --git a/drivers/media/video/v4l2-ioctl.c 
> b/drivers/media/video/v4l2-ioctl.c
> index 70e0efb..812beb0 100644
> --- a/drivers/media/video/v4l2-ioctl.c
> +++ b/drivers/media/video/v4l2-ioctl.c
> @@ -1806,7 +1806,7 @@ struct v4l2_ioctl_info {
>               u32 offset;
>               int (*func)(const struct v4l2_ioctl_ops *ops,
>                               struct file *file, void *fh, void *p);
> -     };
> +     } u;
>       void (*debug)(const void *arg, bool write_only);
>  };
>  
> @@ -1831,7 +1831,7 @@ struct v4l2_ioctl_info {
>               .ioctl = _ioctl,                                        \
>               .flags = _flags | INFO_FL_STD,                          \
>               .name = #_ioctl,                                        \
> -             .offset = offsetof(struct v4l2_ioctl_ops, _vidioc),     \
> +             .u.offset = offsetof(struct v4l2_ioctl_ops, _vidioc),   \
>               .debug = _debug,                                        \
>       }
>  
> @@ -1840,7 +1840,7 @@ struct v4l2_ioctl_info {
>               .ioctl = _ioctl,                                        \
>               .flags = _flags | INFO_FL_FUNC,                         \
>               .name = #_ioctl,                                        \
> -             .func = _func,                                          \
> +             .u.func = _func,                                        \
>               .debug = _debug,                                        \
>       }
>  
> @@ -2038,11 +2038,11 @@ static long __video_do_ioctl(struct file *file,
>       if (info->flags & INFO_FL_STD) {
>               typedef int (*vidioc_op)(struct file *file, void *fh, void *p);
>               const void *p = vfd->ioctl_ops;
> -             const vidioc_op *vidioc = p + info->offset;
> +             const vidioc_op *vidioc = p + info->u.offset;
>  
>               ret = (*vidioc)(file, fh, arg);
>       } else if (info->flags & INFO_FL_FUNC) {
> -             ret = info->func(ops, file, fh, arg);
> +             ret = info->u.func(ops, file, fh, arg);
>       } else if (!ops->vidioc_default) {
>               ret = -ENOTTY;
>       } else {
>       
> --



-- 
~Randy
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to