summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2013-02-14 13:21:34 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2013-02-14 13:21:34 +0100
commit62dfd2f996cb9480ea2c1db054a2fa657de0900b (patch)
treef5db8881db9705ca3dc2fd77269332f706dbe950
parent9455b9a2b09d12746e4de1ba7f47d9383ecda0a8 (diff)
downloadvdr-62dfd2f996cb9480ea2c1db054a2fa657de0900b.tar.gz
vdr-62dfd2f996cb9480ea2c1db054a2fa657de0900b.tar.bz2
No longer checking for EOPNOTSUPP in cDvbTuner::GetSignalQuality()
-rw-r--r--HISTORY3
-rw-r--r--dvbdevice.c14
2 files changed, 7 insertions, 10 deletions
diff --git a/HISTORY b/HISTORY
index 68c2c6ae..37136f79 100644
--- a/HISTORY
+++ b/HISTORY
@@ -7612,3 +7612,6 @@ Video Disk Recorder Revision History
- Updated the Lithuanian OSD texts (thanks to Valdemaras Pipiras).
- The timeout for trying to switch to a valid programme is now reset immediately once
a programme has been found.
+- No longer checking for EOPNOTSUPP in cDvbTuner::GetSignalQuality() to avoid breaking
+ this function in case the driver suddenly decides to return a different errno value
+ if an operation is not supported.
diff --git a/dvbdevice.c b/dvbdevice.c
index 27482e8b..af374c5d 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 2.77 2012/12/30 13:08:41 kls Exp $
+ * $Id: dvbdevice.c 2.78 2013/02/14 13:21:34 kls Exp $
*/
#include "dvbdevice.h"
@@ -583,15 +583,13 @@ int cDvbTuner::GetSignalQuality(void) const
while (1) {
if (ioctl(fd_frontend, FE_READ_SNR, &Snr) != -1)
break;
- if (errno == EOPNOTSUPP) {
+ if (errno != EINTR) {
Snr = 0xFFFF;
#ifdef DEBUG_SIGNALQUALITY
HasSnr = false;
#endif
break;
}
- if (errno != EINTR)
- return -1;
}
#ifdef DEBUG_SIGNALQUALITY
bool HasBer = true;
@@ -600,15 +598,13 @@ int cDvbTuner::GetSignalQuality(void) const
while (1) {
if (ioctl(fd_frontend, FE_READ_BER, &Ber) != -1)
break;
- if (errno == EOPNOTSUPP) {
+ if (errno != EINTR) {
Ber = 0;
#ifdef DEBUG_SIGNALQUALITY
HasBer = false;
#endif
break;
}
- if (errno != EINTR)
- return -1;
}
#ifdef DEBUG_SIGNALQUALITY
bool HasUnc = true;
@@ -617,15 +613,13 @@ int cDvbTuner::GetSignalQuality(void) const
while (1) {
if (ioctl(fd_frontend, FE_READ_UNCORRECTED_BLOCKS, &Unc) != -1)
break;
- if (errno == EOPNOTSUPP) {
+ if (errno != EINTR) {
Unc = 0;
#ifdef DEBUG_SIGNALQUALITY
HasUnc = false;
#endif
break;
}
- if (errno != EINTR)
- return -1;
}
uint16_t MaxSnr = 0xFFFF; // Let's assume the default is using the entire range.
// Use the subsystemId to identify individual devices in case they need