blob: 2ebb4fb186b93ea3bb20f02d921ea4b3f714b8c3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
//
// SwiftData.swift
// MullvadVPN
//
// Created by Andrew Bulhak on 2026-02-12.
// Copyright © 2026 Mullvad VPN AB. All rights reserved.
//
// Code for passing `Data` objects to C FFI code
@_cdecl("swift_data_get_ptr")
func getSwiftDataPtr(_ pointer: UnsafePointer<SwiftData>?) -> UnsafeRawPointer? {
guard
let contentPtr = pointer?.pointee.ptr as? UnsafePointer<NSData>
else { return nil }
return contentPtr.pointee.bytes
}
@_cdecl("swift_data_get_len")
func getSwiftDataLength(_ pointer: UnsafePointer<SwiftData>?) -> Int {
guard
let contentPtr = pointer?.pointee.ptr as? UnsafePointer<NSData>
else { return 0 }
return contentPtr.pointee.count
}
@_cdecl("swift_data_drop")
func dropSwiftData(_ pointer: UnsafeMutablePointer<SwiftData>?) {
// release the NSData
if let ptr = pointer?.pointee.ptr {
_ = Unmanaged<NSData>.fromOpaque(ptr).takeRetainedValue()
}
pointer?.pointee.ptr = nil
}
extension SwiftData {
init(data: NSData) {
self.init(ptr: Unmanaged.passRetained(data).toOpaque())
}
}
|