diff options
Diffstat (limited to 'patches')
-rw-r--r-- | patches/respect_ca.diff | 43 | ||||
-rw-r--r-- | patches/thread.c.diff | 29 | ||||
-rw-r--r-- | patches/vdr-1.3.11-localchannelprovide.diff | 61 | ||||
-rw-r--r-- | patches/vdr-1.3.24.LocalChannelProvide.diff | 93 | ||||
-rw-r--r-- | patches/vdr-1.3.6-incompletesections.diff | 22 | ||||
-rw-r--r-- | patches/vdr-1.6.0-ignore_missing_cam.diff | 13 | ||||
-rw-r--r-- | patches/vdr-1.6.0-intcamdevices.patch | 78 | ||||
-rw-r--r-- | patches/vdr-cap_net_raw.diff | 11 | ||||
-rw-r--r-- | patches/vdr-pluginactivity.diff | 113 |
9 files changed, 102 insertions, 361 deletions
diff --git a/patches/respect_ca.diff b/patches/respect_ca.diff deleted file mode 100644 index 8240b19..0000000 --- a/patches/respect_ca.diff +++ /dev/null @@ -1,43 +0,0 @@ -# The cannels.conf ca field can be used to bind a channel to a specific -# device. The streamdev-client does not consider this information, so -# there's no way to keep VDR from using streamdev for a specific -# channel. Apply this patch if you need this feature. -# -# This fix should probably become part of streamdev. However as it -# changes the behaviour of streamdev, I decided to keep it as a separate -# patch until there is something like a new official streamdev release. -# ---- client/device.h.bak 2006-11-09 12:25:21.000000000 +0100 -+++ client/device.h 2006-11-09 12:26:57.000000000 +0100 -@@ -50,6 +50,7 @@ - cStreamdevDevice(void); - virtual ~cStreamdevDevice(); - -+ virtual int ProvidesCa(const cChannel *Channel) const; - virtual bool ProvidesSource(int Source) const; - virtual bool ProvidesTransponder(const cChannel *Channel) const; - virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, ---- client/device.c.bak 2006-11-09 12:23:24.000000000 +0100 -+++ client/device.c 2006-11-09 12:35:48.000000000 +0100 -@@ -57,6 +57,12 @@ - #endif - } - -+int cStreamdevDevice::ProvidesCa(const cChannel *Channel) const -+{ -+ // Encrypted is acceptable for now. Will ask the server later. -+ return Channel->Ca() <= CA_DVB_MAX ? cDevice::ProvidesCa(Channel) : 1; -+} -+ - bool cStreamdevDevice::ProvidesSource(int Source) const { - Dprintf("ProvidesSource, Source=%d\n", Source); - return false; -@@ -78,7 +84,7 @@ - if (ClientSocket.DataSocket(siLive) != NULL - && TRANSPONDER(Channel, m_Channel)) - res = true; -- else { -+ else if (ProvidesCa(Channel)) { - res = prio && ClientSocket.ProvidesChannel(Channel, Priority); - ndr = true; - } diff --git a/patches/thread.c.diff b/patches/thread.c.diff deleted file mode 100644 index a03ffac..0000000 --- a/patches/thread.c.diff +++ /dev/null @@ -1,29 +0,0 @@ ---- vdr-vanilla/thread.c 2003-10-10 18:19:15.000000000 +0200 -+++ vdr-vanilla-thread/thread.c 2003-10-10 18:43:36.000000000 +0200 -@@ -158,12 +158,21 @@ - - bool cThread::Active(void) - { -- if (threadPid) { -- if (kill(threadPid, SIGIO) < 0) { // couldn't find another way of checking whether the thread is still running - any ideas? -- if (errno == ESRCH) -- threadPid = 0; -- else -+ if (thread) { -+ /* -+ * Single UNIX Spec v2 says: -+ * -+ * The pthread_kill() function is used to request -+ * that a signal be delivered to the specified thread. -+ * -+ * As in kill(), if sig is zero, error checking is -+ * performed but no signal is actually sent. -+ */ -+ int err; -+ if ((err = pthread_kill(thread, 0)) != 0) { -+ if (err != ESRCH) - LOG_ERROR; -+ thread = 0; - } - else - return true; diff --git a/patches/vdr-1.3.11-localchannelprovide.diff b/patches/vdr-1.3.11-localchannelprovide.diff deleted file mode 100644 index 448d7fc..0000000 --- a/patches/vdr-1.3.11-localchannelprovide.diff +++ /dev/null @@ -1,61 +0,0 @@ -diff -u vdr-1.3.11/config.c vdr-1.3.11.LocalChannelProvide/config.c ---- vdr-1.3.11/config.c 2004-05-16 14:43:55.000000000 +0200 -+++ vdr-1.3.11.LocalChannelProvide/config.c 2004-08-29 17:55:59.000000000 +0200 -@@ -297,6 +297,7 @@ - ResumeID = 0; - CurrentChannel = -1; - CurrentVolume = MAXVOLUME; -+ LocalChannelProvide = 1; - } - - cSetup& cSetup::operator= (const cSetup &s) -@@ -450,6 +451,7 @@ - else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value); - else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value); - else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value); -+ else if (!strcasecmp(Name, "LocalChannelProvide")) LocalChannelProvide = atoi(Value); - else - return false; - return true; -@@ -510,6 +512,7 @@ - Store("ResumeID", ResumeID); - Store("CurrentChannel", CurrentChannel); - Store("CurrentVolume", CurrentVolume); -+ Store("LocalChannelProvide",LocalChannelProvide); - - Sort(); - -diff -u vdr-1.3.11/config.h vdr-1.3.11.LocalChannelProvide/config.h ---- vdr-1.3.11/config.h 2004-06-10 15:18:50.000000000 +0200 -+++ vdr-1.3.11.LocalChannelProvide/config.h 2004-08-29 17:47:32.000000000 +0200 -@@ -251,6 +251,7 @@ - int ResumeID; - int CurrentChannel; - int CurrentVolume; -+ int LocalChannelProvide; - int __EndData__; - cSetup(void); - cSetup& operator= (const cSetup &s); -diff -u vdr-1.3.11/dvbdevice.c vdr-1.3.11.LocalChannelProvide/dvbdevice.c ---- vdr-1.3.11/dvbdevice.c 2004-06-19 11:33:42.000000000 +0200 -+++ vdr-1.3.11.LocalChannelProvide/dvbdevice.c 2004-08-29 18:00:37.000000000 +0200 -@@ -674,6 +674,8 @@ - - bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const - { -+ if (Setup.LocalChannelProvide != 1) -+ return false; - bool result = false; - bool hasPriority = Priority < 0 || Priority > this->Priority(); - bool needsDetachReceivers = false; -diff -u vdr-1.3.11/menu.c vdr-1.3.11.LocalChannelProvide/menu.c ---- vdr-1.3.11/menu.c 2004-06-13 22:26:51.000000000 +0200 -+++ vdr-1.3.11.LocalChannelProvide/menu.c 2004-08-29 17:52:31.000000000 +0200 -@@ -1878,6 +1878,7 @@ - Add(new cMenuEditIntItem( tr("Setup.DVB$Primary DVB interface"), &data.PrimaryDVB, 1, cDevice::NumDevices())); - Add(new cMenuEditBoolItem(tr("Setup.DVB$Video format"), &data.VideoFormat, "4:3", "16:9")); - Add(new cMenuEditStraItem(tr("Setup.DVB$Update channels"), &data.UpdateChannels, 5, updateChannelsTexts)); -+ Add(new cMenuEditBoolItem(tr("Channels available locally"), &data.LocalChannelProvide)); - } - - eOSState cMenuSetupDVB::ProcessKey(eKeys Key) diff --git a/patches/vdr-1.3.24.LocalChannelProvide.diff b/patches/vdr-1.3.24.LocalChannelProvide.diff deleted file mode 100644 index 830960a..0000000 --- a/patches/vdr-1.3.24.LocalChannelProvide.diff +++ /dev/null @@ -1,93 +0,0 @@ -diff -Nu vdr-1.3.24/config.c vdr-1.3.24.LocalChannelProvide/config.c ---- vdr-1.3.24/config.c 2005-02-20 13:52:59.000000000 +0100 -+++ vdr-1.3.24.LocalChannelProvide/config.c 2005-05-12 19:23:58.000000000 +0200 -@@ -301,6 +301,7 @@ - CurrentChannel = -1; - CurrentVolume = MAXVOLUME; - CurrentDolby = 0; -+ LocalChannelProvide = 1; - } - - cSetup& cSetup::operator= (const cSetup &s) -@@ -458,6 +459,7 @@ - else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value); - else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value); - else if (!strcasecmp(Name, "CurrentDolby")) CurrentDolby = atoi(Value); -+ else if (!strcasecmp(Name, "LocalChannelProvide")) LocalChannelProvide = atoi(Value); - else - return false; - return true; -@@ -522,6 +524,7 @@ - Store("CurrentChannel", CurrentChannel); - Store("CurrentVolume", CurrentVolume); - Store("CurrentDolby", CurrentDolby); -+ Store("LocalChannelProvide",LocalChannelProvide); - - Sort(); - -diff -Nu vdr-1.3.24/config.h vdr-1.3.24.LocalChannelProvide/config.h ---- vdr-1.3.24/config.h 2005-05-05 13:04:18.000000000 +0200 -+++ vdr-1.3.24.LocalChannelProvide/config.h 2005-05-12 19:24:31.000000000 +0200 -@@ -255,6 +255,7 @@ - int CurrentChannel; - int CurrentVolume; - int CurrentDolby; -+ int LocalChannelProvide; - int __EndData__; - cSetup(void); - cSetup& operator= (const cSetup &s); -diff -Nu vdr-1.3.24/dvbdevice.c vdr-1.3.24.LocalChannelProvide/dvbdevice.c ---- vdr-1.3.24/dvbdevice.c 2005-03-20 11:10:38.000000000 +0100 -+++ vdr-1.3.24.LocalChannelProvide/dvbdevice.c 2005-05-12 19:19:29.000000000 +0200 -@@ -746,6 +746,8 @@ - - bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const - { -+ if (Setup.LocalChannelProvide != 1) -+ return false; - bool result = false; - bool hasPriority = Priority < 0 || Priority > this->Priority(); - bool needsDetachReceivers = false; -diff -Nu vdr-1.3.24/i18n.c vdr-1.3.24.LocalChannelProvide/i18n.c ---- vdr-1.3.24/i18n.c 2005-05-05 15:12:54.000000000 +0200 -+++ vdr-1.3.24.LocalChannelProvide/i18n.c 2005-05-12 19:30:50.000000000 +0200 -@@ -5325,6 +5325,27 @@ - "ST:TNG konsool", - "ST:TNG konsol", - }, -+ { "Channels available locally", -+ "Kanäle lokal beziehen", -+ "",// TODO -+ "", -+ "", -+ "",// TODO -+ "",// TODO -+ "",// TODO -+ "", -+ "",// TODO -+ "",// TODO -+ "",// TODO -+ "", -+ "", -+ "",// TODO -+ "",// TODO -+ "", -+ "", -+ "", -+ "", -+ }, - { NULL } - }; - -diff -Nu vdr-1.3.24/menu.c vdr-1.3.24.LocalChannelProvide/menu.c ---- vdr-1.3.24/menu.c 2005-03-20 16:14:51.000000000 +0100 -+++ vdr-1.3.24.LocalChannelProvide/menu.c 2005-05-12 19:26:57.000000000 +0200 -@@ -1968,7 +1968,7 @@ - Add(new cMenuEditIntItem( tr("Setup.DVB$Audio languages"), &numAudioLanguages, 0, I18nNumLanguages)); - for (int i = 0; i < numAudioLanguages; i++) - Add(new cMenuEditStraItem(tr("Setup.DVB$Audio language"), &data.AudioLanguages[i], I18nNumLanguages, I18nLanguages())); -- -+ Add(new cMenuEditBoolItem(tr("Channels available locally"), &data.LocalChannelProvide)); - SetCurrent(Get(current)); - Display(); - } diff --git a/patches/vdr-1.3.6-incompletesections.diff b/patches/vdr-1.3.6-incompletesections.diff deleted file mode 100644 index a58a121..0000000 --- a/patches/vdr-1.3.6-incompletesections.diff +++ /dev/null @@ -1,22 +0,0 @@ ---- 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; diff --git a/patches/vdr-1.6.0-ignore_missing_cam.diff b/patches/vdr-1.6.0-ignore_missing_cam.diff new file mode 100644 index 0000000..60d93bd --- /dev/null +++ b/patches/vdr-1.6.0-ignore_missing_cam.diff @@ -0,0 +1,13 @@ +--- device.c.orig 2008-03-28 11:47:25.000000000 +0100 ++++ device.c 2008-03-28 11:47:09.000000000 +0100 +@@ -375,8 +375,8 @@ + } + } + } +- if (!NumUsableSlots) +- return NULL; // no CAM is able to decrypt this channel ++// if (!NumUsableSlots) ++// return NULL; // no CAM is able to decrypt this channel + } + + bool NeedsDetachReceivers = false; diff --git a/patches/vdr-1.6.0-intcamdevices.patch b/patches/vdr-1.6.0-intcamdevices.patch new file mode 100644 index 0000000..aab1fb4 --- /dev/null +++ b/patches/vdr-1.6.0-intcamdevices.patch @@ -0,0 +1,78 @@ +Index: vdr-1.6.0-nocamdevices/device.c +=================================================================== +--- vdr-1.6.0-nocamdevices/device.c ++++ vdr-1.6.0-nocamdevices/device.c 2008-04-27 18:55:37.000000000 +0300 +@@ -363,6 +363,7 @@ + int NumCamSlots = CamSlots.Count(); + int SlotPriority[NumCamSlots]; + int NumUsableSlots = 0; ++ bool InternalCamNeeded = false; + if (Channel->Ca() >= CA_ENCRYPTED_MIN) { + for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) { + SlotPriority[CamSlot->Index()] = MAXPRIORITY + 1; // assumes it can't be used +@@ -376,7 +377,7 @@ + } + } + if (!NumUsableSlots) +- return NULL; // no CAM is able to decrypt this channel ++ InternalCamNeeded = true; // no CAM is able to decrypt this channel + } + + bool NeedsDetachReceivers = false; +@@ -392,11 +393,13 @@ + continue; // this device shall be temporarily avoided + if (Channel->Ca() && Channel->Ca() <= CA_DVB_MAX && Channel->Ca() != device[i]->CardIndex() + 1) + continue; // a specific card was requested, but not this one +- if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true)) ++ if (InternalCamNeeded && !device[i]->HasInternalCam()) ++ continue; // no CAM is able to decrypt this channel and the device uses vdr handled CAMs ++ if (NumUsableSlots && !device[i]->HasInternalCam() && !CamSlots.Get(j)->Assign(device[i], true)) + continue; // CAM slot can't be used with this device + bool ndr; + if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job +- if (NumUsableSlots && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j)) ++ if (NumUsableSlots && !device[i]->HasInternalCam() && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j)) + ndr = true; // using a different CAM slot requires detaching receivers + // Put together an integer number that reflects the "impact" using + // this device would have on the overall system. Each condition is represented +@@ -410,18 +413,18 @@ + imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving + imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device + imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) +- imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) ++ imp <<= 8; imp |= min(max(((NumUsableSlots && !device[i]->HasInternalCam()) ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) + imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers + imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device +- imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels ++ imp <<= 1; imp |= (NumUsableSlots || InternalCamNeeded) ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels + imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards +- imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel ++ imp <<= 1; imp |= (NumUsableSlots && !device[i]->HasInternalCam()) ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel + if (imp < Impact) { + // This device has less impact than any previous one, so we take it. + Impact = imp; + d = device[i]; + NeedsDetachReceivers = ndr; +- if (NumUsableSlots) ++ if (NumUsableSlots && !device[i]->HasInternalCam()) + s = CamSlots.Get(j); + } + } +Index: vdr-1.6.0-nocamdevices/device.h +=================================================================== +--- vdr-1.6.0-nocamdevices/device.h ++++ vdr-1.6.0-nocamdevices/device.h 2008-04-27 18:55:49.000000000 +0300 +@@ -335,6 +335,12 @@ + public: + virtual bool HasCi(void); + ///< Returns true if this device has a Common Interface. ++ virtual bool HasInternalCam(void) { return false; } ++ ///< Returns true if this device handles encrypted channels itself ++ ///< without VDR assistance. This can be e.g. when the device is a ++ ///< client that gets the stream from another VDR instance that has ++ ///< already decrypted the stream. In this case ProvidesChannel() ++ ///< shall check whether the channel can be decrypted. + void SetCamSlot(cCamSlot *CamSlot); + ///< Sets the given CamSlot to be used with this device. + cCamSlot *CamSlot(void) const { return camSlot; } + diff --git a/patches/vdr-cap_net_raw.diff b/patches/vdr-cap_net_raw.diff new file mode 100644 index 0000000..2f714b1 --- /dev/null +++ b/patches/vdr-cap_net_raw.diff @@ -0,0 +1,11 @@ +--- vdr.c.orig 2009-02-13 09:45:55.000000000 +0100 ++++ vdr.c 2009-02-13 09:46:24.000000000 +0100 +@@ -115,7 +115,7 @@ + static bool SetCapSysTime(void) + { + // drop all capabilities except cap_sys_time +- cap_t caps = cap_from_text("= cap_sys_time=ep"); ++ cap_t caps = cap_from_text("= cap_sys_time,cap_net_raw=ep"); + if (!caps) { + fprintf(stderr, "vdr: cap_from_text failed: %s\n", strerror(errno)); + return false; diff --git a/patches/vdr-pluginactivity.diff b/patches/vdr-pluginactivity.diff deleted file mode 100644 index 0b173ae..0000000 --- a/patches/vdr-pluginactivity.diff +++ /dev/null @@ -1,113 +0,0 @@ -diff -Nru -x PLUGINS vdr-1.3.12-orig/i18n.c vdr-1.3.12/i18n.c ---- vdr-1.3.12-orig/i18n.c 2004-05-28 15:19:29.000000000 +0200 -+++ vdr-1.3.12/i18n.c 2004-08-17 16:01:07.000000000 +0200 -@@ -1033,8 +1033,8 @@ - "´ÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?", - "Zaista ponovo pokrenuti?", - }, -- { "Recording - restart anyway?", -- "Aufnahme läuft - trotzdem neu starten?", -+ { "Busy - restart anyway?", -+ "Beschäftigt - trotzdem neu starten?", - "Snemanje - zares ponoven zagon?", - "In registrazione - restart comunque?", - "Opname loopt - toch opnieuw starten?", -@@ -1052,8 +1052,8 @@ - "¸Ôñâ ×Ðߨáì - ÔÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?", - "Snimanje traje - svejedno restart sistema?", - }, -- { "Recording - shut down anyway?", -- "Aufnahme läuft - trotzdem ausschalten?", -+ { "Busy - shut down anyway?", -+ "Beschäftigt - trotzdem ausschalten?", - "Snemanje - zares izklopi?", - "In registrazione - spengo comunque?", - "Opname loopt - toch uitschakelen?", -diff -Nru -x PLUGINS vdr-1.3.12-orig/menu.c vdr-1.3.12/menu.c ---- vdr-1.3.12-orig/menu.c 2004-06-13 22:26:51.000000000 +0200 -+++ vdr-1.3.12/menu.c 2004-08-17 16:00:07.000000000 +0200 -@@ -2201,7 +2201,7 @@ - - eOSState cMenuSetup::Restart(void) - { -- if (Interface->Confirm(cRecordControls::Active() ? tr("Recording - restart anyway?") : tr("Really restart?"))) { -+ if (Interface->Confirm((cRecordControls::Active() || cPluginManager::Active()) ? tr("Busy - restart anyway?") : tr("Really restart?"))) { - cThread::EmergencyExit(true); - return osEnd; - } -diff -Nru -x PLUGINS vdr-1.3.12-orig/plugin.c vdr-1.3.12/plugin.c ---- vdr-1.3.12-orig/plugin.c 2004-05-22 13:25:22.000000000 +0200 -+++ vdr-1.3.12/plugin.c 2004-08-17 15:57:52.000000000 +0200 -@@ -64,6 +64,11 @@ - { - } - -+bool cPlugin::Active(void) -+{ -+ return false; -+} -+ - const char *cPlugin::MainMenuEntry(void) - { - return NULL; -@@ -369,6 +374,18 @@ - return NULL; - } - -+bool cPluginManager::Active(void) -+{ -+ if (pluginManager) { -+ for (cDll *dll = pluginManager->dlls.First(); dll; dll = pluginManager->dlls.Next(dll)) { -+ cPlugin *p = dll->Plugin(); -+ if (p && p->Active()) -+ return true; -+ } -+ } -+ return false; -+} -+ - void cPluginManager::Shutdown(bool Log) - { - cDll *dll; -diff -Nru -x PLUGINS vdr-1.3.12-orig/plugin.h vdr-1.3.12/plugin.h ---- vdr-1.3.12-orig/plugin.h 2004-04-30 15:46:21.000000000 +0200 -+++ vdr-1.3.12/plugin.h 2004-08-17 15:56:51.000000000 +0200 -@@ -36,6 +36,7 @@ - virtual bool Initialize(void); - virtual bool Start(void); - virtual void Housekeeping(void); -+ virtual bool Active(void); - - virtual const char *MainMenuEntry(void); - virtual cOsdObject *MainMenuAction(void); -@@ -85,6 +86,7 @@ - static bool HasPlugins(void); - static cPlugin *GetPlugin(int Index); - static cPlugin *GetPlugin(const char *Name); -+ static bool Active(void); - void Shutdown(bool Log = false); - }; - -diff -Nru -x PLUGINS vdr-1.3.12-orig/vdr.c vdr-1.3.12/vdr.c ---- vdr-1.3.12-orig/vdr.c 2004-06-13 15:52:09.000000000 +0200 -+++ vdr-1.3.12/vdr.c 2004-08-17 15:59:18.000000000 +0200 -@@ -707,8 +707,8 @@ - Skins.Message(mtError, tr("Can't shutdown - option '-s' not given!")); - break; - } -- if (cRecordControls::Active()) { -- if (Interface->Confirm(tr("Recording - shut down anyway?"))) -+ if (cRecordControls::Active() || cPluginManager::Active()) { -+ if (Interface->Confirm(tr("Busy - shut down anyway?"))) - ForceShutdown = true; - } - LastActivity = 1; // not 0, see below! -@@ -821,7 +821,7 @@ - Skins.Message(mtInfo, tr("Editing process finished")); - } - } -- if (!Interact && ((!cRecordControls::Active() && !cCutter::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) { -+ if (!Interact && ((!cRecordControls::Active() && !cCutter::Active() && !cPluginManager::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) { - time_t Now = time(NULL); - if (Now - LastActivity > ACTIVITYTIMEOUT) { - // Shutdown: |