media: v4l2-subdev.h: v4l2_subdev_call: use temp __sd variable

The sd argument of this macro can be a more complex expression. Since it
is used 5 times in the macro it can be evaluated that many times as well.

So assign it to a temp variable in the beginning and use that instead.

This also avoids any potential side-effects of evaluating sd.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
Hans Verkuil 2019-02-08 03:49:23 -05:00 committed by Mauro Carvalho Chehab
parent 5515e414f4
commit 3d769df5fc

View File

@ -1093,13 +1093,14 @@ void v4l2_subdev_init(struct v4l2_subdev *sd,
*/
#define v4l2_subdev_call(sd, o, f, args...) \
({ \
struct v4l2_subdev *__sd = (sd); \
int __result; \
if (!(sd)) \
if (!__sd) \
__result = -ENODEV; \
else if (!((sd)->ops->o && (sd)->ops->o->f)) \
else if (!(__sd->ops->o && __sd->ops->o->f)) \
__result = -ENOIOCTLCMD; \
else \
__result = (sd)->ops->o->f((sd), ##args); \
__result = __sd->ops->o->f(__sd, ##args); \
__result; \
})