summaryrefslogtreecommitdiff
path: root/dynamicdevice.c
diff options
context:
space:
mode:
authorLars Hanisch <dvb@flensrocker.de>2011-03-18 00:08:18 +0100
committerLars Hanisch <dvb@flensrocker.de>2011-03-18 00:08:18 +0100
commit064797c1d6bdf08dcc0bc9c1195cb765431cca6b (patch)
tree32a6fb5822fff734eba34c9c2491945fa15a6b4c /dynamicdevice.c
parent346ebc85cd43fbf778a200e912bcb6079b611e64 (diff)
downloadvdr-plugin-dynamite-064797c1d6bdf08dcc0bc9c1195cb765431cca6b.tar.gz
vdr-plugin-dynamite-064797c1d6bdf08dcc0bc9c1195cb765431cca6b.tar.bz2
add new command ForceDetachDevice, the device will be detached regardless of any receivers or locks
Diffstat (limited to 'dynamicdevice.c')
-rw-r--r--dynamicdevice.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/dynamicdevice.c b/dynamicdevice.c
index bfd06af..ba74193 100644
--- a/dynamicdevice.c
+++ b/dynamicdevice.c
@@ -39,7 +39,7 @@ bool cDynamicDevice::ProcessQueuedCommands(void)
}
case ddpcDetach:
{
- DetachDevice(*dev->devpath);
+ DetachDevice(*dev->devpath, false);
break;
}
case ddpcService:
@@ -165,7 +165,7 @@ attach:
return ddrcSuccess;
}
-eDynamicDeviceReturnCode cDynamicDevice::DetachDevice(const char *DevPath)
+eDynamicDeviceReturnCode cDynamicDevice::DetachDevice(const char *DevPath, bool Force)
{
if (!DevPath)
return ddrcNotSupported;
@@ -183,23 +183,25 @@ eDynamicDeviceReturnCode cDynamicDevice::DetachDevice(const char *DevPath)
return ddrcNotFound;
}
- if (!dynamicdevice[index]->isDetachable) {
- esyslog("dynamite: detaching of device %s is not allowed", DevPath);
- return ddrcNotAllowed;
- }
+ if (!Force) {
+ if (!dynamicdevice[index]->isDetachable) {
+ esyslog("dynamite: detaching of device %s is not allowed", DevPath);
+ return ddrcNotAllowed;
+ }
- if (dynamicdevice[index] == PrimaryDevice()) {
- esyslog("dynamite: detaching of primary device %s is not supported", DevPath);
- return ddrcIsPrimaryDevice;
- }
+ if (dynamicdevice[index] == PrimaryDevice()) {
+ esyslog("dynamite: detaching of primary device %s is not supported", DevPath);
+ return ddrcIsPrimaryDevice;
+ }
- if (dynamicdevice[index]->Receiving(false)) {
- esyslog("dynamite: can't detach device %s, it's receiving something important", DevPath);
- return ddrcIsReceiving;
+ if (dynamicdevice[index]->Receiving(false)) {
+ esyslog("dynamite: can't detach device %s, it's receiving something important", DevPath);
+ return ddrcIsReceiving;
+ }
}
dynamicdevice[index]->DeleteSubDevice();
- isyslog("dynamite: detached device %s", DevPath);
+ isyslog("dynamite: detached device %s%s", DevPath, (Force ? " (forced)" : ""));
return ddrcSuccess;
}