diff options
author | Andreas Oberritter <obi@linuxtv.org> | 2011-05-09 00:03:34 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-05-20 09:30:56 -0300 |
commit | aff8ab5cc11c2c14b7ae3bb38cbe012c43b7dcef (patch) | |
tree | 278e775b573333939aa87b023fa4d9ff87853404 /drivers/media/dvb/dvb-core | |
parent | 35d451b9990cf3386c515d371aafff5a0df46fd7 (diff) |
[media] DVB: return meaningful error codes in dvb_frontend
- 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>
Diffstat (limited to 'drivers/media/dvb/dvb-core')
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 31e2c0d45db3..95c3fec6ae40 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c @@ -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))) { |