summaryrefslogtreecommitdiff
path: root/dynamicdevice.c
diff options
context:
space:
mode:
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;
}