diff options
-rw-r--r-- | rbutil/rbutilqt/base/utils.cpp | 39 | ||||
-rw-r--r-- | rbutil/rbutilqt/rbutilqt.cpp | 2 |
2 files changed, 40 insertions, 1 deletions
diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp index cffa4b1cad..eec03fe0ad 100644 --- a/rbutil/rbutilqt/base/utils.cpp +++ b/rbutil/rbutilqt/base/utils.cpp | |||
@@ -749,6 +749,45 @@ bool Utils::ejectDevice(QString device) | |||
749 | return success; | 749 | return success; |
750 | 750 | ||
751 | #endif | 751 | #endif |
752 | #if defined(Q_OS_MACX) | ||
753 | // FIXME: FSUnmountVolumeSync is deprecated starting with 10.8. | ||
754 | // Use DADiskUnmount / DiskArbitration framework eventually. | ||
755 | // BSD label does not include folder. | ||
756 | QString bsd = Utils::resolveDevicename(device).remove("/dev/"); | ||
757 | OSStatus result; | ||
758 | ItemCount index = 1; | ||
759 | bool found = false; | ||
760 | |||
761 | do { | ||
762 | FSVolumeRefNum volrefnum; | ||
763 | |||
764 | result = FSGetVolumeInfo(kFSInvalidVolumeRefNum, index, &volrefnum, | ||
765 | kFSVolInfoFSInfo, NULL, NULL, NULL); | ||
766 | if(result == noErr) { | ||
767 | GetVolParmsInfoBuffer volparms; | ||
768 | HParamBlockRec hpb; | ||
769 | hpb.ioParam.ioNamePtr = NULL; | ||
770 | hpb.ioParam.ioVRefNum = volrefnum; | ||
771 | hpb.ioParam.ioBuffer = (Ptr)&volparms; | ||
772 | hpb.ioParam.ioReqCount = sizeof(volparms); | ||
773 | |||
774 | if(PBHGetVolParmsSync(&hpb) == noErr) { | ||
775 | if(volparms.vMServerAdr == 0) { | ||
776 | if(bsd == (char*)volparms.vMDeviceID) { | ||
777 | pid_t dissenter; | ||
778 | result = FSUnmountVolumeSync(volrefnum, 0, &dissenter); | ||
779 | found = true; | ||
780 | break; | ||
781 | } | ||
782 | } | ||
783 | } | ||
784 | } | ||
785 | index++; | ||
786 | } while(result == noErr); | ||
787 | if(result == noErr && found) | ||
788 | return true; | ||
789 | |||
790 | #endif | ||
752 | return false; | 791 | return false; |
753 | } | 792 | } |
754 | 793 | ||
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp index aa0c365303..0cdd8365a0 100644 --- a/rbutil/rbutilqt/rbutilqt.cpp +++ b/rbutil/rbutilqt/rbutilqt.cpp | |||
@@ -111,7 +111,7 @@ RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent) | |||
111 | } | 111 | } |
112 | #endif | 112 | #endif |
113 | 113 | ||
114 | #if !defined(Q_OS_WIN32) | 114 | #if !defined(Q_OS_WIN32) && !defined(Q_OS_MACX) |
115 | /* eject funtionality is only implemented on W32 right now. */ | 115 | /* eject funtionality is only implemented on W32 right now. */ |
116 | ui.buttonEject->setEnabled(false); | 116 | ui.buttonEject->setEnabled(false); |
117 | #endif | 117 | #endif |