[vdr] polarization character case in channels.conf

Klaus Schmidinger Klaus.Schmidinger at tvdr.de
Mon Dec 3 15:12:02 CET 2012


On 08.11.2012 21:14, Klaus Schmidinger wrote:
> On 08.11.2012, at 20:43, Stefan Huelswitt <s.huelswitt at gmx.de> wrote:
>
>> Hi,
>>
>> I can confirm this problem, at least in 1.7.27 (which I'm using at the moment). I use the attached patch to resolve it.
>>
>> Am 08.11.2012 10:19, schrieb Klaus Schmidinger:
>>>>> Well, there is a toupper() in cDvbTransponderParameters::Parse(), so
>>>>> I would expect that all characters can be given in either upper- or
>>>>> lowercase.
>>
>> Right, but the toupper() is only in the comparision, but it passes the original (lowercase) value. And later during tuning the comparision fails.
>
> Ah, now I see why it works here - I'm using DiSEqC. Like apparently almost
> everybody else, otherwise this problem should have surfaced much earlier ;-)

Since there are also other places where cDvbTransponderParameters::Polarization() is
used, I'm going to fix the case right where the original string is parsed:

--- dvbdevice.c 2012/10/07 11:11:30     2.74
+++ dvbdevice.c 2012/12/03 14:07:01
@@ -261,16 +261,16 @@
            case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
            case 'D': s = ParseParameter(s, coderateL, CoderateValues); break;
            case 'G': s = ParseParameter(s, guard, GuardValues); break;
-          case 'H': polarization = *s++; break;
+          case 'H': polarization = 'H'; s++; break;
            case 'I': s = ParseParameter(s, inversion, InversionValues); break;
-          case 'L': polarization = *s++; break;
+          case 'L': polarization = 'L'; s++; break;
            case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
            case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
            case 'P': s = ParseParameter(s, plpId); break;
-          case 'R': polarization = *s++; break;
+          case 'R': polarization = 'R'; s++; break;
            case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter
            case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
-          case 'V': polarization = *s++; break;
+          case 'V': polarization = 'V'; s++; break;
            case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
            default: esyslog("ERROR: unknown parameter key '%c'", *s);
                     return false;

Klaus



More information about the vdr mailing list