summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Roitzsch <mroi@users.sourceforge.net>2004-07-04 21:01:26 +0000
committerMichael Roitzsch <mroi@users.sourceforge.net>2004-07-04 21:01:26 +0000
commit3be3b0be12c8055109cdfbf69789a35b5bfb68dd (patch)
tree5a6ac4cfba536e1753a5afb93e8c29a4bac00e6f
parentde4c0681883e71922f98a05f6fc34e8717a82597 (diff)
downloadxine-lib-3be3b0be12c8055109cdfbf69789a35b5bfb68dd.tar.gz
xine-lib-3be3b0be12c8055109cdfbf69789a35b5bfb68dd.tar.bz2
better error checking when testing cdrom and dvd devices, not being able
to open the device does not mean it's not accessible, there might just be no disk inside (closes bug #984594) CVS patchset: 6768 CVS date: 2004/07/04 21:01:26
-rw-r--r--src/xine-utils/xine_check.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/xine-utils/xine_check.c b/src/xine-utils/xine_check.c
index 91fb40186..14fb424ac 100644
--- a/src/xine-utils/xine_check.c
+++ b/src/xine-utils/xine_check.c
@@ -220,10 +220,17 @@ xine_health_check_t* _x_health_check_cdrom (xine_health_check_t* hc) {
}
if ( (fd = open(hc->cdrom_dev, O_RDWR)) < 0) {
- set_hc_result (hc, XINE_HEALTH_CHECK_FAIL, "FAILED - %s permissions are not sufficient\n.", hc->cdrom_dev);
- return hc;
- }
- close(fd);
+ switch (errno) {
+ case EACCES:
+ set_hc_result (hc, XINE_HEALTH_CHECK_FAIL, "FAILED - %s permissions are not sufficient\n.", hc->cdrom_dev);
+ return hc;
+ case ENXIO:
+ case ENODEV:
+ set_hc_result (hc, XINE_HEALTH_CHECK_FAIL, "FAILED - there is no device behind %s\n.", hc->cdrom_dev);
+ return hc;
+ }
+ } else
+ close(fd);
hc->status = XINE_HEALTH_CHECK_OK;
return hc;
@@ -249,10 +256,17 @@ xine_health_check_t* _x_health_check_dvdrom(xine_health_check_t* hc) {
}
if ( (fd = open(hc->dvd_dev, O_RDWR)) < 0) {
- set_hc_result (hc, XINE_HEALTH_CHECK_FAIL, "FAILED - %s permissions are not sufficient\n.", hc->cdrom_dev);
- return hc;
- }
- close(fd);
+ switch (errno) {
+ case EACCES:
+ set_hc_result (hc, XINE_HEALTH_CHECK_FAIL, "FAILED - %s permissions are not sufficient\n.", hc->dvd_dev);
+ return hc;
+ case ENXIO:
+ case ENODEV:
+ set_hc_result (hc, XINE_HEALTH_CHECK_FAIL, "FAILED - there is no device behind %s\n.", hc->dvd_dev);
+ return hc;
+ }
+ } else
+ close(fd);
hc->status = XINE_HEALTH_CHECK_OK;
return hc;