diff options
Diffstat (limited to 'libsi')
-rw-r--r-- | libsi/Makefile | 4 | ||||
-rw-r--r-- | libsi/si.c | 35 | ||||
-rw-r--r-- | libsi/util.c | 5 |
3 files changed, 26 insertions, 18 deletions
diff --git a/libsi/Makefile b/libsi/Makefile index fdc630d..1554217 100644 --- a/libsi/Makefile +++ b/libsi/Makefile @@ -1,12 +1,12 @@ # # Makefile for a libsi # -# $Id: Makefile 1.4 2005/05/05 11:01:46 kls Exp $ +# $Id: Makefile 1.5 2005/05/29 11:47:12 kls Exp $ ### The C++ compiler and options: CXX ?= g++ -CXXFLAGS ?= -O2 -g -Wall -Woverloaded-virtual +CXXFLAGS ?= -fPIC -O2 -g -Wall -Woverloaded-virtual AR = ar ARFLAGS = ru RANLIB = ranlib @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: si.c 1.13 2004/10/16 15:12:57 kls Exp $ + * $Id: si.c 1.14 2005/05/28 14:11:16 kls Exp $ * * ***************************************************************************/ @@ -114,9 +114,10 @@ Descriptor *DescriptorLoop::getNext(Iterator &it) { Descriptor *DescriptorLoop::getNext(Iterator &it, DescriptorTag tag, bool returnUnimplemetedDescriptor) { Descriptor *d=0; - if (isValid() && it.i<getLength()) { + int len; + if (isValid() && it.i<(len=getLength())) { const unsigned char *p=data.getData(it.i); - const unsigned char *end=p+getLength()-it.i; + const unsigned char *end=p+len-it.i; while (p < end) { if (Descriptor::getDescriptorTag(p) == tag) { d=createDescriptor(it.i, returnUnimplemetedDescriptor); @@ -132,9 +133,10 @@ Descriptor *DescriptorLoop::getNext(Iterator &it, DescriptorTag tag, bool return Descriptor *DescriptorLoop::getNext(Iterator &it, DescriptorTag *tags, int arrayLength, bool returnUnimplementedDescriptor) { Descriptor *d=0; - if (isValid() && it.i<getLength()) { + int len; + if (isValid() && it.i<(len=getLength())) { const unsigned char *p=data.getData(it.i); - const unsigned char *end=p+getLength()-it.i; + const unsigned char *end=p+len-it.i; while (p < end) { for (int u=0; u<arrayLength;u++) if (Descriptor::getDescriptorTag(p) == tags[u]) { @@ -211,15 +213,17 @@ bool DescriptorGroup::isComplete() { } char *String::getText() { - if (getLength() < 0 || getLength() >4095) + int len=getLength(); + if (len < 0 || len > 4095) return strdup("text error"); // caller will delete it! - char *data=new char(getLength()+1); - decodeText(data, getLength()+1); + char *data=new char(len+1); + decodeText(data, len+1); return data; } char *String::getText(char *buffer, int size) { - if (getLength() < 0 || getLength() >= size) { + int len=getLength(); + if (len < 0 || len >= size) { strncpy(buffer, "text error", size); buffer[size-1] = 0; return buffer; @@ -230,7 +234,8 @@ char *String::getText(char *buffer, int size) { //taken from VDR, Copyright Klaus Schmidinger <kls@cadsoft.de> char *String::getText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion) { - if (getLength() < 0 || getLength() >= sizeBuffer) { + int len=getLength(); + if (len < 0 || len >= sizeBuffer) { strncpy(buffer, "text error", sizeBuffer); buffer[sizeBuffer-1] = 0; *shortVersion = 0; @@ -254,7 +259,8 @@ void String::decodeText(char *buffer, int size) { if (*from == 0x10) from += 3; // skips code table info - for (int i = 0; i < getLength(); i++) { + int len=getLength(); + for (int i = 0; i < len; i++) { if (*from == 0) break; if ( ((' ' <= *from) && (*from <= '~')) @@ -281,9 +287,8 @@ void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int si if (*from == 0x10) from += 3; // skips code table info - for (int i = 0; i < getLength(); i++) { - if (*from == 0) - break; + int len=getLength(); + for (int i = 0; i < len; i++) { if ( ((' ' <= *from) && (*from <= '~')) || (*from == '\n') || (0xA0 <= *from) @@ -299,6 +304,8 @@ void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int si IsShortName++; else if (*from == 0x87) IsShortName--; + else if (*from == 0) + break; from++; if (to - buffer >= sizeBuffer - 1 || toShort - shortVersion >= sizeShortVersion - 1) break; diff --git a/libsi/util.c b/libsi/util.c index c6ad234..3465794 100644 --- a/libsi/util.c +++ b/libsi/util.c @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: util.c 1.4 2004/10/16 09:58:41 kls Exp $ + * $Id: util.c 1.5 2005/05/28 14:15:29 kls Exp $ * * ***************************************************************************/ @@ -263,9 +263,10 @@ u_int32_t CRC32::crc_table[256] = { u_int32_t CRC32::crc32 (const char *d, int len, u_int32_t crc) { register int i; + const unsigned char *u=(unsigned char*)d; // Saves '& 0xff' for (i=0; i<len; i++) - crc = (crc << 8) ^ crc_table[((crc >> 24) ^ *d++) & 0xff]; + crc = (crc << 8) ^ crc_table[((crc >> 24) ^ *u++)]; return crc; } |