--- 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;