DADissenterRef BlockMount(DADiskRef disk, void *context) { CFDictionaryRef description = DADiskCopyDescription(disk); CFStringRef name = description ? CFDictionaryGetValue(description, kDADiskDescriptionVolumeNameKey) : NULL; DADissenterRef dissenter = NULL; bool block = false; char *str = NULL; if (name) { int i; CFIndex length = CFStringGetMaximumSizeForEncoding(CFStringGetLength(name), kCFStringEncodingUTF8); str = alloca(length + 1); CFStringGetCString(name, str, length, kCFStringEncodingUTF8); for (i = 0; i < nameCount; i++) { if (CFEqual(name, names[i])) { block = true; break; } } } if (block) { dissenter = DADissenterCreate(kCFAllocatorDefault, kDAReturnNotPermitted, NULL); if(!quiet) if(!quiet) fprintf(stderr, "BLOCKED volume `%s'\n", str); } else { if(!quiet) if(!quiet) fprintf(stderr, "allowed volume `%s'\n", str); } if (description) { CFRelease(description); } return dissenter; }
void DADiskUnmount( DADiskRef disk, DADiskUnmountOptions options, DADiskUnmountCallback callback, void * context ) { DAReturn status; status = kDAReturnBadArgument; if ( disk ) { status = _DAAuthorize( _DADiskGetSession( disk ), _kDAAuthorizeOptionIsOwner, disk, _kDAAuthorizeRightUnmount ); if ( status == kDAReturnSuccess ) { status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskUnmount, disk, options, NULL, NULL, callback, context ); } } if ( status ) { if ( callback ) { DADissenterRef dissenter; dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL ); ( callback )( disk, dissenter, context ); CFRelease( dissenter ); } } }
void DADiskClaim( DADiskRef disk, DADiskClaimOptions options, DADiskClaimReleaseCallback release, void * releaseContext, DADiskClaimCallback callback, void * callbackContext ) { CFNumberRef _release; CFNumberRef _releaseContext; DAReturn status; status = kDAReturnBadArgument; if ( disk ) { _release = ___CFNumberCreateWithIntegerValue( kCFAllocatorDefault, ( uintptr_t ) release ); _releaseContext = ___CFNumberCreateWithIntegerValue( kCFAllocatorDefault, ( uintptr_t ) releaseContext ); status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskClaim, disk, options, _release, _releaseContext, callback, callbackContext ); if ( _release ) CFRelease( _release ); if ( _releaseContext ) CFRelease( _releaseContext ); } if ( status ) { if ( callback ) { DADissenterRef dissenter; dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL ); ( callback )( disk, dissenter, callbackContext ); CFRelease( dissenter ); } } }
void DADiskRename( DADiskRef disk, CFStringRef name, DADiskRenameOptions options, DADiskRenameCallback callback, void * context ) { DAReturn status; status = kDAReturnBadArgument; if ( disk ) { if ( name ) { if ( CFGetTypeID( name ) == CFStringGetTypeID( ) ) { status = _DAAuthorize( _DADiskGetSession( disk ), _kDAAuthorizeOptionIsOwner, disk, _kDAAuthorizeRightRename ); if ( status == kDAReturnSuccess ) { status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskRename, disk, options, name, NULL, callback, context ); } } } } if ( status ) { if ( callback ) { DADissenterRef dissenter; dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL ); ( callback )( disk, dissenter, context ); CFRelease( dissenter ); } } }
void DADiskMountWithArguments( DADiskRef disk, CFURLRef path, DADiskMountOptions options, DADiskMountCallback callback, void * context, CFStringRef arguments[] ) { CFMutableStringRef argument; DAReturn status; argument = NULL; if ( arguments ) { if ( arguments[0] ) { if ( arguments[1] ) { argument = CFStringCreateMutableCopy( kCFAllocatorDefault, 0, arguments[0] ); if ( argument ) { CFIndex index; for ( index = 1; arguments[index]; index++ ) { CFStringAppend( argument, CFSTR( "," ) ); CFStringAppend( argument, arguments[index] ); } } } else { argument = ( void * ) CFRetain( arguments[0] ); } } } if ( path ) { char * _path; _path = ___CFURLCopyFileSystemRepresentation( path ); if ( _path ) { char name[MAXPATHLEN]; if ( realpath( _path, name ) ) { path = CFURLCreateFromFileSystemRepresentation( kCFAllocatorDefault, ( void * ) name, strlen( name ), TRUE ); } else { CFRetain( path ); } free( _path ); } else { CFRetain( path ); } } status = kDAReturnBadArgument; if ( disk ) { status = _DAAuthorize( _DADiskGetSession( disk ), _kDAAuthorizeOptionIsOwner, disk, _kDAAuthorizeRightMount ); if ( status == kDAReturnSuccess ) { status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskMount, disk, options, path ? CFURLGetString( path ) : NULL, argument, callback, context ); } } if ( argument ) { CFRelease( argument ); } if ( path ) { CFRelease( path ); } if ( status ) { if ( callback ) { DADissenterRef dissenter; dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL ); ( callback )( disk, dissenter, context ); CFRelease( dissenter ); } } }