mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02:00
23 lines
1.3 KiB
Diff
23 lines
1.3 KiB
Diff
|
--- vdr-1.3.6/sections.c 2004-02-07 17:51:57.000000000 +0200
|
||
|
+++ sections.c 2004-03-21 18:34:47.000000000 +0200
|
||
|
@@ -185,11 +185,17 @@
|
||
|
if (fh) {
|
||
|
// Read section data:
|
||
|
unsigned char buf[4096]; // max. allowed size for any EIT section
|
||
|
- int r = safe_read(fh->handle, buf, sizeof(buf));
|
||
|
+ struct stat statbuf;
|
||
|
+ int st = fstat(fh->handle, &statbuf);
|
||
|
+ int ispipe = (st == 0 && !S_ISCHR(statbuf.st_mode));
|
||
|
+ /*printf("ispipe %d\n", ispipe);*/
|
||
|
+ int r = safe_read(fh->handle, buf, ispipe ? 3 : sizeof(buf));
|
||
|
if (!DeviceHasLock)
|
||
|
continue; // we do the read anyway, to flush any data that might have come from a different transponder
|
||
|
- if (r > 3) { // minimum number of bytes necessary to get section length
|
||
|
+ if (r >= 3) { // minimum number of bytes necessary to get section length
|
||
|
int len = (((buf[1] & 0x0F) << 8) | (buf[2] & 0xFF)) + 3;
|
||
|
+ if (ispipe)
|
||
|
+ r += safe_read(fh->handle, buf+3, len-3);
|
||
|
if (len == r) {
|
||
|
// Distribute data to all attached filters:
|
||
|
int pid = fh->filterData.pid;
|