mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed handling text lengths for itemized EPG texts
This commit is contained in:
parent
458f9bba13
commit
9ba2825032
1
HISTORY
1
HISTORY
@ -2750,3 +2750,4 @@ Video Disk Recorder Revision History
|
|||||||
|
|
||||||
- Fixed a memory leak in thread handling when using NPTL (thanks to Jon Burgess).
|
- Fixed a memory leak in thread handling when using NPTL (thanks to Jon Burgess).
|
||||||
- Fixed handling Setup.RecordDolbyDigital, which was broken since version 1.1.6.
|
- Fixed handling Setup.RecordDolbyDigital, which was broken since version 1.1.6.
|
||||||
|
- Fixed handling text lengths for itemized EPG texts (thanks to Marcel Wiesweg).
|
||||||
|
4
eit.c
4
eit.c
@ -8,7 +8,7 @@
|
|||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
|
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
|
||||||
*
|
*
|
||||||
* $Id: eit.c 1.93 2004/03/13 13:54:20 kls Exp $
|
* $Id: eit.c 1.94 2004/03/20 10:53:23 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "eit.h"
|
#include "eit.h"
|
||||||
@ -197,7 +197,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data)
|
|||||||
pEvent->SetShortText(ShortEventDescriptor->text.getText(buffer));
|
pEvent->SetShortText(ShortEventDescriptor->text.getText(buffer));
|
||||||
}
|
}
|
||||||
if (ExtendedEventDescriptors) {
|
if (ExtendedEventDescriptors) {
|
||||||
char buffer[ExtendedEventDescriptors->getMaximumTextLength()];
|
char buffer[ExtendedEventDescriptors->getMaximumTextLength(": ")];
|
||||||
pEvent->SetDescription(ExtendedEventDescriptors->getText(buffer, ": "));
|
pEvent->SetDescription(ExtendedEventDescriptors->getText(buffer, ": "));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
* $Id: descriptor.c 1.10 2004/03/13 15:08:12 kls Exp $
|
* $Id: descriptor.c 1.11 2004/03/20 10:51:49 kls Exp $
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -78,12 +78,13 @@ void ExtendedEventDescriptor::Item::Parse() {
|
|||||||
return ret;
|
return ret;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
int ExtendedEventDescriptors::getMaximumTextLength() {
|
int ExtendedEventDescriptors::getMaximumTextLength(const char *separation1, const char *separation2) {
|
||||||
return getMaximumTextPlainLength()+getMaximumTextItemizedLength();
|
//add length of plain text, of itemized text with separators, and for one separator between the two fields.
|
||||||
|
return getMaximumTextPlainLength()+getMaximumTextItemizedLength(separation1, separation2)+strlen(separation2);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *ExtendedEventDescriptors::getText(const char *separation1, const char *separation2) {
|
char *ExtendedEventDescriptors::getText(const char *separation1, const char *separation2) {
|
||||||
char *text=new char[getMaximumTextLength()+strlen(separation1)+strlen(separation2)];
|
char *text=new char[getMaximumTextLength(separation1, separation2)];
|
||||||
return getText(text, separation1, separation2);
|
return getText(text, separation1, separation2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,20 +172,21 @@ char *ExtendedEventDescriptors::getTextPlain(char *buffer) {
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ExtendedEventDescriptors::getMaximumTextItemizedLength() {
|
int ExtendedEventDescriptors::getMaximumTextItemizedLength(const char *separation1, const char *separation2) {
|
||||||
int ret=0;
|
int ret=0;
|
||||||
|
int sepLength=strlen(separation1)+strlen(separation2)-2;
|
||||||
for (int i=0;i<length;i++) {
|
for (int i=0;i<length;i++) {
|
||||||
ExtendedEventDescriptor *d=(ExtendedEventDescriptor *)array[i];
|
ExtendedEventDescriptor *d=(ExtendedEventDescriptor *)array[i];
|
||||||
if (!d)
|
if (!d)
|
||||||
continue;
|
continue;
|
||||||
//the size for the two separating characters is included ;-)
|
//The length includes two 8-bit length fields which have already been subtracted from sepLength
|
||||||
ret+=d->itemLoop.getLength();
|
ret+=d->itemLoop.getLength()+sepLength;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *ExtendedEventDescriptors::getTextItemized(const char *separation1, const char *separation2) {
|
char *ExtendedEventDescriptors::getTextItemized(const char *separation1, const char *separation2) {
|
||||||
char *text=new char[getMaximumTextItemizedLength()+strlen(separation1)+strlen(separation2)];
|
char *text=new char[getMaximumTextItemizedLength(separation1, separation2)];
|
||||||
return getTextItemized(text, separation1, separation2);
|
return getTextItemized(text, separation1, separation2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
* $Id: descriptor.h 1.7 2004/03/07 11:13:54 kls Exp $
|
* $Id: descriptor.h 1.8 2004/03/20 10:52:22 kls Exp $
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ private:
|
|||||||
|
|
||||||
class ExtendedEventDescriptors : public DescriptorGroup {
|
class ExtendedEventDescriptors : public DescriptorGroup {
|
||||||
public:
|
public:
|
||||||
int getMaximumTextLength();
|
int getMaximumTextLength(const char *separation1="\t", const char *separation2="\n");
|
||||||
//Returns a concatenated version of first the non-itemized and then the itemized text
|
//Returns a concatenated version of first the non-itemized and then the itemized text
|
||||||
//same semantics as with SI::String
|
//same semantics as with SI::String
|
||||||
char *getText(const char *separation1="\t", const char *separation2="\n");
|
char *getText(const char *separation1="\t", const char *separation2="\n");
|
||||||
@ -66,7 +66,7 @@ public:
|
|||||||
//Between the description and the text the separation1 character is used,
|
//Between the description and the text the separation1 character is used,
|
||||||
//separation2 used between two pairs. Example:
|
//separation2 used between two pairs. Example:
|
||||||
//Director\tSteven Spielberg\nActor\tMichael Mendl\n
|
//Director\tSteven Spielberg\nActor\tMichael Mendl\n
|
||||||
int getMaximumTextItemizedLength();
|
int getMaximumTextItemizedLength(const char *separation1="\t", const char *separation2="\n");
|
||||||
char *getTextItemized(const char *separation1="\t", const char *separation2="\n");
|
char *getTextItemized(const char *separation1="\t", const char *separation2="\n");
|
||||||
char *getTextItemized(char *buffer, const char *separation1="\t", const char *separation2="\n");
|
char *getTextItemized(char *buffer, const char *separation1="\t", const char *separation2="\n");
|
||||||
//returns the itemized text pair by pair. Maximum length for buffers is 256.
|
//returns the itemized text pair by pair. Maximum length for buffers is 256.
|
||||||
|
Loading…
Reference in New Issue
Block a user