Skip to content

Commit b9261b2

Browse files
committed
Use MemoryMappedFile instead of FileHandle
1 parent 6e50db0 commit b9261b2

File tree

12 files changed

+81
-68
lines changed

12 files changed

+81
-68
lines changed

Sources/MachOObjCSection/Extension/DyldCache+.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,17 @@
88

99
import Foundation
1010
import MachOKit
11+
#if compiler(>=6.0) || (compiler(>=5.10) && hasFeature(AccessLevelOnImport))
12+
internal import FileIO
13+
#else
14+
@_implementationOnly import FileIO
15+
#endif
1116

1217
extension DyldCache {
13-
var fileHandle: FileHandle {
14-
try! .init(forReadingFrom: url)
18+
internal typealias File = MemoryMappedFile
19+
20+
var fileHandle: File {
21+
try! .open(url: url, isWritable: false)
1522
}
1623

1724
var fileStartOffset: UInt64 {

Sources/MachOObjCSection/Extension/MachOFile+.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,17 @@
88

99
import Foundation
1010
import MachOKit
11+
#if compiler(>=6.0) || (compiler(>=5.10) && hasFeature(AccessLevelOnImport))
12+
internal import FileIO
13+
#else
14+
@_implementationOnly import FileIO
15+
#endif
1116

1217
extension MachOFile {
13-
var fileHandle: FileHandle {
14-
try! .init(forReadingFrom: url)
18+
internal typealias File = MemoryMappedFile
19+
20+
var fileHandle: File {
21+
try! .open(url: url, isWritable: false)
1522
}
1623
}
1724

Sources/MachOObjCSection/Extension/_FileIOProtocol+.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import Foundation
1212
@_spi(Support) import MachOKit
1313
#if compiler(>=6.0) || (compiler(>=5.10) && hasFeature(AccessLevelOnImport))
14-
private import FileIO
14+
internal import FileIO
1515
#else
1616
@_implementationOnly import FileIO
1717
#endif

Sources/MachOObjCSection/MachOFile+ObjectiveC.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ extension MachOFile.ObjectiveC {
3535
return nil
3636
}
3737

38-
return machO.fileHandle.read(
38+
return try! machO.fileHandle.read(
3939
offset: numericCast(__objc_imageinfo.offset + machO.headerStartOffset)
4040
)
4141
}
@@ -63,9 +63,9 @@ extension MachOFile.ObjectiveC {
6363
}
6464

6565
return .init(
66-
data: machO.fileHandle.readData(
66+
data: try! machO.fileHandle.readData(
6767
offset: numericCast(__objc_methlist.offset + machO.headerStartOffset),
68-
size: __objc_methlist.size
68+
length: __objc_methlist.size
6969
),
7070
offset: offset,
7171
align: __objc_methlist.align,
@@ -272,9 +272,9 @@ extension MachOFile.ObjectiveC {
272272
in machO: MachOFile,
273273
isCatlist2: Bool = false
274274
) -> [Categgory]? {
275-
let data = machO.fileHandle.readData(
275+
let data = try! machO.fileHandle.readData(
276276
offset: numericCast(section.offset + machO.headerStartOffset),
277-
size: section.size
277+
length: section.size
278278
)
279279

280280
typealias Pointer = Categgory.Layout.Pointer
@@ -311,9 +311,9 @@ extension MachOFile.ObjectiveC {
311311
from section: any SectionProtocol,
312312
in machO: MachOFile
313313
) -> [Class]? {
314-
let data = machO.fileHandle.readData(
314+
let data = try! machO.fileHandle.readData(
315315
offset: numericCast(section.offset + machO.headerStartOffset),
316-
size: section.size
316+
length: section.size
317317
)
318318

319319
typealias Pointer = Class.Layout.Pointer
@@ -346,9 +346,9 @@ extension MachOFile.ObjectiveC {
346346
from section: any SectionProtocol,
347347
in machO: MachOFile
348348
) -> [Protocol]? {
349-
let data = machO.fileHandle.readData(
349+
let data = try! machO.fileHandle.readData(
350350
offset: numericCast(section.offset + machO.headerStartOffset),
351-
size: section.size
351+
length: section.size
352352
)
353353

354354
typealias Pointer = Protocol.Layout.Pointer

Sources/MachOObjCSection/Model/Method/ObjCMethodList.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ extension ObjCMethodList {
238238
.map {
239239
let offset = numericCast(offset) + $0 * size
240240
let name: UInt64 = machO.fileOffset(
241-
of: machO.fileHandle.read(
241+
of: try! machO.fileHandle.read(
242242
offset: numericCast(offset) + numericCast($1.name.offset)
243243
)
244244
)

Sources/MachOObjCSection/Model/Method/ObjCMethodRelativeListList.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ extension ObjCMethodRelativeListList {
5454

5555
guard let machO = entry.machO(in: cache) else { return nil }
5656

57-
let data = cache.fileHandle.readData(
58-
offset: resolvedOffset,
59-
size: MemoryLayout<List.Header>.size
57+
let data = try! cache.fileHandle.readData(
58+
offset: numericCast(resolvedOffset),
59+
length: MemoryLayout<List.Header>.size
6060
)
6161
let list: List? = data.withUnsafeBytes {
6262
guard let ptr = $0.baseAddress else {

Sources/MachOObjCSection/Model/Property/ObjCPropertyRelativeListList.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ public struct ObjCPropertyRelativeListList: RelativeListListProtocol {
5252

5353
guard let machO = entry.machO(in: cache) else { return nil }
5454

55-
let data = cache.fileHandle.readData(
56-
offset: resolvedOffset,
57-
size: MemoryLayout<List.Header>.size
55+
let data = try! cache.fileHandle.readData(
56+
offset: numericCast(resolvedOffset),
57+
length: MemoryLayout<List.Header>.size
5858
)
5959
let list: List? = data.withUnsafeBytes {
6060
guard let ptr = $0.baseAddress else {

Sources/MachOObjCSection/Model/Protocol/ObjCProtocolRelativeListList.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ public struct ObjCProtocolRelativeListList64: ObjCProtocolRelativeListListProtoc
5252

5353
guard let machO = entry.machO(in: cache) else { return nil }
5454

55-
let data = cache.fileHandle.readData(
55+
let data = try! cache.fileHandle.readData(
5656
offset: numericCast(resolvedOffset),
57-
size: MemoryLayout<List.Header>.size
57+
length: MemoryLayout<List.Header>.size
5858
)
5959
let list: List? = data.withUnsafeBytes {
6060
guard let ptr = $0.baseAddress else {
@@ -127,9 +127,9 @@ public struct ObjCProtocolRelativeListList32: ObjCProtocolRelativeListListProtoc
127127
return nil
128128
}
129129

130-
let data = cache.fileHandle.readData(
131-
offset: resolvedOffset,
132-
size: MemoryLayout<List.Header>.size
130+
let data = try! cache.fileHandle.readData(
131+
offset: numericCast(resolvedOffset),
132+
length: MemoryLayout<List.Header>.size
133133
)
134134
let list: List? = data.withUnsafeBytes {
135135
guard let ptr = $0.baseAddress else {

Sources/MachOObjCSection/Protocol/Category/ObjCCategoryProtocol.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -451,9 +451,9 @@ extension ObjCCategoryProtocol {
451451
resolvedOffset = _offset
452452
}
453453

454-
let data = machO.fileHandle.readData(
455-
offset: resolvedOffset,
456-
size: MemoryLayout<ObjCMethodList.Header>.size
454+
let data = try! machO.fileHandle.readData(
455+
offset: numericCast(resolvedOffset),
456+
length: MemoryLayout<ObjCMethodList.Header>.size
457457
)
458458
let list: ObjCMethodList? = data.withUnsafeBytes {
459459
guard let ptr = $0.baseAddress else { return nil }
@@ -496,9 +496,9 @@ extension ObjCCategoryProtocol {
496496
resolvedOffset = _offset
497497
}
498498

499-
let data = machO.fileHandle.readData(
500-
offset: resolvedOffset,
501-
size: MemoryLayout<ObjCPropertyList.Header>.size
499+
let data = try! machO.fileHandle.readData(
500+
offset: numericCast(resolvedOffset),
501+
length: MemoryLayout<ObjCPropertyList.Header>.size
502502
)
503503
let list: ObjCPropertyList? = data.withUnsafeBytes {
504504
guard let ptr = $0.baseAddress else {
@@ -544,9 +544,9 @@ extension ObjCCategoryProtocol {
544544
resolvedOffset = _offset
545545
}
546546

547-
let data = machO.fileHandle.readData(
548-
offset: resolvedOffset,
549-
size: MemoryLayout<ObjCProtocolList.Header>.size
547+
let data = try! machO.fileHandle.readData(
548+
offset: numericCast(resolvedOffset),
549+
length: MemoryLayout<ObjCProtocolList.Header>.size
550550
)
551551

552552
let list: ObjCProtocolList? = data.withUnsafeBytes {

Sources/MachOObjCSection/Protocol/Class/RO/ObjCClassRODataProtocol.swift

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,9 @@ extension ObjCClassRODataProtocol {
120120
resolvedOffset = _offset
121121
}
122122

123-
let data = machO.fileHandle.readData(
124-
offset: resolvedOffset,
125-
size: MemoryLayout<ObjCMethodList.Header>.size
123+
let data = try! machO.fileHandle.readData(
124+
offset: numericCast(resolvedOffset),
125+
length: MemoryLayout<ObjCMethodList.Header>.size
126126
)
127127
let list: ObjCMethodList? = data.withUnsafeBytes {
128128
guard let ptr = $0.baseAddress else { return nil }
@@ -161,9 +161,9 @@ extension ObjCClassRODataProtocol {
161161
resolvedOffset = _offset
162162
}
163163

164-
let data = machO.fileHandle.readData(
165-
offset: resolvedOffset,
166-
size: MemoryLayout<ObjCPropertyList.Header>.size
164+
let data = try! machO.fileHandle.readData(
165+
offset: numericCast(resolvedOffset),
166+
length: MemoryLayout<ObjCPropertyList.Header>.size
167167
)
168168
let list: ObjCPropertyList? = data.withUnsafeBytes {
169169
guard let ptr = $0.baseAddress else {
@@ -204,9 +204,9 @@ extension ObjCClassRODataProtocol {
204204
resolvedOffset = _offset
205205
}
206206

207-
let data = machO.fileHandle.readData(
208-
offset: resolvedOffset,
209-
size: MemoryLayout<ObjCIvarList.Header>.size
207+
let data = try! machO.fileHandle.readData(
208+
offset: numericCast(resolvedOffset),
209+
length: MemoryLayout<ObjCIvarList.Header>.size
210210
)
211211
let list: ObjCIvarList? = data.withUnsafeBytes {
212212
guard let ptr = $0.baseAddress else {
@@ -249,9 +249,9 @@ extension ObjCClassRODataProtocol {
249249
resolvedOffset = _offset
250250
}
251251

252-
let data = machO.fileHandle.readData(
253-
offset: resolvedOffset,
254-
size: MemoryLayout<ObjCProtocolList.Header>.size
252+
let data = try! machO.fileHandle.readData(
253+
offset: numericCast(resolvedOffset),
254+
length: MemoryLayout<ObjCProtocolList.Header>.size
255255
)
256256

257257
let list: ObjCProtocolList? = data.withUnsafeBytes {
@@ -399,9 +399,9 @@ extension ObjCClassRODataProtocol {
399399
fileHandle = _cache.fileHandle
400400
}
401401

402-
let data = fileHandle.readData(
403-
offset: resolvedOffset,
404-
size: MemoryLayout<ObjCMethodRelativeListList.Header>.size
402+
let data = try! fileHandle.readData(
403+
offset: numericCast(resolvedOffset),
404+
length: MemoryLayout<ObjCMethodRelativeListList.Header>.size
405405
)
406406

407407
let lists: ObjCMethodRelativeListList? = data.withUnsafeBytes {
@@ -442,9 +442,9 @@ extension ObjCClassRODataProtocol {
442442
fileHandle = _cache.fileHandle
443443
}
444444

445-
let data = fileHandle.readData(
446-
offset: resolvedOffset,
447-
size: MemoryLayout<ObjCPropertyRelativeListList.Header>.size
445+
let data = try! fileHandle.readData(
446+
offset: numericCast(resolvedOffset),
447+
length: MemoryLayout<ObjCPropertyRelativeListList.Header>.size
448448
)
449449

450450
let lists: ObjCPropertyRelativeListList? = data.withUnsafeBytes {
@@ -485,9 +485,9 @@ extension ObjCClassRODataProtocol {
485485
fileHandle = _cache.fileHandle
486486
}
487487

488-
let data = fileHandle.readData(
489-
offset: resolvedOffset,
490-
size: MemoryLayout<ObjCProtocolRelativeListList.Header>.size
488+
let data = try! fileHandle.readData(
489+
offset: numericCast(resolvedOffset),
490+
length: MemoryLayout<ObjCProtocolRelativeListList.Header>.size
491491
)
492492

493493
let lists: ObjCProtocolRelativeListList? = data.withUnsafeBytes {

0 commit comments

Comments
 (0)