OS X: use FSGetVolumeParms when targeting 10.5+.

PBHGetVolParmsSync() is not available when building with 64bit. The replacement
FSGetVolumeParms() is available on 10.5+ only. Use the latter when building
with target version 10.5+. This requires builds targeting 10.4 to 32bit and
allows building as 64bit when targeting 10.5+.

Change-Id: Ic53217f3090147bea473613335f9482623a470bd
This commit is contained in:
Dominik Riebeling 2014-03-08 18:46:19 +01:00
parent f8e3b61565
commit 06a2e7c3bb

View file

@ -160,13 +160,23 @@ QString Utils::filesystemName(QString path)
if(result == noErr) { if(result == noErr) {
GetVolParmsInfoBuffer volparms; GetVolParmsInfoBuffer volparms;
/* PBHGetVolParmsSync() is not available for 64bit while
FSGetVolumeParms() is available in 10.5+. Thus we need to use
PBHGetVolParmsSync() for 10.4, and that also requires 10.4 to
always use 32bit.
Qt 4 supports 32bit on 10.6 Cocoa only.
*/
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
if(FSGetVolumeParms(volrefnum, &volparms, sizeof(volparms)) == noErr)
#else
HParamBlockRec hpb; HParamBlockRec hpb;
hpb.ioParam.ioNamePtr = NULL; hpb.ioParam.ioNamePtr = NULL;
hpb.ioParam.ioVRefNum = volrefnum; hpb.ioParam.ioVRefNum = volrefnum;
hpb.ioParam.ioBuffer = (Ptr)&volparms; hpb.ioParam.ioBuffer = (Ptr)&volparms;
hpb.ioParam.ioReqCount = sizeof(volparms); hpb.ioParam.ioReqCount = sizeof(volparms);
if(PBHGetVolParmsSync(&hpb) == noErr)
if(PBHGetVolParmsSync(&hpb) == noErr) { #endif
{
if(volparms.vMServerAdr == 0) { if(volparms.vMServerAdr == 0) {
if(bsd == (char*)volparms.vMDeviceID) { if(bsd == (char*)volparms.vMDeviceID) {
name = QString::fromUtf16((const ushort*)volname.unicode, name = QString::fromUtf16((const ushort*)volname.unicode,
@ -798,13 +808,19 @@ bool Utils::ejectDevice(QString device)
kFSVolInfoFSInfo, NULL, NULL, NULL); kFSVolInfoFSInfo, NULL, NULL, NULL);
if(result == noErr) { if(result == noErr) {
GetVolParmsInfoBuffer volparms; GetVolParmsInfoBuffer volparms;
/* See above -- PBHGetVolParmsSync() is not available for 64bit,
* and FSGetVolumeParms() on 10.5+ only. */
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
if(FSGetVolumeParms(volrefnum, &volparms, sizeof(volparms)) == noErr)
#else
HParamBlockRec hpb; HParamBlockRec hpb;
hpb.ioParam.ioNamePtr = NULL; hpb.ioParam.ioNamePtr = NULL;
hpb.ioParam.ioVRefNum = volrefnum; hpb.ioParam.ioVRefNum = volrefnum;
hpb.ioParam.ioBuffer = (Ptr)&volparms; hpb.ioParam.ioBuffer = (Ptr)&volparms;
hpb.ioParam.ioReqCount = sizeof(volparms); hpb.ioParam.ioReqCount = sizeof(volparms);
if(PBHGetVolParmsSync(&hpb) == noErr)
if(PBHGetVolParmsSync(&hpb) == noErr) { #endif
{
if(volparms.vMServerAdr == 0) { if(volparms.vMServerAdr == 0) {
if(bsd == (char*)volparms.vMDeviceID) { if(bsd == (char*)volparms.vMDeviceID) {
pid_t dissenter; pid_t dissenter;