File use-kdeeject.diff of Package k3b

--- libk3bdevice/k3bdevice.cpp	2007/06/24 03:07:13	1.1
+++ libk3bdevice/k3bdevice.cpp	2007/06/24 03:11:08
@@ -32,6 +32,7 @@
 #include <qmutex.h>
 
 #include <k3bdebug.h>
+#include <kprocess.h>
 
 #include <sys/types.h>
 #include <sys/ioctl.h>
@@ -1509,17 +1510,24 @@
         return success;
 #endif
 
+  k3bDebug() << "(K3bDevice::Device::eject) Device: " << blockDeviceName() << endl;
+  KProcess proc;
+  proc << "kdeeject";
+  proc << "-q";
+  proc << blockDeviceName();
+  if (!proc.start(KProcess::Block) || !proc.normalExit()) {
     ScsiCommand cmd( this );
-    cmd[0] = MMC_PREVENT_ALLOW_MEDIUM_REMOVAL;
-    cmd[5] = 0; // Necessary to set the proper command length
-    if( b )
-        cmd[4] = 0x01;
-    int r = cmd.transport( TR_DIR_WRITE );
+    cmd[0] = MMC_START_STOP_UNIT;
 
-    if( r )
-        k3bDebug() << "(K3bDevice::Device) MMC ALLOW MEDIA REMOVAL failed." << endl;
+    // Since all other eject methods I saw also start the unit before ejecting
+    // we do it also although I don't know why...
+    cmd[4] = 0x1;      // Start unit
+    cmd.transport();
+    cmd[4] = 0x2;    // LoEj = 1, Start = 0
 
-    return ( r == 0 );
+    return !cmd.transport();
+  }
+  return true;
 }
 
 bool K3bDevice::Device::rewritable() const
openSUSE Build Service is sponsored by