From 6d4eb0df37c2669176677abeeb664da58f945d5f Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 5 Jan 2007 18:00:00 +0100 Subject: Version 1.4.4-3 - Fixed a possible segfault if VDR gets terminated while a message is displayed (thanks to Udo Richter). - Fixed the INSTALL section on retrying shutdown later (reported by Udo Richter). - When entering text via the numeric keys, the characters are now checked against the allowed characters (thanks to Frank Schmirler). - Added a missing break statement in cCiHandler::OpenSession(). --- CONTRIBUTORS | 4 ++++ HISTORY | 11 ++++++++++- INSTALL | 5 ++--- ci.c | 3 ++- config.h | 4 ++-- menuitems.c | 28 +++++++++++++++++----------- skins.c | 11 ++++++++++- skins.h | 4 +++- 8 files changed, 50 insertions(+), 20 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 6a65822..79c6e18 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1477,6 +1477,8 @@ Udo Richter false and not actually kill the thread if the special value -1 is given or fixing a possible segfault in cSkins::Message() for some hints on how to improve handling cPluginManager::Active() + for fixing a possible segfault if VDR gets terminated while a message is displayed + for reporting an error in the INSTALL section on retrying shutdown later Sven Kreiensen for his help in keeping 'channels.conf.terr' up to date @@ -2014,6 +2016,8 @@ Norbert Wentz Frank Schmirler for fixing handling client side termination of SVDRP connections for fixing assigning schedules to channels in case there is no initial EPG information + for making entering text via the numeric keys check the characters against the + allowed characters Jörn Reder for reporting that a recording may unnecessarily block a device with a CAM, while diff --git a/HISTORY b/HISTORY index a93771d..df5711d 100644 --- a/HISTORY +++ b/HISTORY @@ -5006,7 +5006,7 @@ Video Disk Recorder Revision History and waiting for 5 minutes before calling it again (thanks to Jörg Wendel for reporting that cPlugin::Active() was called too often, and to Udo Richter for some hints on how to improve this). -- Replaced 'unsigned long long' with 'uint32_t' and 'uint64' with 'uint64_t' to +- Replaced 'unsigned long' with 'uint32_t' and 'uint64' with 'uint64_t' to avoid problems on 64-bit machines. 2006-12-03: Version 1.4.4-2 @@ -5015,3 +5015,12 @@ Video Disk Recorder Revision History - Added a compatibility define for 'uint64' to tools.h, so that existing plugins don't need to be modified immediately (reported by Suur Karu). This will be removed in version 1.5. + +2007-01-05: Version 1.4.4-3 + +- Fixed a possible segfault if VDR gets terminated while a message is displayed + (thanks to Udo Richter). +- Fixed the INSTALL section on retrying shutdown later (reported by Udo Richter). +- When entering text via the numeric keys, the characters are now checked against + the allowed characters (thanks to Frank Schmirler). +- Added a missing break statement in cCiHandler::OpenSession(). diff --git a/INSTALL b/INSTALL index fef8601..21dfcfa 100644 --- a/INSTALL +++ b/INSTALL @@ -199,9 +199,8 @@ correspond to a time that is "Min. event timeout" minutes in the future. Before the shutdown program is called, the user will be prompted to inform him that the system is about to shut down. If any remote control key is pressed while this prompt is visible, the shutdown will be cancelled (and -tried again after another MinUserInactivity minutes). The shutdown prompt -will be displayed for 5 minutes, which should be enough time for the user -to react. +tried again later). The shutdown prompt will be displayed for 5 minutes, which +should be enough time for the user to react. A sample shell script to be used with the '-s' option might look like this: diff --git a/ci.c b/ci.c index 066acc2..cce7b5d 100644 --- a/ci.c +++ b/ci.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 1.45 2006/08/20 11:38:33 kls Exp $ + * $Id: ci.c 1.46 2007/01/05 10:08:46 kls Exp $ */ #include "ci.h" @@ -1607,6 +1607,7 @@ bool cCiHandler::OpenSession(int Length, const uint8_t *Data) } esyslog("ERROR: can't create session for resource identifier: %08X", ResourceId); } + break; default: esyslog("ERROR: unknown resource identifier: %08X", ResourceId); } } diff --git a/config.h b/config.h index 07ebbce..6a3bf2b 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.280 2006/12/03 16:44:29 kls Exp $ + * $Id: config.h 1.281 2007/01/04 12:52:22 kls Exp $ */ #ifndef __CONFIG_H @@ -21,7 +21,7 @@ // VDR's own version number: -#define VDRVERSION "1.4.4-2" +#define VDRVERSION "1.4.4-3" #define VDRVERSNUM 10404 // Version * 10000 + Major * 100 + Minor // The plugin API's version number: diff --git a/menuitems.c b/menuitems.c index 086668e..366989d 100644 --- a/menuitems.c +++ b/menuitems.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.c 1.47 2006/07/30 09:09:30 kls Exp $ + * $Id: menuitems.c 1.48 2007/01/04 13:30:37 kls Exp $ */ #include "menuitems.h" @@ -461,13 +461,6 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) AdvancePos(); currentChar = NULL; } - if (insert && newchar) { - // create a new character in insert mode - if (int(strlen(value)) < length - 1) { - memmove(value + pos + 1, value + pos, strlen(value) - pos + 1); - value[pos] = ' '; - } - } if (!currentChar || !*currentChar || *currentChar == '\t') { // find the beginning of the character map entry for Key int n = NORMALKEY(Key) - k0; @@ -476,15 +469,28 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) if (*currentChar++ == '\t') n--; } + // find first allowed character + while (*currentChar && *currentChar != '\t' && !strchr(allowed, *currentChar)) + currentChar++; } if (*currentChar && *currentChar != '\t') { + if (insert && newchar) { + // create a new character in insert mode + if (int(strlen(value)) < length - 1) { + memmove(value + pos + 1, value + pos, strlen(value) - pos + 1); + value[pos] = ' '; + } + } value[pos] = *currentChar; if (uppercase) value[pos] = toupper(value[pos]); - currentChar++; + // find next allowed character + do { + currentChar++; + } while (*currentChar && *currentChar != '\t' && !strchr(allowed, *currentChar)); + newchar = false; + autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT); } - newchar = false; - autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT); } else return cMenuEditItem::ProcessKey(Key); diff --git a/skins.c b/skins.c index 34b2638..f442e5a 100644 --- a/skins.c +++ b/skins.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: skins.c 1.12 2006/12/01 13:32:37 kls Exp $ + * $Id: skins.c 1.13 2007/01/04 13:08:55 kls Exp $ */ #include "skins.h" @@ -358,3 +358,12 @@ void cSkins::Flush(void) if (cSkinDisplay::Current()) cSkinDisplay::Current()->Flush(); } + +void cSkins::Clear(void) +{ + if (displayMessage) { + delete displayMessage; + displayMessage = NULL; + } + cList::Clear(); +} diff --git a/skins.h b/skins.h index 9a9ba57..a0f0388 100644 --- a/skins.h +++ b/skins.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: skins.h 1.14 2006/06/03 10:21:45 kls Exp $ + * $Id: skins.h 1.15 2007/01/04 13:08:55 kls Exp $ */ #ifndef __SKINS_H @@ -360,6 +360,8 @@ public: ///< Processes the first queued message, if any. void Flush(void); ///< Flushes the currently active cSkinDisplay, if any. + virtual void Clear(void); + ///< Free up all registered skins }; extern cSkins Skins; -- cgit v1.2.3