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.verkuil@xxxxxxxxx> Reported-by: Randy Dunlap <rdunlap@xxxxxxxxxxxx> Acked-by: Randy Dunlap <rdunlap@xxxxxxxxxxxx> 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html