summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2012-09-16 21:07:46 +0200
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2012-09-16 21:08:18 +0200
commit1c975eefd3304e22556459f71ea6ed840ae75c64 (patch)
treed636e51b2f300442fc3e6209a8ec4f1a185118dd
parentf902bbe07e8968af2d5697c6ac3032bed02d56f0 (diff)
downloadrockbox-1c975eefd3304e22556459f71ea6ed840ae75c64.tar.gz
rockbox-1c975eefd3304e22556459f71ea6ed840ae75c64.zip
Support "eject" on OS X.
Change-Id: I103587f2fad2b8b31a1bc53afbd107bf55f62c93
-rw-r--r--rbutil/rbutilqt/base/utils.cpp39
-rw-r--r--rbutil/rbutilqt/rbutilqt.cpp2
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