From 9ba28250325bd0f16a4d797482b2fdc42024bce7 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 20 Mar 2004 10:56:24 +0100 Subject: Fixed handling text lengths for itemized EPG texts --- libsi/descriptor.c | 18 ++++++++++-------- libsi/descriptor.h | 6 +++--- 2 files changed, 13 insertions(+), 11 deletions(-) (limited to 'libsi') diff --git a/libsi/descriptor.c b/libsi/descriptor.c index 82e2a8f3..51037749 100644 --- a/libsi/descriptor.c +++ b/libsi/descriptor.c @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (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; }*/ -int ExtendedEventDescriptors::getMaximumTextLength() { - return getMaximumTextPlainLength()+getMaximumTextItemizedLength(); +int ExtendedEventDescriptors::getMaximumTextLength(const char *separation1, const char *separation2) { + //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 *text=new char[getMaximumTextLength()+strlen(separation1)+strlen(separation2)]; + char *text=new char[getMaximumTextLength(separation1, separation2)]; return getText(text, separation1, separation2); } @@ -171,20 +172,21 @@ char *ExtendedEventDescriptors::getTextPlain(char *buffer) { return buffer; } -int ExtendedEventDescriptors::getMaximumTextItemizedLength() { +int ExtendedEventDescriptors::getMaximumTextItemizedLength(const char *separation1, const char *separation2) { int ret=0; + int sepLength=strlen(separation1)+strlen(separation2)-2; for (int i=0;iitemLoop.getLength(); + //The length includes two 8-bit length fields which have already been subtracted from sepLength + ret+=d->itemLoop.getLength()+sepLength; } return ret; } 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); } diff --git a/libsi/descriptor.h b/libsi/descriptor.h index 3368b0a9..692563fc 100644 --- a/libsi/descriptor.h +++ b/libsi/descriptor.h @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (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 { 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 //same semantics as with SI::String 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, //separation2 used between two pairs. Example: //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(char *buffer, const char *separation1="\t", const char *separation2="\n"); //returns the itemized text pair by pair. Maximum length for buffers is 256. -- cgit v1.2.3