mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Avoiding unnecessary calls to getLength() in libsi/si.c, and avoiding the '& 0xff' in CRC32::crc32() of libsi/util.c
This commit is contained in:
parent
ae3da0bcec
commit
1e63fa4174
@ -1362,3 +1362,5 @@ Georg Acher <acher@baycom.de>
|
|||||||
for making tChannelID::operator==() inline for better performance
|
for making tChannelID::operator==() inline for better performance
|
||||||
for introducing cListBase::count for better performance
|
for introducing cListBase::count for better performance
|
||||||
for a patch that was used to implement hash tables to speed up cSchedule::GetEvent()
|
for a patch that was used to implement hash tables to speed up cSchedule::GetEvent()
|
||||||
|
for avoiding unnecessary calls to getLength() in libsi/si.c, and avoiding the
|
||||||
|
'& 0xff' in CRC32::crc32() of libsi/util.c
|
||||||
|
2
HISTORY
2
HISTORY
@ -3570,3 +3570,5 @@ Video Disk Recorder Revision History
|
|||||||
the schedule it is in.
|
the schedule it is in.
|
||||||
- Now using hash tables to speed up cSchedule::GetEvent() (partially based on
|
- Now using hash tables to speed up cSchedule::GetEvent() (partially based on
|
||||||
a patch from Georg Acher).
|
a patch from Georg Acher).
|
||||||
|
- Avoiding unnecessary calls to getLength() in libsi/si.c, and avoiding the
|
||||||
|
'& 0xff' in CRC32::crc32() of libsi/util.c (thanks to Georg Acher).
|
||||||
|
35
libsi/si.c
35
libsi/si.c
@ -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: 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 *DescriptorLoop::getNext(Iterator &it, DescriptorTag tag, bool returnUnimplemetedDescriptor) {
|
||||||
Descriptor *d=0;
|
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 *p=data.getData(it.i);
|
||||||
const unsigned char *end=p+getLength()-it.i;
|
const unsigned char *end=p+len-it.i;
|
||||||
while (p < end) {
|
while (p < end) {
|
||||||
if (Descriptor::getDescriptorTag(p) == tag) {
|
if (Descriptor::getDescriptorTag(p) == tag) {
|
||||||
d=createDescriptor(it.i, returnUnimplemetedDescriptor);
|
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 *DescriptorLoop::getNext(Iterator &it, DescriptorTag *tags, int arrayLength, bool returnUnimplementedDescriptor) {
|
||||||
Descriptor *d=0;
|
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 *p=data.getData(it.i);
|
||||||
const unsigned char *end=p+getLength()-it.i;
|
const unsigned char *end=p+len-it.i;
|
||||||
while (p < end) {
|
while (p < end) {
|
||||||
for (int u=0; u<arrayLength;u++)
|
for (int u=0; u<arrayLength;u++)
|
||||||
if (Descriptor::getDescriptorTag(p) == tags[u]) {
|
if (Descriptor::getDescriptorTag(p) == tags[u]) {
|
||||||
@ -211,15 +213,17 @@ bool DescriptorGroup::isComplete() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *String::getText() {
|
char *String::getText() {
|
||||||
if (getLength() < 0 || getLength() >4095)
|
int len=getLength();
|
||||||
|
if (len < 0 || len > 4095)
|
||||||
return strdup("text error"); // caller will delete it!
|
return strdup("text error"); // caller will delete it!
|
||||||
char *data=new char(getLength()+1);
|
char *data=new char(len+1);
|
||||||
decodeText(data, getLength()+1);
|
decodeText(data, len+1);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *String::getText(char *buffer, int size) {
|
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);
|
strncpy(buffer, "text error", size);
|
||||||
buffer[size-1] = 0;
|
buffer[size-1] = 0;
|
||||||
return buffer;
|
return buffer;
|
||||||
@ -230,7 +234,8 @@ char *String::getText(char *buffer, int size) {
|
|||||||
|
|
||||||
//taken from VDR, Copyright Klaus Schmidinger <kls@cadsoft.de>
|
//taken from VDR, Copyright Klaus Schmidinger <kls@cadsoft.de>
|
||||||
char *String::getText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion) {
|
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);
|
strncpy(buffer, "text error", sizeBuffer);
|
||||||
buffer[sizeBuffer-1] = 0;
|
buffer[sizeBuffer-1] = 0;
|
||||||
*shortVersion = 0;
|
*shortVersion = 0;
|
||||||
@ -254,7 +259,8 @@ void String::decodeText(char *buffer, int size) {
|
|||||||
if (*from == 0x10)
|
if (*from == 0x10)
|
||||||
from += 3; // skips code table info
|
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)
|
if (*from == 0)
|
||||||
break;
|
break;
|
||||||
if ( ((' ' <= *from) && (*from <= '~'))
|
if ( ((' ' <= *from) && (*from <= '~'))
|
||||||
@ -281,9 +287,8 @@ void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int si
|
|||||||
if (*from == 0x10)
|
if (*from == 0x10)
|
||||||
from += 3; // skips code table info
|
from += 3; // skips code table info
|
||||||
|
|
||||||
for (int i = 0; i < getLength(); i++) {
|
int len=getLength();
|
||||||
if (*from == 0)
|
for (int i = 0; i < len; i++) {
|
||||||
break;
|
|
||||||
if ( ((' ' <= *from) && (*from <= '~'))
|
if ( ((' ' <= *from) && (*from <= '~'))
|
||||||
|| (*from == '\n')
|
|| (*from == '\n')
|
||||||
|| (0xA0 <= *from)
|
|| (0xA0 <= *from)
|
||||||
@ -299,6 +304,8 @@ void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int si
|
|||||||
IsShortName++;
|
IsShortName++;
|
||||||
else if (*from == 0x87)
|
else if (*from == 0x87)
|
||||||
IsShortName--;
|
IsShortName--;
|
||||||
|
else if (*from == 0)
|
||||||
|
break;
|
||||||
from++;
|
from++;
|
||||||
if (to - buffer >= sizeBuffer - 1 || toShort - shortVersion >= sizeShortVersion - 1)
|
if (to - buffer >= sizeBuffer - 1 || toShort - shortVersion >= sizeShortVersion - 1)
|
||||||
break;
|
break;
|
||||||
|
@ -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: 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)
|
u_int32_t CRC32::crc32 (const char *d, int len, u_int32_t crc)
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
|
const unsigned char *u=(unsigned char*)d; // Saves '& 0xff'
|
||||||
|
|
||||||
for (i=0; i<len; i++)
|
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;
|
return crc;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user