this repo has no description
1#include <DiskArbitration/DiskArbitration.h>
2#include <stddef.h>
3#include <string.h>
4#include <CoreFoundation/CFRuntime.h>
5#include <CoreFoundation/CFBase.h>
6#include <CoreFoundation/CFURL.h>
7#include <CoreFoundation/CFDictionary.h>
8#include <CoreFoundation/CoreFoundation.h>
9
10#define CONST_STRING_DECL(name, value) const CFStringRef name = CFSTR(value);
11
12CONST_STRING_DECL(kDADiskDescriptionVolumeKindKey, "kDADiskDescriptionVolumeKindKey");
13CONST_STRING_DECL(kDADiskDescriptionVolumeMountableKey, "kDADiskDescriptionVolumeMountableKey");
14CONST_STRING_DECL(kDADiskDescriptionVolumeNameKey, "kDADiskDescriptionVolumeNameKey");
15CONST_STRING_DECL(kDADiskDescriptionVolumeNetworkKey, "kDADiskDescriptionVolumeNetworkKey");
16CONST_STRING_DECL(kDADiskDescriptionVolumePathKey, "kDADiskDescriptionVolumePathKey");
17CONST_STRING_DECL(kDADiskDescriptionVolumeUUIDKey, "kDADiskDescriptionVolumeUUIDKey");
18
19CONST_STRING_DECL(kDADiskDescriptionMediaBlockSizeKey, "kDADiskDescriptionMediaBlockSizeKey");
20CONST_STRING_DECL(kDADiskDescriptionMediaBSDMajorKey, "kDADiskDescriptionMediaBSDMajorKey");
21CONST_STRING_DECL(kDADiskDescriptionMediaBSDMinorKey, "kDADiskDescriptionMediaBSDMinorKey");
22CONST_STRING_DECL(kDADiskDescriptionMediaBSDNameKey, "kDADiskDescriptionMediaBSDNameKey");
23CONST_STRING_DECL(kDADiskDescriptionMediaBSDUnitKey, "kDADiskDescriptionMediaBSDUnitKey");
24CONST_STRING_DECL(kDADiskDescriptionMediaContentKey, "kDADiskDescriptionMediaContentKey");
25CONST_STRING_DECL(kDADiskDescriptionMediaEjectableKey, "kDADiskDescriptionMediaEjectableKey");
26CONST_STRING_DECL(kDADiskDescriptionMediaIconKey, "kDADiskDescriptionMediaIconKey");
27CONST_STRING_DECL(kDADiskDescriptionMediaKindKey, "kDADiskDescriptionMediaKindKey");
28CONST_STRING_DECL(kDADiskDescriptionMediaLeafKey, "kDADiskDescriptionMediaLeafKey");
29CONST_STRING_DECL(kDADiskDescriptionMediaNameKey, "kDADiskDescriptionMediaNameKey");
30CONST_STRING_DECL(kDADiskDescriptionMediaPathKey, "kDADiskDescriptionMediaPathKey");
31CONST_STRING_DECL(kDADiskDescriptionMediaRemovableKey, "kDADiskDescriptionMediaRemovableKey");
32CONST_STRING_DECL(kDADiskDescriptionMediaSizeKey, "kDADiskDescriptionMediaSizeKey");
33CONST_STRING_DECL(kDADiskDescriptionMediaTypeKey, "kDADiskDescriptionMediaTypeKey");
34CONST_STRING_DECL(kDADiskDescriptionMediaUUIDKey, "kDADiskDescriptionMediaUUIDKey");
35CONST_STRING_DECL(kDADiskDescriptionMediaWholeKey, "kDADiskDescriptionMediaWholeKey");
36CONST_STRING_DECL(kDADiskDescriptionMediaWritableKey, "kDADiskDescriptionMediaWritableKey");
37CONST_STRING_DECL(kDADiskDescriptionMediaEncryptedKey, "kDADiskDescriptionMediaEncryptedKey");
38CONST_STRING_DECL(kDADiskDescriptionMediaEncryptionDetailKey, "kDADiskDescriptionMediaEncryptionDetailKey");
39
40CONST_STRING_DECL(kDADiskDescriptionDeviceGUIDKey, "kDADiskDescriptionDeviceGUIDKey");
41CONST_STRING_DECL(kDADiskDescriptionDeviceInternalKey, "kDADiskDescriptionDeviceInternalKey");
42CONST_STRING_DECL(kDADiskDescriptionDeviceModelKey, "kDADiskDescriptionDeviceModelKey");
43CONST_STRING_DECL(kDADiskDescriptionDevicePathKey, "kDADiskDescriptionDevicePathKey");
44CONST_STRING_DECL(kDADiskDescriptionDeviceProtocolKey, "kDADiskDescriptionDeviceProtocolKey");
45CONST_STRING_DECL(kDADiskDescriptionDeviceRevisionKey, "kDADiskDescriptionDeviceRevisionKey");
46CONST_STRING_DECL(kDADiskDescriptionDeviceUnitKey, "kDADiskDescriptionDeviceUnitKey");
47CONST_STRING_DECL(kDADiskDescriptionDeviceVendorKey, "kDADiskDescriptionDeviceVendorKey");
48CONST_STRING_DECL(kDADiskDescriptionDeviceTDMLockedKey, "kDADiskDescriptionDeviceTDMLockedKey");
49
50CONST_STRING_DECL(kDADiskDescriptionBusNameKey, "kDADiskDescriptionBusNameKey");
51CONST_STRING_DECL(kDADiskDescriptionBusPathKey, "kDADiskDescriptionBusPathKey");
52
53struct __DADisk
54{
55 CFRuntimeBase _parent;
56 DASessionRef session;
57 CFStringRef path;
58};
59
60static CFTypeID _kDADiskTypeID = 0;
61static void DADiskFinalize(CFTypeRef cf);
62static Boolean DADiskEqual(CFTypeRef cf1, CFTypeRef cf2);
63static CFHashCode DADiskHash(CFTypeRef cf);
64static DADiskRef DADiskCreateCopy (CFAllocatorRef allocator, DADiskRef disk);
65
66static CFRuntimeClass DADiskClass = {
67 0,
68 "DADisk",
69 NULL,
70 (CFTypeRef (*)(CFAllocatorRef, CFTypeRef)) DADiskCreateCopy,
71 DADiskFinalize,
72 DADiskEqual,
73 DADiskHash,
74 NULL,
75 NULL
76};
77
78__attribute__((constructor))
79void
80DADiskInitialize (void)
81{
82 _kDADiskTypeID = _CFRuntimeRegisterClass (&DADiskClass);
83}
84
85#define DADISK_SIZE sizeof(struct __DADisk) - sizeof(CFRuntimeBase)
86
87static void
88DADiskFinalize (CFTypeRef cf)
89{
90 DADiskRef disk = (DADiskRef) cf;
91 CFRelease(disk->session);
92 CFRelease(disk->path);
93}
94
95static Boolean
96DADiskEqual (CFTypeRef cf1, CFTypeRef cf2)
97{
98 DADiskRef d1 = (DADiskRef) cf1;
99 DADiskRef d2 = (DADiskRef) cf2;
100 return CFStringCompare(d1->path, d2->path, 0) == kCFCompareEqualTo;
101}
102
103static CFHashCode
104DADiskHash (CFTypeRef cf)
105{
106 return CFHash(((DADiskRef) cf)->path);
107}
108
109static DADiskRef
110DADiskCreateCopy (CFAllocatorRef allocator, DADiskRef disk)
111{
112 CFStringRef path;
113 DADiskRef new;
114
115 new = (DADiskRef) _CFRuntimeCreateInstance (allocator, _kDADiskTypeID,
116 DADISK_SIZE, 0);
117 new->path = (CFStringRef) CFRetain(disk->path);
118 new->session = (DASessionRef) CFRetain(disk->session);
119
120 return new;
121}
122
123CFTypeID DADiskGetTypeID(void)
124{
125 return _kDADiskTypeID;
126}
127
128DADiskRef DADiskCreateFromBSDName(CFAllocatorRef allocator,
129 DASessionRef session, const char* name)
130{
131 CFStringRef path;
132 DADiskRef new;
133
134 path = CFStringCreateWithCString(allocator, name, kCFStringEncodingUTF8);
135
136 new = (DADiskRef) _CFRuntimeCreateInstance (allocator, _kDADiskTypeID,
137 DADISK_SIZE, 0);
138 new->path = path;
139 new->session = (DASessionRef) CFRetain(session);
140
141 return new;
142}
143
144DADiskRef DADiskCreateFromIOMedia(CFAllocatorRef allocator,
145 DASessionRef session, io_service_t media)
146{
147 return DADiskCreateFromBSDName(allocator, session, "/dummy");
148}
149
150DADiskRef DADiskCreateFromVolumePath(CFAllocatorRef allocator,
151 DASessionRef session, CFURLRef url)
152{
153 CFStringRef path;
154 DADiskRef new;
155
156 new = (DADiskRef) _CFRuntimeCreateInstance (allocator, _kDADiskTypeID,
157 DADISK_SIZE, 0);
158 new->path = (CFStringRef) CFRetain(CFURLGetString(url));
159 new->session = (DASessionRef) CFRetain(session);
160
161 return new;
162}
163
164const char* DADiskGetBSDName(DADiskRef disk)
165{
166 return disk->path;
167}
168
169io_service_t DADiskCopyIOMedia(DADiskRef disk)
170{
171 return 0;
172}
173
174CFDictionaryRef DADiskCopyDescription(DADiskRef disk)
175{
176 return CFDictionaryCreate(NULL, NULL, NULL, 0,
177 &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
178}
179
180DADiskRef DADiskCopyWholeDisk(DADiskRef disk)
181{
182 return (DADiskRef) CFRetain(disk);
183}