media: v4l2-fwnode: simplify v4l2_fwnode_reference_parse_int_props()
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 4 Apr 2018 11:21:04 +0000 (07:21 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Tue, 17 Apr 2018 09:49:58 +0000 (05:49 -0400)
The logic at v4l2_fwnode_reference_parse_int_props() is somewhat
complex and violates Linux coding style, as it does multiple
statements on a single line. That makes static analyzers to
be confused, as warned by smatch:

drivers/media/v4l2-core/v4l2-fwnode.c:832 v4l2_fwnode_reference_parse_int_props() warn: passing zero to 'PTR_ERR'

Simplify the logic, in order to make clearer about what happens
when v4l2_fwnode_reference_get_int_prop() returns an error.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/v4l2-core/v4l2-fwnode.c

index d630640642ee8cf3b838741f53a2c918a0a7494c..3f77aa3180357616b9631095fbbfcc3a7ffc13e4 100644 (file)
@@ -819,17 +819,25 @@ static int v4l2_fwnode_reference_parse_int_props(
        unsigned int index;
        int ret;
 
-       for (index = 0; !IS_ERR((fwnode = v4l2_fwnode_reference_get_int_prop(
-                                        dev_fwnode(dev), prop, index, props,
-                                        nprops))); index++)
+       index = 0;
+       do {
+               fwnode = v4l2_fwnode_reference_get_int_prop(dev_fwnode(dev),
+                                                           prop, index,
+                                                           props, nprops);
+               if (IS_ERR(fwnode)) {
+                       /*
+                        * Note that right now both -ENODATA and -ENOENT may
+                        * signal out-of-bounds access. Return the error in
+                        * cases other than that.
+                        */
+                       if (PTR_ERR(fwnode) != -ENOENT &&
+                           PTR_ERR(fwnode) != -ENODATA)
+                               return PTR_ERR(fwnode);
+                       break;
+               }
                fwnode_handle_put(fwnode);
-
-       /*
-        * Note that right now both -ENODATA and -ENOENT may signal
-        * out-of-bounds access. Return the error in cases other than that.
-        */
-       if (PTR_ERR(fwnode) != -ENOENT && PTR_ERR(fwnode) != -ENODATA)
-               return PTR_ERR(fwnode);
+               index++;
+       } while (1);
 
        ret = v4l2_async_notifier_realloc(notifier,
                                          notifier->num_subdevs + index);