Re: [PATCH] Use a named union in struct v4l2_ioctl_info

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux