diff options
author | lordjaxom <lordjaxom> | 2004-12-30 22:43:55 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2004-12-30 22:43:55 +0000 |
commit | 302fa2e67276bd0674e81e2a9a01b9e91dd45d8c (patch) | |
tree | a454884a16e0ffa48b5ce3e4ce1a66eb874a9de0 /patches/vdr-1.3.6-incompletesections.diff | |
download | vdr-plugin-streamdev-302fa2e67276bd0674e81e2a9a01b9e91dd45d8c.tar.gz vdr-plugin-streamdev-302fa2e67276bd0674e81e2a9a01b9e91dd45d8c.tar.bz2 |
Initial revision
Diffstat (limited to 'patches/vdr-1.3.6-incompletesections.diff')
-rw-r--r-- | patches/vdr-1.3.6-incompletesections.diff | 22 |
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; |