Something went wrong. Try again.
Cider Isn't Darwin Emulation, Really
Something went wrong. Try again.
7.3 kB · 183 lines
C
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184#include <DiskArbitration/DiskArbitration.h>#include <stddef.h>#include <string.h>#include <CoreFoundation/CFRuntime.h>#include <CoreFoundation/CFBase.h>#include <CoreFoundation/CFURL.h>#include <CoreFoundation/CFDictionary.h>#include <CoreFoundation/CoreFoundation.h>
#define CONST_STRING_DECL(name, value) const CFStringRef name = CFSTR(value);
CONST_STRING_DECL(kDADiskDescriptionVolumeKindKey, "kDADiskDescriptionVolumeKindKey");CONST_STRING_DECL(kDADiskDescriptionVolumeMountableKey, "kDADiskDescriptionVolumeMountableKey");CONST_STRING_DECL(kDADiskDescriptionVolumeNameKey, "kDADiskDescriptionVolumeNameKey");CONST_STRING_DECL(kDADiskDescriptionVolumeNetworkKey, "kDADiskDescriptionVolumeNetworkKey");CONST_STRING_DECL(kDADiskDescriptionVolumePathKey, "kDADiskDescriptionVolumePathKey");CONST_STRING_DECL(kDADiskDescriptionVolumeUUIDKey, "kDADiskDescriptionVolumeUUIDKey");
CONST_STRING_DECL(kDADiskDescriptionMediaBlockSizeKey, "kDADiskDescriptionMediaBlockSizeKey");CONST_STRING_DECL(kDADiskDescriptionMediaBSDMajorKey, "kDADiskDescriptionMediaBSDMajorKey");CONST_STRING_DECL(kDADiskDescriptionMediaBSDMinorKey, "kDADiskDescriptionMediaBSDMinorKey");CONST_STRING_DECL(kDADiskDescriptionMediaBSDNameKey, "kDADiskDescriptionMediaBSDNameKey");CONST_STRING_DECL(kDADiskDescriptionMediaBSDUnitKey, "kDADiskDescriptionMediaBSDUnitKey");CONST_STRING_DECL(kDADiskDescriptionMediaContentKey, "kDADiskDescriptionMediaContentKey");CONST_STRING_DECL(kDADiskDescriptionMediaEjectableKey, "kDADiskDescriptionMediaEjectableKey");CONST_STRING_DECL(kDADiskDescriptionMediaIconKey, "kDADiskDescriptionMediaIconKey");CONST_STRING_DECL(kDADiskDescriptionMediaKindKey, "kDADiskDescriptionMediaKindKey");CONST_STRING_DECL(kDADiskDescriptionMediaLeafKey, "kDADiskDescriptionMediaLeafKey");CONST_STRING_DECL(kDADiskDescriptionMediaNameKey, "kDADiskDescriptionMediaNameKey");CONST_STRING_DECL(kDADiskDescriptionMediaPathKey, "kDADiskDescriptionMediaPathKey");CONST_STRING_DECL(kDADiskDescriptionMediaRemovableKey, "kDADiskDescriptionMediaRemovableKey");CONST_STRING_DECL(kDADiskDescriptionMediaSizeKey, "kDADiskDescriptionMediaSizeKey");CONST_STRING_DECL(kDADiskDescriptionMediaTypeKey, "kDADiskDescriptionMediaTypeKey");CONST_STRING_DECL(kDADiskDescriptionMediaUUIDKey, "kDADiskDescriptionMediaUUIDKey");CONST_STRING_DECL(kDADiskDescriptionMediaWholeKey, "kDADiskDescriptionMediaWholeKey");CONST_STRING_DECL(kDADiskDescriptionMediaWritableKey, "kDADiskDescriptionMediaWritableKey");CONST_STRING_DECL(kDADiskDescriptionMediaEncryptedKey, "kDADiskDescriptionMediaEncryptedKey");CONST_STRING_DECL(kDADiskDescriptionMediaEncryptionDetailKey, "kDADiskDescriptionMediaEncryptionDetailKey");
CONST_STRING_DECL(kDADiskDescriptionDeviceGUIDKey, "kDADiskDescriptionDeviceGUIDKey");CONST_STRING_DECL(kDADiskDescriptionDeviceInternalKey, "kDADiskDescriptionDeviceInternalKey");CONST_STRING_DECL(kDADiskDescriptionDeviceModelKey, "kDADiskDescriptionDeviceModelKey");CONST_STRING_DECL(kDADiskDescriptionDevicePathKey, "kDADiskDescriptionDevicePathKey");CONST_STRING_DECL(kDADiskDescriptionDeviceProtocolKey, "kDADiskDescriptionDeviceProtocolKey");CONST_STRING_DECL(kDADiskDescriptionDeviceRevisionKey, "kDADiskDescriptionDeviceRevisionKey"); CONST_STRING_DECL(kDADiskDescriptionDeviceUnitKey, "kDADiskDescriptionDeviceUnitKey"); CONST_STRING_DECL(kDADiskDescriptionDeviceVendorKey, "kDADiskDescriptionDeviceVendorKey"); CONST_STRING_DECL(kDADiskDescriptionDeviceTDMLockedKey, "kDADiskDescriptionDeviceTDMLockedKey");
CONST_STRING_DECL(kDADiskDescriptionBusNameKey, "kDADiskDescriptionBusNameKey"); CONST_STRING_DECL(kDADiskDescriptionBusPathKey, "kDADiskDescriptionBusPathKey");
struct __DADisk{ CFRuntimeBase _parent; DASessionRef session; CFStringRef path;};
static CFTypeID _kDADiskTypeID = 0;static void DADiskFinalize(CFTypeRef cf);static Boolean DADiskEqual(CFTypeRef cf1, CFTypeRef cf2);static CFHashCode DADiskHash(CFTypeRef cf);static DADiskRef DADiskCreateCopy (CFAllocatorRef allocator, DADiskRef disk);
static CFRuntimeClass DADiskClass = { 0, "DADisk", NULL, (CFTypeRef (*)(CFAllocatorRef, CFTypeRef)) DADiskCreateCopy, DADiskFinalize, DADiskEqual, DADiskHash, NULL, NULL};
__attribute__((constructor))voidDADiskInitialize (void){ _kDADiskTypeID = _CFRuntimeRegisterClass (&DADiskClass);}
#define DADISK_SIZE sizeof(struct __DADisk) - sizeof(CFRuntimeBase)
static voidDADiskFinalize (CFTypeRef cf){ DADiskRef disk = (DADiskRef) cf; CFRelease(disk->session); CFRelease(disk->path);}
static BooleanDADiskEqual (CFTypeRef cf1, CFTypeRef cf2){ DADiskRef d1 = (DADiskRef) cf1; DADiskRef d2 = (DADiskRef) cf2; return CFStringCompare(d1->path, d2->path, 0) == kCFCompareEqualTo;}
static CFHashCodeDADiskHash (CFTypeRef cf){ return CFHash(((DADiskRef) cf)->path);}
static DADiskRefDADiskCreateCopy (CFAllocatorRef allocator, DADiskRef disk){ CFStringRef path; DADiskRef new; new = (DADiskRef) _CFRuntimeCreateInstance (allocator, _kDADiskTypeID, DADISK_SIZE, 0); new->path = (CFStringRef) CFRetain(disk->path); new->session = (DASessionRef) CFRetain(disk->session); return new;}
CFTypeID DADiskGetTypeID(void){ return _kDADiskTypeID;}
DADiskRef DADiskCreateFromBSDName(CFAllocatorRef allocator, DASessionRef session, const char* name){ CFStringRef path; DADiskRef new; path = CFStringCreateWithCString(allocator, name, kCFStringEncodingUTF8); new = (DADiskRef) _CFRuntimeCreateInstance (allocator, _kDADiskTypeID, DADISK_SIZE, 0); new->path = path; new->session = (DASessionRef) CFRetain(session); return new;}
DADiskRef DADiskCreateFromIOMedia(CFAllocatorRef allocator, DASessionRef session, io_service_t media){ return DADiskCreateFromBSDName(allocator, session, "/dummy");}
DADiskRef DADiskCreateFromVolumePath(CFAllocatorRef allocator, DASessionRef session, CFURLRef url){ CFStringRef path; DADiskRef new; new = (DADiskRef) _CFRuntimeCreateInstance (allocator, _kDADiskTypeID, DADISK_SIZE, 0); new->path = (CFStringRef) CFRetain(CFURLGetString(url)); new->session = (DASessionRef) CFRetain(session); return new;}
const char* DADiskGetBSDName(DADiskRef disk){ return disk->path;}
io_service_t DADiskCopyIOMedia(DADiskRef disk){ return 0;}
CFDictionaryRef DADiskCopyDescription(DADiskRef disk){ return CFDictionaryCreate(NULL, NULL, NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);}
DADiskRef DADiskCopyWholeDisk(DADiskRef disk){ return (DADiskRef) CFRetain(disk);}