From 99e3c093f404b55683a90e38bbe74e1f51c35316 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Mon, 31 Oct 2005 18:00:00 +0100 Subject: =?UTF-8?q?Version=201.3.35=20-=20Updated=20'sources.conf'=20(than?= =?UTF-8?q?ks=20to=20Philip=20Prindeville).=20-=20Now=20using=20daemon()?= =?UTF-8?q?=20instead=20of=20fork()=20to=20run=20VDR=20in=20daemon=20mode?= =?UTF-8?q?=20(thanks=20to=20=20=20Enrico=20Scholz).=20-=20Fixed=20a=20pos?= =?UTF-8?q?sible=20endless=20loop=20in=20a=20menu=20with=20no=20selectable?= =?UTF-8?q?=20items=20if=20=20=20Setup.MenuScrollWrap=20is=20true=20(thank?= =?UTF-8?q?s=20to=20Enrico=20Scholz).=20-=20Making=20sure=20no=20item=20is?= =?UTF-8?q?=20displayed=20as=20"current"=20if=20Up,=20Down,=20Left=20or=20?= =?UTF-8?q?Right=20is=20=20=20pressed=20in=20a=20menu=20with=20no=20select?= =?UTF-8?q?able=20items.=20-=20Added=20'=5F=5Fattribute=5F=5F'=20to=20func?= =?UTF-8?q?tions=20that=20use=20printf()=20like=20parameters=20(thanks=20?= =?UTF-8?q?=20=20to=20Darren=20Salt).=20-=20Updated=20the=20Finnish=20OSD?= =?UTF-8?q?=20texts=20(thanks=20to=20Rolf=20Ahrenberg).=20-=20Fixed=20a=20?= =?UTF-8?q?leftover=20'summary.vdr'=20in=20vdr.1=20(reported=20by=20Christ?= =?UTF-8?q?oph=20Hermanns).=20-=20Added=20more=20error=20messages=20and=20?= =?UTF-8?q?line=20numbers=20when=20reading=20EPG=20data=20and=20info.vdr?= =?UTF-8?q?=20=20=20(thanks=20to=20Peter=20Bieringer).=20-=20Updated=20the?= =?UTF-8?q?=20Danish=20OSD=20texts=20(thanks=20to=20Mogens=20Elneff).=20-?= =?UTF-8?q?=20Updated=20the=20Estonian=20OSD=20texts=20(thanks=20to=20Arth?= =?UTF-8?q?ur=20Konovalov).=20-=20Added=20missing=20mutex=20locks=20to=20c?= =?UTF-8?q?CiMenu::Abort()=20and=20cCiEnquiry::Abort()=20(reported=20=20?= =?UTF-8?q?=20by=20Marco=20Schl=C3=BC=C3=9Fler).=20-=20Fixed=20lock=20hand?= =?UTF-8?q?ling=20in=20CAM=20communication=20to=20avoid=20problems=20with?= =?UTF-8?q?=20multiple=20CAMs=20=20=20per=20device=20or=20CAMs=20with=20mo?= =?UTF-8?q?re=20than=20one=20smart=20card.=20-=20Updated=20the=20Greek=20O?= =?UTF-8?q?SD=20texts=20(thanks=20to=20Dimitrios=20Dimitrakos).=20-=20Upda?= =?UTF-8?q?ted=20the=20French=20OSD=20texts=20(thanks=20to=20Nicolas=20Hui?= =?UTF-8?q?llard).=20-=20Fixed=20the=20cFilter=20example=20in=20PLUGINS.ht?= =?UTF-8?q?ml=20(reported=20by=20Patrick=20Fischer).=20-=20The=20new=20cla?= =?UTF-8?q?ss=20cUnbufferedFile=20is=20used=20for=20the=20recording=20file?= =?UTF-8?q?s=20to=20avoid=20=20=20trashing=20the=20file=20system=20cache?= =?UTF-8?q?=20(based=20on=20a=20patch=20by=20Ralf=20M=C3=BCller).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- recording.c | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) (limited to 'recording.c') diff --git a/recording.c b/recording.c index 9e96922..c90e54d 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 1.120 2005/10/01 10:29:02 kls Exp $ + * $Id: recording.c 1.122 2005/10/31 12:27:58 kls Exp $ */ #include "recording.h" @@ -264,7 +264,9 @@ bool cRecordingInfo::Read(FILE *f) if (ownEvent) { cReadLine ReadLine; char *s; + int line = 0; while ((s = ReadLine.Read(f)) != NULL) { + ++line; char *t = skipspace(s + 1); switch (*s) { case 'C': { @@ -275,8 +277,10 @@ bool cRecordingInfo::Read(FILE *f) channelID = tChannelID::FromString(t); } break; - default: if (!ownEvent->Parse(s)) + default: if (!ownEvent->Parse(s)) { + esyslog("ERROR: EPG data problem in line %d", line); return false; + } break; } } @@ -478,7 +482,8 @@ cRecording::cRecording(const char *FileName) asprintf(&InfoFileName, "%s%s", fileName, INFOFILESUFFIX); FILE *f = fopen(InfoFileName, "r"); if (f) { - info->Read(f); + if (!info->Read(f)) + esyslog("ERROR: EPG data problem in file %s", InfoFileName); fclose(f); } else if (errno != ENOENT) @@ -1253,7 +1258,7 @@ int cIndexFile::Get(uchar FileNumber, int FileOffset) cFileName::cFileName(const char *FileName, bool Record, bool Blocking) { - file = -1; + file = NULL; fileNumber = 0; record = Record; blocking = Blocking; @@ -1274,21 +1279,21 @@ cFileName::~cFileName() free(fileName); } -int cFileName::Open(void) +cUnbufferedFile *cFileName::Open(void) { - if (file < 0) { + if (!file) { int BlockingFlag = blocking ? 0 : O_NONBLOCK; if (record) { dsyslog("recording to '%s'", fileName); file = OpenVideoFile(fileName, O_RDWR | O_CREAT | BlockingFlag); - if (file < 0) + if (!file) LOG_ERROR_STR(fileName); } else { if (access(fileName, R_OK) == 0) { dsyslog("playing '%s'", fileName); - file = open(fileName, O_RDONLY | BlockingFlag); - if (file < 0) + file = cUnbufferedFile::Create(fileName, O_RDONLY | BlockingFlag); + if (!file) LOG_ERROR_STR(fileName); } else if (errno != ENOENT) @@ -1300,14 +1305,14 @@ int cFileName::Open(void) void cFileName::Close(void) { - if (file >= 0) { - if ((record && CloseVideoFile(file) < 0) || (!record && close(file) < 0)) + if (file) { + if ((record && CloseVideoFile(file) < 0) || (!record && file->Close() < 0)) LOG_ERROR_STR(fileName); - file = -1; + file = NULL; } } -int cFileName::SetOffset(int Number, int Offset) +cUnbufferedFile *cFileName::SetOffset(int Number, int Offset) { if (fileNumber != Number) Close(); @@ -1332,23 +1337,23 @@ int cFileName::SetOffset(int Number, int Offset) } else if (errno != ENOENT) { // something serious has happened LOG_ERROR_STR(fileName); - return -1; + return NULL; } // found a non existing file suffix } if (Open() >= 0) { - if (!record && Offset >= 0 && lseek(file, Offset, SEEK_SET) != Offset) { + if (!record && Offset >= 0 && file->Seek(Offset, SEEK_SET) != Offset) { LOG_ERROR_STR(fileName); - return -1; + return NULL; } } return file; } esyslog("ERROR: max number of files (%d) exceeded", MAXFILESPERRECORDING); - return -1; + return NULL; } -int cFileName::NextFile(void) +cUnbufferedFile *cFileName::NextFile(void) { return SetOffset(fileNumber + 1); } @@ -1382,7 +1387,7 @@ int SecondsToFrames(int Seconds) // --- ReadFrame ------------------------------------------------------------- -int ReadFrame(int f, uchar *b, int Length, int Max) +int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max) { if (Length == -1) Length = Max; // this means we read up to EOF (see cIndex) @@ -1390,10 +1395,8 @@ int ReadFrame(int f, uchar *b, int Length, int Max) esyslog("ERROR: frame larger than buffer (%d > %d)", Length, Max); Length = Max; } - int r = safe_read(f, b, Length); + int r = f->Read(b, Length); if (r < 0) LOG_ERROR; return r; } - - -- cgit v1.2.3