Skip to content

Commit

Permalink
[media] Use a named union in struct v4l2_ioctl_info
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reported-by: Randy Dunlap <rdunlap@xenotime.net>
Acked-by: Randy Dunlap <rdunlap@xenotime.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Jul 31, 2012
1 parent a4de5f0 commit 26ddcbc
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions drivers/media/video/v4l2-ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1891,7 +1891,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);
};

Expand All @@ -1916,7 +1916,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, \
}

Expand All @@ -1925,7 +1925,7 @@ struct v4l2_ioctl_info {
.ioctl = _ioctl, \
.flags = _flags | INFO_FL_FUNC, \
.name = #_ioctl, \
.func = _func, \
.u.func = _func, \
.debug = _debug, \
}

Expand Down Expand Up @@ -2124,11 +2124,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 {
Expand Down

0 comments on commit 26ddcbc

Please sign in to comment.