diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2017-07-19 15:23:27 -0400 | 
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-07-26 13:43:17 -0400 | 
| commit | da48c948c263c9d87dfc64566b3373a858cc8aa2 (patch) | |
| tree | 55556bb4644cbfcff2134d02daeb0e8c873079d7 /include | |
| parent | 14330d7f08bab92029f0c95c70fe200e8d76b31e (diff) | |
media: fix warning on v4l2_subdev_call() result interpreted as bool
v4l2_subdev_call is a macro returning whatever the callback return
type is, usually 'int'. With gcc-7 and ccache, this can lead to
many wanings like:
media/platform/pxa_camera.c: In function 'pxa_mbus_build_fmts_xlate':
media/platform/pxa_camera.c:766:27: error: ?: using integer constants in boolean context [-Werror=int-in-bool-context]
  while (!v4l2_subdev_call(subdev, pad, enum_mbus_code, NULL, &code)) {
media/atomisp/pci/atomisp2/atomisp_cmd.c: In function 'atomisp_s_ae_window':
media/atomisp/pci/atomisp2/atomisp_cmd.c:6414:52: error: ?: using integer constants in boolean context [-Werror=int-in-bool-context]
  if (v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
The problem here is that after preprocessing, we the compiler
sees a variation of
	if (a ? 0 : 2)
that it thinks is suspicious.
This replaces the ?: operator with an different expression that
does the same thing in a more easily readable way that cannot
tigger the warning
Link: https://lkml.org/lkml/2017/7/14/156
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/media/v4l2-subdev.h | 12 | 
1 files changed, 10 insertions, 2 deletions
| diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index 0f92ebd2d710..e83872078376 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h @@ -982,8 +982,16 @@ void v4l2_subdev_init(struct v4l2_subdev *sd,   * Example: err = v4l2_subdev_call(sd, video, s_std, norm);   */  #define v4l2_subdev_call(sd, o, f, args...)				\ -	(!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ?	\ -		(sd)->ops->o->f((sd), ##args) : -ENOIOCTLCMD)) +	({								\ +		int __result;						\ +		if (!(sd))						\ +			__result = -ENODEV;				\ +		else if (!((sd)->ops->o && (sd)->ops->o->f))		\ +			__result = -ENOIOCTLCMD;			\ +		else							\ +			__result = (sd)->ops->o->f((sd), ##args);	\ +		__result;						\ +	})  #define v4l2_subdev_has_op(sd, o, f) \  	((sd)->ops->o && (sd)->ops->o->f) | 
