diff --git a/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp b/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp index 2107205a11..7c745beeb2 100644 --- a/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp +++ b/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp @@ -60,8 +60,25 @@ MemoryCardDriverThreaded_MacOSX::~MemoryCardDriverThreaded_MacOSX() void MemoryCardDriverThreaded_MacOSX::Unmount( UsbStorageDevice *pDevice ) { +#if defined(SYNC_VOLUME_FULLSYNC) && defined(SYNC_VOLUME_WAIT) + if( sync_volume_np( pDevice->sOsMountDir.c_str(), SYNC_VOLUME_FULLSYNC | SYNC_VOLUME_WAIT ) != 0 ) LOG->Warn( "Failed to flush the memory card." ); +#else + ParamBlockRec pb; + Str255 name; // A pascal string. + const RString& base = Basename( pDevice->sOsMountDir ); + + memset( &pb, 0, sizeof(pb) ); + name[0] = min( base.length(), size_t(255) ); + strncpy( (char *)&name[1], base, name[0] ); + pb.volumeParam.ioNamePtr = name; + pb.volumeParam.ioVolIndex = -1; // Use ioNamePtr to find the volume. + + if( PBFlushVolSync(&pb) != noErr ) + LOG->Warn( "Failed to flush the memory card." ); + +#endif } bool MemoryCardDriverThreaded_MacOSX::USBStorageDevicesChanged()