From ddec0a101bfb97caa23ca731b8041547717a5eb3 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 2 Feb 2002 13:44:24 +0100 Subject: [PATCH] Changed the [dei]syslog macros to use var args; fixed error handling in establishing an SVDRP connection --- CONTRIBUTORS | 3 +++ HISTORY | 4 ++++ config.c | 5 ++--- dvbapi.c | 17 ++++++----------- remux.c | 5 ++--- svdrp.c | 4 ++-- tools.c | 5 ++--- tools.h | 8 ++++---- 8 files changed, 25 insertions(+), 26 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index d340d0fa..1703a3c5 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -182,3 +182,6 @@ Sergei Haller Andreas Gebel for his help in keeping 'channels.conf' up to date + +Davide Achilli + for pointing out a bug in error handling while establishing an SVDRP connection diff --git a/HISTORY b/HISTORY index 639304fc..98e04e99 100644 --- a/HISTORY +++ b/HISTORY @@ -946,3 +946,7 @@ Video Disk Recorder Revision History data is cleaned up and when VDR is terminated). Maybe somebody in charge of the EPG data at the listed channels will read this and take the necessary actions to fix these things... +- Changed the [dei]syslog macros in tools.h to use a variable number of args, + thus making it safe to use them in nested 'if/else' statements. +- Fixed error handling in establishing an SVDRP connection (thanks to Davide + Achilli) for pointing this out). diff --git a/config.c b/config.c index e1e9f03d..918ee348 100644 --- a/config.c +++ b/config.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.c 1.78 2002/02/01 15:35:23 kls Exp $ + * $Id: config.c 1.79 2002/02/02 12:45:30 kls Exp $ */ #include "config.h" @@ -296,9 +296,8 @@ bool cChannel::Switch(cDvbApi *DvbApi, bool Log) if (!DvbApi) DvbApi = cDvbApi::PrimaryDvbApi; if (!DvbApi->Recording() && !groupSep) { - if (Log) { + if (Log) isyslog(LOG_INFO, "switching to channel %d", number); - } for (int i = 3; i--;) { switch (DvbApi->SetChannel(number, frequency, polarization, diseqc, srate, vpid, apid1, apid2, dpid1, dpid2, tpid, ca, pnr)) { case scrOk: return true; diff --git a/dvbapi.c b/dvbapi.c index 048639c6..314d91f6 100644 --- a/dvbapi.c +++ b/dvbapi.c @@ -7,7 +7,7 @@ * DVD support initially written by Andreas Schultz * based on dvdplayer-0.5 by Matjaz Thaler * - * $Id: dvbapi.c 1.146 2002/01/26 15:39:48 kls Exp $ + * $Id: dvbapi.c 1.147 2002/02/02 13:04:00 kls Exp $ */ //#define DVDDEBUG 1 @@ -548,9 +548,8 @@ void cRecordBuffer::Input(void) } else if (r < 0) { if (FATALERRNO) { - if (errno == EBUFFEROVERFLOW) { // this error code is not defined in the library + if (errno == EBUFFEROVERFLOW) // this error code is not defined in the library esyslog(LOG_ERR, "ERROR (%s,%d): DVB driver buffer overflow", __FILE__, __LINE__); - } else { LOG_ERROR; break; @@ -1064,9 +1063,8 @@ cReplayBuffer::cReplayBuffer(cDvbApi *DvbApi, int VideoDev, int AudioDev, const return; // Create the index file: index = new cIndexFile(FileName, false); - if (!index) { + if (!index) esyslog(LOG_ERR, "ERROR: can't allocate index"); - } else if (!index->Ok()) { delete index; index = NULL; @@ -2251,9 +2249,8 @@ void cTransferBuffer::Input(void) } else if (r < 0) { if (FATALERRNO) { - if (errno == EBUFFEROVERFLOW) { // this error code is not defined in the library + if (errno == EBUFFEROVERFLOW) // this error code is not defined in the library esyslog(LOG_ERR, "ERROR (%s,%d): DVB driver buffer overflow", __FILE__, __LINE__); - } else { LOG_ERROR; break; @@ -2719,12 +2716,10 @@ bool cDvbApi::Init(void) } } PrimaryDvbApi = dvbApi[0]; - if (NumDvbApis > 0) { + if (NumDvbApis > 0) isyslog(LOG_INFO, "found %d video device%s", NumDvbApis, NumDvbApis > 1 ? "s" : ""); - } // need braces because of isyslog-macro - else { + else esyslog(LOG_ERR, "ERROR: no video device found, giving up!"); - } return NumDvbApis > 0; } diff --git a/remux.c b/remux.c index f89b897b..2eb97b50 100644 --- a/remux.c +++ b/remux.c @@ -8,7 +8,7 @@ * the Linux DVB driver's 'tuxplayer' example and were rewritten to suit * VDR's needs. * - * $Id: remux.c 1.6 2001/08/19 11:52:05 kls Exp $ + * $Id: remux.c 1.7 2002/02/02 12:54:30 kls Exp $ */ /* The calling interface of the 'cRemux::Process()' function is defined @@ -583,9 +583,8 @@ XXX*/ if (l < 0) return NULL; // no useful data found, wait for more if (pt != NO_PICTURE) { - if (pt < I_FRAME || B_FRAME < pt) { + if (pt < I_FRAME || B_FRAME < pt) esyslog(LOG_ERR, "ERROR: unknown picture type '%d'", pt); - } else if (!synced) { if (pt == I_FRAME) { resultDelivered = i; // will drop everything before this position diff --git a/svdrp.c b/svdrp.c index 67de63c3..eba409bb 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 1.28 2002/01/13 16:07:42 kls Exp $ + * $Id: svdrp.c 1.29 2002/02/02 13:33:57 kls Exp $ */ #include "svdrp.h" @@ -103,7 +103,7 @@ int cSocket::Accept(void) int newsock = accept(sock, (struct sockaddr *)&clientname, &size); if (newsock > 0) isyslog(LOG_INFO, "connect from %s, port %hd", inet_ntoa(clientname.sin_addr), ntohs(clientname.sin_port)); - else if (errno != EINTR) + else if (errno != EINTR && errno != EAGAIN) LOG_ERROR; return newsock; } diff --git a/tools.c b/tools.c index dc579e55..0aedad8d 100644 --- a/tools.c +++ b/tools.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 1.53 2002/01/27 12:36:23 kls Exp $ + * $Id: tools.c 1.54 2002/02/02 13:03:40 kls Exp $ */ #include "tools.h" @@ -404,9 +404,8 @@ char *ReadLink(const char *FileName) if (n < 0) { if (errno == ENOENT || errno == EINVAL) // file doesn't exist or is not a symlink TargetName = FileName; - else { // some other error occurred + else // some other error occurred LOG_ERROR_STR(FileName); - } } else if (n < int(sizeof(RealName))) { // got it! RealName[n] = 0; diff --git a/tools.h b/tools.h index f9390185..4a1132ef 100644 --- a/tools.h +++ b/tools.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 1.39 2002/01/26 15:38:10 kls Exp $ + * $Id: tools.h 1.40 2002/02/02 13:16:47 kls Exp $ */ #ifndef __TOOLS_H @@ -20,9 +20,9 @@ extern int SysLogLevel; -#define esyslog if (SysLogLevel > 0) syslog -#define isyslog if (SysLogLevel > 1) syslog -#define dsyslog if (SysLogLevel > 2) syslog +#define esyslog(a...) void( (SysLogLevel > 0) ? syslog(a) : void() ) +#define isyslog(a...) void( (SysLogLevel > 1) ? syslog(a) : void() ) +#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog(a) : void() ) #define LOG_ERROR esyslog(LOG_ERR, "ERROR (%s,%d): %m", __FILE__, __LINE__) #define LOG_ERROR_STR(s) esyslog(LOG_ERR, "ERROR: %s: %m", s)