[media] DVB: return meaningful error codes in dvb_frontend
authorAndreas Oberritter <obi@linuxtv.org>
Sun, 8 May 2011 23:03:34 +0000 (00:03 +0100)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 20 May 2011 12:30:56 +0000 (09:30 -0300)
- Return values should not be ORed. Abort early instead.
- Return -EINVAL instead of -1.

Signed-off-by: Andreas Oberritter <obi@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-core/dvb_frontend.c

index 31e2c0d45db32777f58bd6bbcd0be502dd94ffd0..95c3fec6ae40f0d60f07ebbf0c50a6515d36a83e 100644 (file)
@@ -1325,12 +1325,12 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
                tvp->u.data = fe->dtv_property_cache.isdbs_ts_id;
                break;
        default:
-               r = -1;
+               return -EINVAL;
        }
 
        dtv_property_dump(tvp);
 
-       return r;
+       return 0;
 }
 
 static int dtv_property_process_set(struct dvb_frontend *fe,
@@ -1342,11 +1342,11 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
        dtv_property_dump(tvp);
 
        /* Allow the frontend to validate incoming properties */
-       if (fe->ops.set_property)
+       if (fe->ops.set_property) {
                r = fe->ops.set_property(fe, tvp);
-
-       if (r < 0)
-               return r;
+               if (r < 0)
+                       return r;
+       }
 
        switch(tvp->cmd) {
        case DTV_CLEAR:
@@ -1365,7 +1365,7 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
                dprintk("%s() Finalised property cache\n", __func__);
                dtv_property_cache_submit(fe);
 
-               r |= dvb_frontend_ioctl_legacy(file, FE_SET_FRONTEND,
+               r = dvb_frontend_ioctl_legacy(file, FE_SET_FRONTEND,
                        &fepriv->parameters);
                break;
        case DTV_FREQUENCY:
@@ -1480,7 +1480,7 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
                fe->dtv_property_cache.isdbs_ts_id = tvp->u.data;
                break;
        default:
-               r = -1;
+               return -EINVAL;
        }
 
        return r;
@@ -1554,8 +1554,10 @@ static int dvb_frontend_ioctl_properties(struct file *file,
                }
 
                for (i = 0; i < tvps->num; i++) {
-                       (tvp + i)->result = dtv_property_process_set(fe, tvp + i, file);
-                       err |= (tvp + i)->result;
+                       err = dtv_property_process_set(fe, tvp + i, file);
+                       if (err < 0)
+                               goto out;
+                       (tvp + i)->result = err;
                }
 
                if(fe->dtv_property_cache.state == DTV_TUNE)
@@ -1586,8 +1588,10 @@ static int dvb_frontend_ioctl_properties(struct file *file,
                }
 
                for (i = 0; i < tvps->num; i++) {
-                       (tvp + i)->result = dtv_property_process_get(fe, tvp + i, file);
-                       err |= (tvp + i)->result;
+                       err = dtv_property_process_get(fe, tvp + i, file);
+                       if (err < 0)
+                               goto out;
+                       (tvp + i)->result = err;
                }
 
                if (copy_to_user(tvps->props, tvp, tvps->num * sizeof(struct dtv_property))) {