summaryrefslogtreecommitdiff
path: root/patches/vdr-1.3.6-incompletesections.diff
diff options
context:
space:
mode:
authorFrank Schmirler <schmirl@puter.linogate.de>2010-12-02 08:53:01 +0100
committerFrank Schmirler <schmirl@puter.linogate.de>2010-12-02 08:53:01 +0100
commit5e30711bfdb28085234a5ef6da4f4e44305ac3e4 (patch)
treed15809d23eeeed7fda55d9450b1af7c99d6eb5d6 /patches/vdr-1.3.6-incompletesections.diff
downloadvdr-plugin-streamdev-5e30711bfdb28085234a5ef6da4f4e44305ac3e4.tar.gz
vdr-plugin-streamdev-5e30711bfdb28085234a5ef6da4f4e44305ac3e4.tar.bz2
Snapshot 2007-03-20
Diffstat (limited to 'patches/vdr-1.3.6-incompletesections.diff')
-rw-r--r--patches/vdr-1.3.6-incompletesections.diff22
1 files changed, 22 insertions, 0 deletions
diff --git a/patches/vdr-1.3.6-incompletesections.diff b/patches/vdr-1.3.6-incompletesections.diff
new file mode 100644
index 0000000..a58a121
--- /dev/null
+++ b/patches/vdr-1.3.6-incompletesections.diff
@@ -0,0 +1,22 @@
+--- 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;