Compare commits
17
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68d928192b | ||
|
|
028e76eb3f | ||
|
|
cb0c965294 | ||
|
|
d7ce621cb2 | ||
|
|
a1ca4f6eb5 | ||
|
|
437f0dc46d | ||
|
|
547eabb4ae | ||
|
|
bb16d3ebc8 | ||
|
|
1b6170cbc9 | ||
|
|
4c37a4b7a7 | ||
|
|
226166bdaf | ||
|
|
80fa72cabc | ||
|
|
d976d159d0 | ||
|
|
84ca7fcf40 | ||
|
|
f120a6aab0 | ||
|
|
0d8108d8da | ||
|
|
e072ebee58 |
@@ -112,6 +112,6 @@ class Keychain {
|
|||||||
static func verifyReference(called ref: Data) -> Bool {
|
static func verifyReference(called ref: Data) -> Bool {
|
||||||
return SecItemCopyMatching([kSecClass as String: kSecClassGenericPassword,
|
return SecItemCopyMatching([kSecClass as String: kSecClassGenericPassword,
|
||||||
kSecValuePersistentRef as String: ref] as CFDictionary,
|
kSecValuePersistentRef as String: ref] as CFDictionary,
|
||||||
nil) == errSecSuccess
|
nil) != errSecItemNotFound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -437,3 +437,7 @@
|
|||||||
"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
|
"macAppStoreUpdatingAlertMessage" = "App Store would like to update WireGuard";
|
||||||
"macAppStoreUpdatingAlertInfoWithOnDemand (%@)" = "Please disable on-demand for tunnel ‘%@’, deactivate it, and then continue updating in App Store.";
|
"macAppStoreUpdatingAlertInfoWithOnDemand (%@)" = "Please disable on-demand for tunnel ‘%@’, deactivate it, and then continue updating in App Store.";
|
||||||
"macAppStoreUpdatingAlertInfoWithoutOnDemand (%@)" = "Please deactivate tunnel ‘%@’ and then continue updating in App Store.";
|
"macAppStoreUpdatingAlertInfoWithoutOnDemand (%@)" = "Please deactivate tunnel ‘%@’ and then continue updating in App Store.";
|
||||||
|
|
||||||
|
// Donation
|
||||||
|
|
||||||
|
"donateLink" = "♥ Donate to the WireGuard Project";
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
VERSION_NAME = 0.0.20190610
|
VERSION_NAME = 0.0.20191105
|
||||||
VERSION_ID = 13
|
VERSION_ID = 16
|
||||||
|
|||||||
@@ -20,17 +20,23 @@ protocol TunnelsManagerActivationDelegate: class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TunnelsManager {
|
class TunnelsManager {
|
||||||
private var tunnels: [TunnelContainer]
|
fileprivate var tunnels: [TunnelContainer]
|
||||||
weak var tunnelsListDelegate: TunnelsManagerListDelegate?
|
weak var tunnelsListDelegate: TunnelsManagerListDelegate?
|
||||||
weak var activationDelegate: TunnelsManagerActivationDelegate?
|
weak var activationDelegate: TunnelsManagerActivationDelegate?
|
||||||
private var statusObservationToken: AnyObject?
|
private var statusObservationToken: AnyObject?
|
||||||
private var waiteeObservationToken: AnyObject?
|
private var waiteeObservationToken: AnyObject?
|
||||||
private var configurationsObservationToken: AnyObject?
|
private var configurationsObservationToken: AnyObject?
|
||||||
|
private var catalinaWorkaround: Any?
|
||||||
|
|
||||||
init(tunnelProviders: [NETunnelProviderManager]) {
|
init(tunnelProviders: [NETunnelProviderManager]) {
|
||||||
tunnels = tunnelProviders.map { TunnelContainer(tunnel: $0) }.sorted { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
|
tunnels = tunnelProviders.map { TunnelContainer(tunnel: $0) }.sorted { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
|
||||||
startObservingTunnelStatuses()
|
startObservingTunnelStatuses()
|
||||||
startObservingTunnelConfigurations()
|
startObservingTunnelConfigurations()
|
||||||
|
#if os(macOS)
|
||||||
|
if #available(macOS 10.15, *) {
|
||||||
|
self.catalinaWorkaround = CatalinaWorkaround(tunnelsManager: self)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static func create(completionHandler: @escaping (Result<TunnelsManager, TunnelsManagerError>) -> Void) {
|
static func create(completionHandler: @escaping (Result<TunnelsManager, TunnelsManagerError>) -> Void) {
|
||||||
@@ -70,11 +76,20 @@ class TunnelsManager {
|
|||||||
if let ref = passwordRef {
|
if let ref = passwordRef {
|
||||||
refs.insert(ref)
|
refs.insert(ref)
|
||||||
} else {
|
} else {
|
||||||
|
wg_log(.info, message: "Removing orphaned tunnel with non-verifying keychain entry: \(tunnelManager.localizedDescription ?? "<unknown>")")
|
||||||
tunnelManager.removeFromPreferences { _ in }
|
tunnelManager.removeFromPreferences { _ in }
|
||||||
tunnelManagers.remove(at: index)
|
tunnelManagers.remove(at: index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if os(macOS)
|
||||||
|
if #available(macOS 10.15, *) {
|
||||||
|
// Don't delete orphaned keychain refs. We need them to restore tunnels as a workaround.
|
||||||
|
} else {
|
||||||
|
Keychain.deleteReferences(except: refs)
|
||||||
|
}
|
||||||
|
#else
|
||||||
Keychain.deleteReferences(except: refs)
|
Keychain.deleteReferences(except: refs)
|
||||||
|
#endif
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
RecentTunnelsTracker.cleanupTunnels(except: tunnelNames)
|
RecentTunnelsTracker.cleanupTunnels(except: tunnelNames)
|
||||||
#endif
|
#endif
|
||||||
@@ -621,7 +636,7 @@ class TunnelContainer: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension NETunnelProviderManager {
|
extension NETunnelProviderManager {
|
||||||
private static var cachedConfigKey: UInt8 = 0
|
fileprivate static var cachedConfigKey: UInt8 = 0
|
||||||
|
|
||||||
var tunnelConfiguration: TunnelConfiguration? {
|
var tunnelConfiguration: TunnelConfiguration? {
|
||||||
if let cached = objc_getAssociatedObject(self, &NETunnelProviderManager.cachedConfigKey) as? TunnelConfiguration {
|
if let cached = objc_getAssociatedObject(self, &NETunnelProviderManager.cachedConfigKey) as? TunnelConfiguration {
|
||||||
@@ -644,3 +659,148 @@ extension NETunnelProviderManager {
|
|||||||
return localizedDescription == tunnel.name && tunnelConfiguration == tunnel.tunnelConfiguration
|
return localizedDescription == tunnel.name && tunnelConfiguration == tunnel.tunnelConfiguration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
@available(macOS 10.15, *)
|
||||||
|
class CatalinaWorkaround {
|
||||||
|
|
||||||
|
// In macOS Catalina, for some users, the tunnels get deleted arbitrarily
|
||||||
|
// by the OS. It's not clear what triggers that.
|
||||||
|
|
||||||
|
// As a workaround, in macOS Catalina, when we realize that tunnels have been
|
||||||
|
// deleted outside the app, we reinstate those tunnels using the information
|
||||||
|
// in the keychain.
|
||||||
|
|
||||||
|
unowned let tunnelsManager: TunnelsManager
|
||||||
|
private var configChangeSubscriber: Any?
|
||||||
|
|
||||||
|
struct ReinstationData {
|
||||||
|
let tunnelConfiguration: TunnelConfiguration
|
||||||
|
let keychainPasswordRef: Data
|
||||||
|
}
|
||||||
|
|
||||||
|
init(tunnelsManager: TunnelsManager) {
|
||||||
|
self.tunnelsManager = tunnelsManager
|
||||||
|
|
||||||
|
// Attempt reinstation when there's a change in tunnel configurations,
|
||||||
|
// which indicates that tunnels may have been deleted outside the app.
|
||||||
|
// We use debounce to wait for all change notifications to arrive
|
||||||
|
// before attempting to reinstate, so that we don't have saveToPreferences
|
||||||
|
// being called while another saveToPreferences is in progress.
|
||||||
|
self.configChangeSubscriber = NotificationCenter.default
|
||||||
|
.publisher(for: .NEVPNConfigurationChange, object: nil)
|
||||||
|
.debounce(for: .seconds(1), scheduler: RunLoop.main)
|
||||||
|
.subscribe(on: RunLoop.main)
|
||||||
|
.sink { [weak self] _ in
|
||||||
|
self?.reinstateTunnelsDeletedOutsideApp()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt reinstation on app launch
|
||||||
|
reinstateTunnelsDeletedOutsideApp()
|
||||||
|
}
|
||||||
|
|
||||||
|
func reinstateTunnelsDeletedOutsideApp() {
|
||||||
|
let rd = reinstationDataForTunnelsDeletedOutsideApp()
|
||||||
|
reinstateTunnels(ArraySlice(rd), completionHandler: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func reinstateTunnels(_ rdArray: ArraySlice<ReinstationData>, completionHandler: (() -> Void)?) {
|
||||||
|
guard let head = rdArray.first else {
|
||||||
|
completionHandler?()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let tail = rdArray.dropFirst()
|
||||||
|
self.tunnelsManager.reinstateTunnel(reinstationData: head) { _ in
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.reinstateTunnels(tail, completionHandler: completionHandler)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func reinstationDataForTunnelsDeletedOutsideApp() -> [ReinstationData] {
|
||||||
|
let knownRefs: [Data] = self.tunnelsManager.tunnels
|
||||||
|
.compactMap { $0.tunnelProvider.protocolConfiguration as? NETunnelProviderProtocol }
|
||||||
|
.compactMap { $0.passwordReference }
|
||||||
|
let knownRefsSet: Set<Data> = Set(knownRefs)
|
||||||
|
var result: CFTypeRef?
|
||||||
|
let ret = SecItemCopyMatching([kSecClass as String: kSecClassGenericPassword,
|
||||||
|
kSecAttrService as String: Bundle.main.bundleIdentifier as Any,
|
||||||
|
kSecMatchLimit as String: kSecMatchLimitAll,
|
||||||
|
kSecReturnAttributes as String: true,
|
||||||
|
kSecReturnPersistentRef as String: true] as CFDictionary,
|
||||||
|
&result)
|
||||||
|
guard ret == errSecSuccess, let resultDicts = result as? [[String: Any]] else { return [] }
|
||||||
|
let labelPrefix = "WireGuard Tunnel: "
|
||||||
|
var reinstationData: [ReinstationData] = []
|
||||||
|
for resultDict in resultDicts {
|
||||||
|
guard let ref = resultDict[kSecValuePersistentRef as String] as? Data else { continue }
|
||||||
|
guard let label = resultDict[kSecAttrLabel as String] as? String else { continue }
|
||||||
|
guard label.hasPrefix(labelPrefix) else { continue }
|
||||||
|
if !knownRefsSet.contains(ref) {
|
||||||
|
let tunnelName = String(label.dropFirst(labelPrefix.count))
|
||||||
|
if let configStr = Keychain.openReference(called: ref),
|
||||||
|
let config = try? TunnelConfiguration(fromWgQuickConfig: configStr, called: tunnelName) {
|
||||||
|
reinstationData.append(ReinstationData(tunnelConfiguration: config, keychainPasswordRef: ref))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return reinstationData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
@available(macOS 10.15, *)
|
||||||
|
extension TunnelsManager {
|
||||||
|
fileprivate func reinstateTunnel(reinstationData: CatalinaWorkaround.ReinstationData, completionHandler: @escaping (Bool) -> Void) {
|
||||||
|
let tunnelName = reinstationData.tunnelConfiguration.name ?? ""
|
||||||
|
if tunnelName.isEmpty {
|
||||||
|
completionHandler(false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if tunnels.contains(where: { $0.name == tunnelName }) {
|
||||||
|
completionHandler(false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let tunnelProviderProtocol = NETunnelProviderProtocol()
|
||||||
|
guard let appId = Bundle.main.bundleIdentifier else { fatalError() }
|
||||||
|
tunnelProviderProtocol.providerBundleIdentifier = "\(appId).network-extension"
|
||||||
|
tunnelProviderProtocol.passwordReference = reinstationData.keychainPasswordRef
|
||||||
|
tunnelProviderProtocol.providerConfiguration = ["UID": getuid()]
|
||||||
|
tunnelProviderProtocol.serverAddress = {
|
||||||
|
let endpoints = reinstationData.tunnelConfiguration.peers.compactMap { $0.endpoint }
|
||||||
|
if endpoints.count == 1 {
|
||||||
|
return endpoints[0].stringRepresentation
|
||||||
|
} else if endpoints.isEmpty {
|
||||||
|
return "Unspecified"
|
||||||
|
} else {
|
||||||
|
return "Multiple endpoints"
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
let tunnelProvider = NETunnelProviderManager()
|
||||||
|
tunnelProvider.localizedDescription = tunnelName
|
||||||
|
tunnelProvider.protocolConfiguration = tunnelProviderProtocol
|
||||||
|
objc_setAssociatedObject(tunnelProvider, &NETunnelProviderManager.cachedConfigKey, reinstationData.tunnelConfiguration, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||||
|
tunnelProvider.isEnabled = true
|
||||||
|
|
||||||
|
tunnelProvider.saveToPreferences { [weak self] error in
|
||||||
|
guard error == nil else {
|
||||||
|
wg_log(.error, message: "Reinstate: Saving configuration failed: \(error!)")
|
||||||
|
completionHandler(false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let self = self else { return }
|
||||||
|
|
||||||
|
let tunnel = TunnelContainer(tunnel: tunnelProvider)
|
||||||
|
self.tunnels.append(tunnel)
|
||||||
|
self.tunnels.sort { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
|
||||||
|
self.tunnelsListDelegate?.tunnelAdded(at: self.tunnels.firstIndex(of: tunnel)!)
|
||||||
|
completionHandler(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -21,7 +21,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let window = UIWindow(frame: UIScreen.main.bounds)
|
let window = UIWindow(frame: UIScreen.main.bounds)
|
||||||
window.backgroundColor = .white
|
if #available(iOS 13.0, *) {
|
||||||
|
window.backgroundColor = .systemBackground
|
||||||
|
} else {
|
||||||
|
window.backgroundColor = .white
|
||||||
|
}
|
||||||
self.window = window
|
self.window = window
|
||||||
|
|
||||||
let mainVC = MainViewController()
|
let mainVC = MainViewController()
|
||||||
|
|||||||
@@ -64,6 +64,8 @@
|
|||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>$(PRODUCT_NAME)</string>
|
<string>$(PRODUCT_NAME)</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ class ButtonCell: UITableViewCell {
|
|||||||
set(value) { button.setTitle(value, for: .normal) }
|
set(value) { button.setTitle(value, for: .normal) }
|
||||||
}
|
}
|
||||||
var hasDestructiveAction: Bool {
|
var hasDestructiveAction: Bool {
|
||||||
get { return button.tintColor == .red }
|
get { return button.tintColor == .systemRed }
|
||||||
set(value) { button.tintColor = value ? .red : buttonStandardTintColor }
|
set(value) { button.tintColor = value ? .systemRed : buttonStandardTintColor }
|
||||||
}
|
}
|
||||||
var onTapped: (() -> Void)?
|
var onTapped: (() -> Void)?
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,11 @@ class KeyValueCell: UITableViewCell {
|
|||||||
let keyLabel = UILabel()
|
let keyLabel = UILabel()
|
||||||
keyLabel.font = UIFont.preferredFont(forTextStyle: .body)
|
keyLabel.font = UIFont.preferredFont(forTextStyle: .body)
|
||||||
keyLabel.adjustsFontForContentSizeCategory = true
|
keyLabel.adjustsFontForContentSizeCategory = true
|
||||||
keyLabel.textColor = .black
|
if #available(iOS 13.0, *) {
|
||||||
|
keyLabel.textColor = .label
|
||||||
|
} else {
|
||||||
|
keyLabel.textColor = .black
|
||||||
|
}
|
||||||
keyLabel.textAlignment = .left
|
keyLabel.textAlignment = .left
|
||||||
return keyLabel
|
return keyLabel
|
||||||
}()
|
}()
|
||||||
@@ -31,7 +35,11 @@ class KeyValueCell: UITableViewCell {
|
|||||||
valueTextField.autocapitalizationType = .none
|
valueTextField.autocapitalizationType = .none
|
||||||
valueTextField.autocorrectionType = .no
|
valueTextField.autocorrectionType = .no
|
||||||
valueTextField.spellCheckingType = .no
|
valueTextField.spellCheckingType = .no
|
||||||
valueTextField.textColor = .gray
|
if #available(iOS 13.0, *) {
|
||||||
|
valueTextField.textColor = .secondaryLabel
|
||||||
|
} else {
|
||||||
|
valueTextField.textColor = .gray
|
||||||
|
}
|
||||||
return valueTextField
|
return valueTextField
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@@ -56,10 +64,18 @@ class KeyValueCell: UITableViewCell {
|
|||||||
|
|
||||||
var isValueValid = true {
|
var isValueValid = true {
|
||||||
didSet {
|
didSet {
|
||||||
if isValueValid {
|
if #available(iOS 13.0, *) {
|
||||||
keyLabel.textColor = .black
|
if isValueValid {
|
||||||
|
keyLabel.textColor = .label
|
||||||
|
} else {
|
||||||
|
keyLabel.textColor = .systemRed
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
keyLabel.textColor = .red
|
if isValueValid {
|
||||||
|
keyLabel.textColor = .black
|
||||||
|
} else {
|
||||||
|
keyLabel.textColor = .red
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,11 @@ class SwitchCell: UITableViewCell {
|
|||||||
get { return switchView.isEnabled }
|
get { return switchView.isEnabled }
|
||||||
set(value) {
|
set(value) {
|
||||||
switchView.isEnabled = value
|
switchView.isEnabled = value
|
||||||
textLabel?.textColor = value ? .black : .gray
|
if #available(iOS 13.0, *) {
|
||||||
|
textLabel?.textColor = value ? .label : .secondaryLabel
|
||||||
|
} else {
|
||||||
|
textLabel?.textColor = value ? .black : .gray
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,11 @@ class TextCell: UITableViewCell {
|
|||||||
override func prepareForReuse() {
|
override func prepareForReuse() {
|
||||||
super.prepareForReuse()
|
super.prepareForReuse()
|
||||||
message = ""
|
message = ""
|
||||||
setTextColor(.black)
|
if #available(iOS 13.0, *) {
|
||||||
|
setTextColor(.label)
|
||||||
|
} else {
|
||||||
|
setTextColor(.black)
|
||||||
|
}
|
||||||
setTextAlignment(.left)
|
setTextAlignment(.left)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,11 @@ class TunnelEditEditableKeyValueCell: TunnelEditKeyValueCell {
|
|||||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||||
|
|
||||||
copyableGesture = false
|
copyableGesture = false
|
||||||
valueTextField.textColor = .black
|
if #available(iOS 13.0, *) {
|
||||||
|
valueTextField.textColor = .label
|
||||||
|
} else {
|
||||||
|
valueTextField.textColor = .black
|
||||||
|
}
|
||||||
valueTextField.isEnabled = true
|
valueTextField.isEnabled = true
|
||||||
valueLabelScrollView.isScrollEnabled = false
|
valueLabelScrollView.isScrollEnabled = false
|
||||||
valueTextField.widthAnchor.constraint(equalTo: valueLabelScrollView.widthAnchor).isActive = true
|
valueTextField.widthAnchor.constraint(equalTo: valueLabelScrollView.widthAnchor).isActive = true
|
||||||
|
|||||||
@@ -29,9 +29,15 @@ class TunnelListCell: UITableViewCell {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
let busyIndicator: UIActivityIndicatorView = {
|
let busyIndicator: UIActivityIndicatorView = {
|
||||||
let busyIndicator = UIActivityIndicatorView(style: .gray)
|
if #available(iOS 13.0, *) {
|
||||||
busyIndicator.hidesWhenStopped = true
|
let busyIndicator = UIActivityIndicatorView(style: .medium)
|
||||||
return busyIndicator
|
busyIndicator.hidesWhenStopped = true
|
||||||
|
return busyIndicator
|
||||||
|
} else {
|
||||||
|
let busyIndicator = UIActivityIndicatorView(style: .gray)
|
||||||
|
busyIndicator.hidesWhenStopped = true
|
||||||
|
return busyIndicator
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
let statusSwitch = UISwitch()
|
let statusSwitch = UISwitch()
|
||||||
|
|||||||
@@ -15,9 +15,15 @@ class LogViewController: UIViewController {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
let busyIndicator: UIActivityIndicatorView = {
|
let busyIndicator: UIActivityIndicatorView = {
|
||||||
let busyIndicator = UIActivityIndicatorView(style: .gray)
|
if #available(iOS 13.0, *) {
|
||||||
busyIndicator.hidesWhenStopped = true
|
let busyIndicator = UIActivityIndicatorView(style: .medium)
|
||||||
return busyIndicator
|
busyIndicator.hidesWhenStopped = true
|
||||||
|
return busyIndicator
|
||||||
|
} else {
|
||||||
|
let busyIndicator = UIActivityIndicatorView(style: .gray)
|
||||||
|
busyIndicator.hidesWhenStopped = true
|
||||||
|
return busyIndicator
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
let paragraphStyle: NSParagraphStyle = {
|
let paragraphStyle: NSParagraphStyle = {
|
||||||
@@ -35,7 +41,11 @@ class LogViewController: UIViewController {
|
|||||||
|
|
||||||
override func loadView() {
|
override func loadView() {
|
||||||
view = UIView()
|
view = UIView()
|
||||||
view.backgroundColor = .white
|
if #available(iOS 13.0, *) {
|
||||||
|
view.backgroundColor = .systemBackground
|
||||||
|
} else {
|
||||||
|
view.backgroundColor = .white
|
||||||
|
}
|
||||||
|
|
||||||
view.addSubview(textView)
|
view.addSubview(textView)
|
||||||
textView.translatesAutoresizingMaskIntoConstraints = false
|
textView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
@@ -81,12 +91,18 @@ class LogViewController: UIViewController {
|
|||||||
let richText = NSMutableAttributedString()
|
let richText = NSMutableAttributedString()
|
||||||
let bodyFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body)
|
let bodyFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body)
|
||||||
let captionFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.caption1)
|
let captionFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.caption1)
|
||||||
let lightGrayColor = UIColor(white: 0.88, alpha: 1.0)
|
|
||||||
|
|
||||||
for logEntry in fetchedLogEntries {
|
for logEntry in fetchedLogEntries {
|
||||||
let bgColor = self.isNextLineHighlighted ? lightGrayColor : UIColor.white
|
var bgColor: UIColor
|
||||||
let timestampText = NSAttributedString(string: logEntry.timestamp + "\n", attributes: [.font: captionFont, .backgroundColor: bgColor, .paragraphStyle: self.paragraphStyle])
|
var fgColor: UIColor
|
||||||
let messageText = NSAttributedString(string: logEntry.message + "\n", attributes: [.font: bodyFont, .backgroundColor: bgColor, .paragraphStyle: self.paragraphStyle])
|
if #available(iOS 13.0, *) {
|
||||||
|
bgColor = self.isNextLineHighlighted ? .systemGray3 : .systemBackground
|
||||||
|
fgColor = .label
|
||||||
|
} else {
|
||||||
|
bgColor = self.isNextLineHighlighted ? UIColor(white: 0.88, alpha: 1.0) : UIColor.white
|
||||||
|
fgColor = .black
|
||||||
|
}
|
||||||
|
let timestampText = NSAttributedString(string: logEntry.timestamp + "\n", attributes: [.font: captionFont, .backgroundColor: bgColor, .foregroundColor: fgColor, .paragraphStyle: self.paragraphStyle])
|
||||||
|
let messageText = NSAttributedString(string: logEntry.message + "\n", attributes: [.font: bodyFont, .backgroundColor: bgColor, .foregroundColor: fgColor, .paragraphStyle: self.paragraphStyle])
|
||||||
richText.append(timestampText)
|
richText.append(timestampText)
|
||||||
richText.append(messageText)
|
richText.append(messageText)
|
||||||
self.isNextLineHighlighted.toggle()
|
self.isNextLineHighlighted.toggle()
|
||||||
|
|||||||
@@ -11,7 +11,11 @@ class MainViewController: UISplitViewController {
|
|||||||
|
|
||||||
init() {
|
init() {
|
||||||
let detailVC = UIViewController()
|
let detailVC = UIViewController()
|
||||||
detailVC.view.backgroundColor = .white
|
if #available(iOS 13.0, *) {
|
||||||
|
detailVC.view.backgroundColor = .systemBackground
|
||||||
|
} else {
|
||||||
|
detailVC.view.backgroundColor = .white
|
||||||
|
}
|
||||||
let detailNC = UINavigationController(rootViewController: detailVC)
|
let detailNC = UINavigationController(rootViewController: detailVC)
|
||||||
|
|
||||||
let masterVC = TunnelsListTableViewController()
|
let masterVC = TunnelsListTableViewController()
|
||||||
|
|||||||
@@ -176,7 +176,11 @@ extension SSIDOptionEditTableViewController {
|
|||||||
private func noSSIDsCell(for tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
|
private func noSSIDsCell(for tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
|
||||||
let cell: TextCell = tableView.dequeueReusableCell(for: indexPath)
|
let cell: TextCell = tableView.dequeueReusableCell(for: indexPath)
|
||||||
cell.message = tr("tunnelOnDemandNoSSIDs")
|
cell.message = tr("tunnelOnDemandNoSSIDs")
|
||||||
cell.setTextColor(.gray)
|
if #available(iOS 13.0, *) {
|
||||||
|
cell.setTextColor(.secondaryLabel)
|
||||||
|
} else {
|
||||||
|
cell.setTextColor(.gray)
|
||||||
|
}
|
||||||
cell.setTextAlignment(.center)
|
cell.setTextAlignment(.center)
|
||||||
return cell
|
return cell
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class SettingsTableViewController: UITableViewController {
|
|||||||
case goBackendVersion
|
case goBackendVersion
|
||||||
case exportZipArchive
|
case exportZipArchive
|
||||||
case viewLog
|
case viewLog
|
||||||
|
case donateLink
|
||||||
|
|
||||||
var localizedUIString: String {
|
var localizedUIString: String {
|
||||||
switch self {
|
switch self {
|
||||||
@@ -18,12 +19,13 @@ class SettingsTableViewController: UITableViewController {
|
|||||||
case .goBackendVersion: return tr("settingsVersionKeyWireGuardGoBackend")
|
case .goBackendVersion: return tr("settingsVersionKeyWireGuardGoBackend")
|
||||||
case .exportZipArchive: return tr("settingsExportZipButtonTitle")
|
case .exportZipArchive: return tr("settingsExportZipButtonTitle")
|
||||||
case .viewLog: return tr("settingsViewLogButtonTitle")
|
case .viewLog: return tr("settingsViewLogButtonTitle")
|
||||||
|
case .donateLink: return tr("donateLink")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let settingsFieldsBySection: [[SettingsFields]] = [
|
let settingsFieldsBySection: [[SettingsFields]] = [
|
||||||
[.iosAppVersion, .goBackendVersion],
|
[.iosAppVersion, .goBackendVersion, .donateLink],
|
||||||
[.exportZipArchive],
|
[.exportZipArchive],
|
||||||
[.viewLog]
|
[.viewLog]
|
||||||
]
|
]
|
||||||
@@ -160,14 +162,23 @@ extension SettingsTableViewController {
|
|||||||
self?.exportConfigurationsAsZipFile(sourceView: cell.button)
|
self?.exportConfigurationsAsZipFile(sourceView: cell.button)
|
||||||
}
|
}
|
||||||
return cell
|
return cell
|
||||||
} else {
|
} else if field == .viewLog {
|
||||||
assert(field == .viewLog)
|
|
||||||
let cell: ButtonCell = tableView.dequeueReusableCell(for: indexPath)
|
let cell: ButtonCell = tableView.dequeueReusableCell(for: indexPath)
|
||||||
cell.buttonText = field.localizedUIString
|
cell.buttonText = field.localizedUIString
|
||||||
cell.onTapped = { [weak self] in
|
cell.onTapped = { [weak self] in
|
||||||
self?.presentLogView()
|
self?.presentLogView()
|
||||||
}
|
}
|
||||||
return cell
|
return cell
|
||||||
|
} else if field == .donateLink {
|
||||||
|
let cell: ButtonCell = tableView.dequeueReusableCell(for: indexPath)
|
||||||
|
cell.buttonText = field.localizedUIString
|
||||||
|
cell.onTapped = {
|
||||||
|
if let url = URL(string: "https://www.wireguard.com/donations/"), UIApplication.shared.canOpenURL(url) {
|
||||||
|
UIApplication.shared.open(url, options: [:])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cell
|
||||||
}
|
}
|
||||||
|
fatalError()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ class TunnelDetailTableViewController: UITableViewController {
|
|||||||
let editVC = TunnelEditTableViewController(tunnelsManager: self.tunnelsManager, tunnel: self.tunnel)
|
let editVC = TunnelEditTableViewController(tunnelsManager: self.tunnelsManager, tunnel: self.tunnel)
|
||||||
editVC.delegate = self
|
editVC.delegate = self
|
||||||
let editNC = UINavigationController(rootViewController: editVC)
|
let editNC = UINavigationController(rootViewController: editVC)
|
||||||
editNC.modalPresentationStyle = .formSheet
|
editNC.modalPresentationStyle = .fullScreen
|
||||||
self.present(editNC, animated: true)
|
self.present(editNC, animated: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,9 +32,15 @@ class TunnelsListTableViewController: UIViewController {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
let busyIndicator: UIActivityIndicatorView = {
|
let busyIndicator: UIActivityIndicatorView = {
|
||||||
let busyIndicator = UIActivityIndicatorView(style: .gray)
|
if #available(iOS 13.0, *) {
|
||||||
busyIndicator.hidesWhenStopped = true
|
let busyIndicator = UIActivityIndicatorView(style: .medium)
|
||||||
return busyIndicator
|
busyIndicator.hidesWhenStopped = true
|
||||||
|
return busyIndicator
|
||||||
|
} else {
|
||||||
|
let busyIndicator = UIActivityIndicatorView(style: .gray)
|
||||||
|
busyIndicator.hidesWhenStopped = true
|
||||||
|
return busyIndicator
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var detailDisplayedTunnel: TunnelContainer?
|
var detailDisplayedTunnel: TunnelContainer?
|
||||||
@@ -46,7 +52,11 @@ class TunnelsListTableViewController: UIViewController {
|
|||||||
|
|
||||||
override func loadView() {
|
override func loadView() {
|
||||||
view = UIView()
|
view = UIView()
|
||||||
view.backgroundColor = .white
|
if #available(iOS 13.0, *) {
|
||||||
|
view.backgroundColor = .systemBackground
|
||||||
|
} else {
|
||||||
|
view.backgroundColor = .white
|
||||||
|
}
|
||||||
|
|
||||||
tableView.dataSource = self
|
tableView.dataSource = self
|
||||||
tableView.delegate = self
|
tableView.delegate = self
|
||||||
@@ -178,7 +188,7 @@ class TunnelsListTableViewController: UIViewController {
|
|||||||
func presentViewControllerForTunnelCreation(tunnelsManager: TunnelsManager) {
|
func presentViewControllerForTunnelCreation(tunnelsManager: TunnelsManager) {
|
||||||
let editVC = TunnelEditTableViewController(tunnelsManager: tunnelsManager)
|
let editVC = TunnelEditTableViewController(tunnelsManager: tunnelsManager)
|
||||||
let editNC = UINavigationController(rootViewController: editVC)
|
let editNC = UINavigationController(rootViewController: editVC)
|
||||||
editNC.modalPresentationStyle = .formSheet
|
editNC.modalPresentationStyle = .fullScreen
|
||||||
present(editNC, animated: true)
|
present(editNC, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,7 +399,11 @@ extension TunnelsListTableViewController: TunnelsManagerListDelegate {
|
|||||||
(splitViewController.viewControllers[0] as? UINavigationController)?.popToRootViewController(animated: false)
|
(splitViewController.viewControllers[0] as? UINavigationController)?.popToRootViewController(animated: false)
|
||||||
} else {
|
} else {
|
||||||
let detailVC = UIViewController()
|
let detailVC = UIViewController()
|
||||||
detailVC.view.backgroundColor = .white
|
if #available(iOS 13.0, *) {
|
||||||
|
detailVC.view.backgroundColor = .systemBackground
|
||||||
|
} else {
|
||||||
|
detailVC.view.backgroundColor = .white
|
||||||
|
}
|
||||||
let detailNC = UINavigationController(rootViewController: detailVC)
|
let detailNC = UINavigationController(rootViewController: detailVC)
|
||||||
splitViewController.showDetailViewController(detailNC, sender: self)
|
splitViewController.showDetailViewController(detailNC, sender: self)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -210,10 +210,13 @@ extension AppDelegate {
|
|||||||
tr(format: "macAppVersion (%@)", appVersion),
|
tr(format: "macAppVersion (%@)", appVersion),
|
||||||
tr(format: "macGoBackendVersion (%@)", WIREGUARD_GO_VERSION)
|
tr(format: "macGoBackendVersion (%@)", WIREGUARD_GO_VERSION)
|
||||||
].joined(separator: "\n")
|
].joined(separator: "\n")
|
||||||
|
let donateString = NSMutableAttributedString(string: tr("donateLink"))
|
||||||
|
donateString.addAttribute(.link, value: "https://www.wireguard.com/donations/", range: NSRange(location: 0, length: donateString.length))
|
||||||
NSApp.activate(ignoringOtherApps: true)
|
NSApp.activate(ignoringOtherApps: true)
|
||||||
NSApp.orderFrontStandardAboutPanel(options: [
|
NSApp.orderFrontStandardAboutPanel(options: [
|
||||||
.applicationVersion: appVersionString,
|
.applicationVersion: appVersionString,
|
||||||
.version: ""
|
.version: "",
|
||||||
|
.credits: donateString
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,60 +14,37 @@ LIPO ?= lipo
|
|||||||
DESTDIR ?= $(CONFIGURATION_BUILD_DIR)
|
DESTDIR ?= $(CONFIGURATION_BUILD_DIR)
|
||||||
BUILDDIR ?= $(CONFIGURATION_TEMP_DIR)/wireguard-go-bridge
|
BUILDDIR ?= $(CONFIGURATION_TEMP_DIR)/wireguard-go-bridge
|
||||||
|
|
||||||
UPSTREAM_FILES := $(filter-out %/main.go %/queueconstants.go,$(wildcard ../wireguard-go/*/*.go) $(wildcard ../wireguard-go/*.go)) ../wireguard-go/go.mod ../wireguard-go/go.sum
|
|
||||||
DOWNSTREAM_FILES := $(wildcard src/*.go) $(wildcard src/*/*.go)
|
|
||||||
CFLAGS_PREFIX := $(if $(DEPLOYMENT_TARGET_CLANG_FLAG_NAME),-$(DEPLOYMENT_TARGET_CLANG_FLAG_NAME)=$($(DEPLOYMENT_TARGET_CLANG_ENV_NAME)),) -Wno-unused-command-line-argument -isysroot $(SDKROOT) -arch
|
CFLAGS_PREFIX := $(if $(DEPLOYMENT_TARGET_CLANG_FLAG_NAME),-$(DEPLOYMENT_TARGET_CLANG_FLAG_NAME)=$($(DEPLOYMENT_TARGET_CLANG_ENV_NAME)),) -Wno-unused-command-line-argument -isysroot $(SDKROOT) -arch
|
||||||
GOARCH_arm64 := arm64
|
GOARCH_arm64 := arm64
|
||||||
GOARCH_armv7 := arm
|
GOARCH_armv7 := arm
|
||||||
GOARCH_x86_64 := amd64
|
GOARCH_x86_64 := amd64
|
||||||
export GOOS := darwin
|
|
||||||
export CGO_ENABLED := 1
|
|
||||||
|
|
||||||
build: $(DESTDIR)/libwg-go.a
|
build: $(DESTDIR)/libwg-go.a
|
||||||
version-header: $(DESTDIR)/wireguard-go-version.h
|
version-header: $(DESTDIR)/wireguard-go-version.h
|
||||||
|
|
||||||
GOBUILDVERSION_NEEDED := go version go1.12.5 darwin/amd64
|
REAL_GOROOT := $(shell go env GOROOT 2>/dev/null)
|
||||||
GOBUILDVERSION_CURRENT := $(shell go version 2>/dev/null)
|
|
||||||
export REAL_GOROOT := $(shell go env GOROOT 2>/dev/null)
|
|
||||||
export GOROOT := $(BUILDDIR)/goroot
|
export GOROOT := $(BUILDDIR)/goroot
|
||||||
export GOPATH := $(BUILDDIR)/gopath
|
|
||||||
export PATH := $(GOPATH)/bin:$(PATH)
|
|
||||||
GOBUILDVERSION_FAKE := $(shell $(GOROOT)/bin/go version 2>/dev/null)
|
|
||||||
ifneq ($(GOBUILDVERSION_NEEDED),$(GOBUILDVERSION_CURRENT))
|
|
||||||
$(error This requires $(GOBUILDVERSION_NEEDED))
|
|
||||||
endif
|
|
||||||
ifneq ($(GOBUILDVERSION_NEEDED),$(GOBUILDVERSION_FAKE))
|
|
||||||
$(shell rm -f $(GOROOT)/.prepared)
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(GOROOT)/.prepared:
|
$(GOROOT)/.prepared:
|
||||||
[ -n "$(REAL_GOROOT)" ]
|
[ -n "$(REAL_GOROOT)" ]
|
||||||
mkdir -p "$(GOROOT)"
|
mkdir -p "$(GOROOT)"
|
||||||
rsync -a --delete --exclude=pkg/obj/go-build "$(REAL_GOROOT)/" "$(GOROOT)/"
|
rsync -a --delete --exclude=pkg/obj/go-build "$(REAL_GOROOT)/" "$(GOROOT)/"
|
||||||
cat goruntime-*.diff | patch -p1 -f -N -r- -d "$(GOROOT)"
|
cat goruntime-*.diff | patch -p1 -f -N -r- -d "$(GOROOT)"
|
||||||
rm -rf "$(GOPATH)/pkg/mod"
|
|
||||||
go get -d -tags ios; chmod -fR +w "$(GOPATH)/pkg/mod"
|
|
||||||
for sys in "$(GOPATH)/pkg/mod/golang.org/x/sys@"*; do cat sys-unix-*.diff | patch -p1 -f -N -r- -d "$$sys"; done
|
|
||||||
touch "$@"
|
touch "$@"
|
||||||
|
|
||||||
$(shell test "$$(cat "$(BUILDDIR)/.gobuildversion" 2>/dev/null)" = "$(GOBUILDVERSION_CURRENT)" || rm -f "$(DESTDIR)/libwg-go.a")
|
|
||||||
|
|
||||||
define libwg-go-a
|
define libwg-go-a
|
||||||
$(BUILDDIR)/libwg-go-$(1).a: $(GOROOT)/.prepared
|
$(BUILDDIR)/libwg-go-$(1).a: export CGO_ENABLED := 1
|
||||||
CGO_CFLAGS="$(CFLAGS_PREFIX) $(ARCH)" \
|
$(BUILDDIR)/libwg-go-$(1).a: export CGO_CFLAGS := $(CFLAGS_PREFIX) $(ARCH)
|
||||||
CGO_LDFLAGS="$(CFLAGS_PREFIX) $(ARCH)" \
|
$(BUILDDIR)/libwg-go-$(1).a: export CGO_LDFLAGS := $(CFLAGS_PREFIX) $(ARCH)
|
||||||
GOARCH="$(GOARCH_$(1))" \
|
$(BUILDDIR)/libwg-go-$(1).a: export GOOS := darwin
|
||||||
go build -tags ios -ldflags=-w -v -o "$(BUILDDIR)/libwg-go-$(1).a" -buildmode c-archive && go version > "$(BUILDDIR)/.gobuildversion"; \
|
$(BUILDDIR)/libwg-go-$(1).a: export GOARCH := $(GOARCH_$(1))
|
||||||
chmod -fR +w "$(GOPATH)/pkg/mod"; \
|
$(BUILDDIR)/libwg-go-$(1).a: $(GOROOT)/.prepared go.mod
|
||||||
ret=$$$$?; \
|
go build -tags ios -ldflags=-w -trimpath -v -o "$(BUILDDIR)/libwg-go-$(1).a" -buildmode c-archive
|
||||||
rm -f "$(BUILDDIR)/libwg-go-$(1).h"; \
|
rm -f "$(BUILDDIR)/libwg-go-$(1).h"
|
||||||
exit $$$$ret
|
|
||||||
endef
|
endef
|
||||||
$(foreach ARCH,$(ARCHS),$(eval $(call libwg-go-a,$(ARCH))))
|
$(foreach ARCH,$(ARCHS),$(eval $(call libwg-go-a,$(ARCH))))
|
||||||
|
|
||||||
$(DESTDIR)/wireguard-go-version.h: go.mod $(GOROOT)/.prepared
|
$(DESTDIR)/wireguard-go-version.h: $(GOROOT)/.prepared go.mod
|
||||||
wggo="$(GOPATH)/pkg/mod/$$(sed -n 's/.*\(golang\.zx2c4\.com\/wireguard\) \(.*\)$$/\1@\2/p' go.mod)"; \
|
go list -m golang.zx2c4.com/wireguard | sed -n 's/.*v\([0-9.]*\).*/#define WIREGUARD_GO_VERSION "\1"/p' > "$@"
|
||||||
sed -n 's/.*WireGuardGoVersion = "\(.*\)"/#define WIREGUARD_GO_VERSION "\1"/p' "$$wggo/device/version.go" > "$@"
|
|
||||||
|
|
||||||
$(DESTDIR)/libwg-go.a: $(foreach ARCH,$(ARCHS),$(BUILDDIR)/libwg-go-$(ARCH).a)
|
$(DESTDIR)/libwg-go.a: $(foreach ARCH,$(ARCHS),$(BUILDDIR)/libwg-go-$(ARCH).a)
|
||||||
@mkdir -vp "$(DESTDIR)"
|
@mkdir -vp "$(DESTDIR)"
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
module golang.zx2c4.com/wireguard/ios
|
module golang.zx2c4.com/wireguard/ios
|
||||||
|
|
||||||
go 1.12
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5
|
golang.org/x/crypto v0.0.0-20191105034135-c7e5f84aec59 // indirect
|
||||||
golang.zx2c4.com/wireguard v0.0.20190518-0.20190530131616-d9f995209c3c
|
golang.org/x/net v0.0.0-20191105084925-a882066a44e0 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20191104094858-e8c54fb511f6
|
||||||
|
golang.zx2c4.com/wireguard v0.0.20191013-0.20191030132932-4cdf805b29b1
|
||||||
)
|
)
|
||||||
|
|||||||
+17
-18
@@ -1,23 +1,22 @@
|
|||||||
github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576 h1:aUX/1G2gFSs4AsJJg2cL3HuoRhCSCz733FE5GUSuaT4=
|
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc h1:c0o/qxkaO2LF5t6fQrT4b5hzyggAkLLlCUjqfRxd8Q4=
|
||||||
golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
|
golang.org/x/crypto v0.0.0-20191105034135-c7e5f84aec59 h1:PyXRxSVbvzDGuqYXjHndV7xDzJ7w2K8KD9Ef8GB7KOE=
|
||||||
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191105034135-c7e5f84aec59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53 h1:kcXqo9vE6fsZY5X5Rd7R1l7fTgnWaDCVmln65REefiE=
|
|
||||||
golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
|
golang.org/x/net v0.0.0-20191003171128-d98b1b443823 h1:Ypyv6BNJh07T1pUSrehkLemqPKXhus2MkfktJ91kRh4=
|
||||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20191105084925-a882066a44e0 h1:QPlSTtPE2k6PZPasQUbzuK3p9JbS+vMXYVto8g/yrsg=
|
||||||
|
golang.org/x/net v0.0.0-20191105084925-a882066a44e0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67 h1:1Fzlr8kkDLQwqMP8GxrhptBLqZG/EDpiATneiZHY998=
|
|
||||||
golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5 h1:f005F/Jl5JLP036x7QIvUVhNTqxvSYwFIiyOh2q12iU=
|
golang.org/x/sys v0.0.0-20191003212358-c178f38b412c h1:6Zx7DRlKXf79yfxuQ/7GqV3w2y7aDsk6bGg0MzF5RVU=
|
||||||
golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191003212358-c178f38b412c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20191104094858-e8c54fb511f6 h1:ZJUmhYTp8GbGC0ViZRc2U+MIYQ8xx9MscsdXnclfIhw=
|
||||||
|
golang.org/x/sys v0.0.0-20191104094858-e8c54fb511f6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.zx2c4.com/wireguard v0.0.0-20190409083948-18fa27047265 h1:ujM5BaP4MD/2MJZ1n7pmw6IIsyyS7SyPl0fDefnx/2o=
|
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||||
golang.zx2c4.com/wireguard v0.0.0-20190409083948-18fa27047265/go.mod h1:u0Cl3X+pyWdXaax3S583DQrnGDuTASO0QdlKFrs8r/8=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.zx2c4.com/wireguard v0.0.20190518-0.20190530131616-d9f995209c3c h1:nUKiRKxUjK8Zghs+JBZZYXo0g51BlXVqkr6mDfm22ow=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.zx2c4.com/wireguard v0.0.20190518-0.20190530131616-d9f995209c3c/go.mod h1:8X7vp4RrsvM83bde6vQ94DsL4ZpjUViVUym8aa8zGhs=
|
golang.zx2c4.com/wireguard v0.0.20191013-0.20191030132932-4cdf805b29b1 h1:KxtBKNgJUQG8vwZzJKkwBGOcqp95xLu6A6KIMde1kl0=
|
||||||
|
golang.zx2c4.com/wireguard v0.0.20191013-0.20191030132932-4cdf805b29b1/go.mod h1:P2HsVp8SKwZEufsnezXZA4GRX/T49/HlU7DGuelXsU4=
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
From 74523c5a12d37fa792e77a252bcc569484c3d41a Mon Sep 17 00:00:00 2001
|
From 04f5695b83cd221e99e9fa6171b57e45177d5ad3 Mon Sep 17 00:00:00 2001
|
||||||
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
|
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
|
||||||
Date: Wed, 27 Feb 2019 05:33:01 +0100
|
Date: Wed, 27 Feb 2019 05:33:01 +0100
|
||||||
Subject: [PATCH] runtime: use libc_mach_continuous_time in nanotime on Darwin
|
Subject: [PATCH] runtime: use libc_mach_continuous_time in nanotime on Darwin
|
||||||
@@ -18,10 +18,10 @@ Fixes #24595
|
|||||||
5 files changed, 5 insertions(+), 5 deletions(-)
|
5 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/src/runtime/sys_darwin.go b/src/runtime/sys_darwin.go
|
diff --git a/src/runtime/sys_darwin.go b/src/runtime/sys_darwin.go
|
||||||
index f34ac88352..416fcb673f 100644
|
index 376f76dbc5..a0677a83f6 100644
|
||||||
--- a/src/runtime/sys_darwin.go
|
--- a/src/runtime/sys_darwin.go
|
||||||
+++ b/src/runtime/sys_darwin.go
|
+++ b/src/runtime/sys_darwin.go
|
||||||
@@ -403,7 +403,7 @@ func closeonexec(fd int32) {
|
@@ -431,7 +431,7 @@ func setNonblock(fd int32) {
|
||||||
//go:cgo_import_dynamic libc_usleep usleep "/usr/lib/libSystem.B.dylib"
|
//go:cgo_import_dynamic libc_usleep usleep "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_mach_timebase_info mach_timebase_info "/usr/lib/libSystem.B.dylib"
|
//go:cgo_import_dynamic libc_mach_timebase_info mach_timebase_info "/usr/lib/libSystem.B.dylib"
|
||||||
@@ -31,10 +31,10 @@ index f34ac88352..416fcb673f 100644
|
|||||||
//go:cgo_import_dynamic libc_sigaction sigaction "/usr/lib/libSystem.B.dylib"
|
//go:cgo_import_dynamic libc_sigaction sigaction "/usr/lib/libSystem.B.dylib"
|
||||||
//go:cgo_import_dynamic libc_pthread_sigmask pthread_sigmask "/usr/lib/libSystem.B.dylib"
|
//go:cgo_import_dynamic libc_pthread_sigmask pthread_sigmask "/usr/lib/libSystem.B.dylib"
|
||||||
diff --git a/src/runtime/sys_darwin_386.s b/src/runtime/sys_darwin_386.s
|
diff --git a/src/runtime/sys_darwin_386.s b/src/runtime/sys_darwin_386.s
|
||||||
index 1bc1a63c28..34a3561350 100644
|
index e653c54f61..5a43fcbdc1 100644
|
||||||
--- a/src/runtime/sys_darwin_386.s
|
--- a/src/runtime/sys_darwin_386.s
|
||||||
+++ b/src/runtime/sys_darwin_386.s
|
+++ b/src/runtime/sys_darwin_386.s
|
||||||
@@ -184,7 +184,7 @@ TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0
|
@@ -199,7 +199,7 @@ TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0
|
||||||
PUSHL BP
|
PUSHL BP
|
||||||
MOVL SP, BP
|
MOVL SP, BP
|
||||||
SUBL $8+(machTimebaseInfo__size+15)/16*16, SP
|
SUBL $8+(machTimebaseInfo__size+15)/16*16, SP
|
||||||
@@ -44,10 +44,10 @@ index 1bc1a63c28..34a3561350 100644
|
|||||||
MOVL AX, 0(CX)
|
MOVL AX, 0(CX)
|
||||||
MOVL DX, 4(CX)
|
MOVL DX, 4(CX)
|
||||||
diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s
|
diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s
|
||||||
index f99cb00ab8..8b99316983 100644
|
index 87c8db8c82..f962f24339 100644
|
||||||
--- a/src/runtime/sys_darwin_amd64.s
|
--- a/src/runtime/sys_darwin_amd64.s
|
||||||
+++ b/src/runtime/sys_darwin_amd64.s
|
+++ b/src/runtime/sys_darwin_amd64.s
|
||||||
@@ -86,7 +86,7 @@ TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0
|
@@ -97,7 +97,7 @@ TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0
|
||||||
PUSHQ BP
|
PUSHQ BP
|
||||||
MOVQ SP, BP
|
MOVQ SP, BP
|
||||||
MOVQ DI, BX
|
MOVQ DI, BX
|
||||||
@@ -57,10 +57,10 @@ index f99cb00ab8..8b99316983 100644
|
|||||||
MOVL timebase<>+machTimebaseInfo_numer(SB), SI
|
MOVL timebase<>+machTimebaseInfo_numer(SB), SI
|
||||||
MOVL timebase<>+machTimebaseInfo_denom(SB), DI // atomic read
|
MOVL timebase<>+machTimebaseInfo_denom(SB), DI // atomic read
|
||||||
diff --git a/src/runtime/sys_darwin_arm.s b/src/runtime/sys_darwin_arm.s
|
diff --git a/src/runtime/sys_darwin_arm.s b/src/runtime/sys_darwin_arm.s
|
||||||
index 54c7afbf34..a4f06fdb85 100644
|
index 996f8028a3..5bd34b51be 100644
|
||||||
--- a/src/runtime/sys_darwin_arm.s
|
--- a/src/runtime/sys_darwin_arm.s
|
||||||
+++ b/src/runtime/sys_darwin_arm.s
|
+++ b/src/runtime/sys_darwin_arm.s
|
||||||
@@ -118,7 +118,7 @@ GLOBL timebase<>(SB),NOPTR,$(machTimebaseInfo__size)
|
@@ -126,7 +126,7 @@ GLOBL timebase<>(SB),NOPTR,$(machTimebaseInfo__size)
|
||||||
|
|
||||||
TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0
|
TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0
|
||||||
MOVW R0, R8
|
MOVW R0, R8
|
||||||
@@ -70,10 +70,10 @@ index 54c7afbf34..a4f06fdb85 100644
|
|||||||
MOVW R1, 4(R8)
|
MOVW R1, 4(R8)
|
||||||
MOVW timebase<>+machTimebaseInfo_numer(SB), R6
|
MOVW timebase<>+machTimebaseInfo_numer(SB), R6
|
||||||
diff --git a/src/runtime/sys_darwin_arm64.s b/src/runtime/sys_darwin_arm64.s
|
diff --git a/src/runtime/sys_darwin_arm64.s b/src/runtime/sys_darwin_arm64.s
|
||||||
index 29951d8ad7..cdaf0a630e 100644
|
index ac3ca74f63..5e91540f94 100644
|
||||||
--- a/src/runtime/sys_darwin_arm64.s
|
--- a/src/runtime/sys_darwin_arm64.s
|
||||||
+++ b/src/runtime/sys_darwin_arm64.s
|
+++ b/src/runtime/sys_darwin_arm64.s
|
||||||
@@ -113,7 +113,7 @@ GLOBL timebase<>(SB),NOPTR,$(machTimebaseInfo__size)
|
@@ -121,7 +121,7 @@ GLOBL timebase<>(SB),NOPTR,$(machTimebaseInfo__size)
|
||||||
|
|
||||||
TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$40
|
TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$40
|
||||||
MOVD R0, R19
|
MOVD R0, R19
|
||||||
@@ -83,5 +83,5 @@ index 29951d8ad7..cdaf0a630e 100644
|
|||||||
MOVW timebase<>+machTimebaseInfo_numer(SB), R20
|
MOVW timebase<>+machTimebaseInfo_numer(SB), R20
|
||||||
MOVD $timebase<>+machTimebaseInfo_denom(SB), R21
|
MOVD $timebase<>+machTimebaseInfo_denom(SB), R21
|
||||||
--
|
--
|
||||||
2.20.1
|
2.23.0
|
||||||
|
|
||||||
|
|||||||
@@ -1,279 +0,0 @@
|
|||||||
From bc77ad792117829909eeeca3aa492d6f292d004d Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
|
|
||||||
Date: Tue, 19 Mar 2019 13:55:44 -0600
|
|
||||||
Subject: [PATCH] syscall: do not link against ___getdirentries64
|
|
||||||
|
|
||||||
---
|
|
||||||
.../x/sys/unix/syscall_darwin_386.go | 5 ++++-
|
|
||||||
.../x/sys/unix/syscall_darwin_amd64.go | 5 ++++-
|
|
||||||
.../x/sys/unix/zsyscall_darwin_386.go | 22 -------------------
|
|
||||||
.../x/sys/unix/zsyscall_darwin_386.s | 2 --
|
|
||||||
.../x/sys/unix/zsyscall_darwin_amd64.go | 22 -------------------
|
|
||||||
.../x/sys/unix/zsyscall_darwin_amd64.s | 2 --
|
|
||||||
src/syscall/syscall_darwin_386.go | 5 ++++-
|
|
||||||
src/syscall/syscall_darwin_amd64.go | 5 ++++-
|
|
||||||
src/syscall/zsyscall_darwin_386.go | 20 -----------------
|
|
||||||
src/syscall/zsyscall_darwin_386.s | 2 --
|
|
||||||
src/syscall/zsyscall_darwin_amd64.go | 20 -----------------
|
|
||||||
src/syscall/zsyscall_darwin_amd64.s | 2 --
|
|
||||||
12 files changed, 16 insertions(+), 96 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
|
|
||||||
index 489726fa9b..900dd7c91f 100644
|
|
||||||
--- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
|
|
||||||
+++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
|
|
||||||
@@ -56,8 +56,11 @@ const SYS___SYSCTL = SYS_SYSCTL
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
|
||||||
//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
|
|
||||||
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
|
|
||||||
//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
|
||||||
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
|
|
||||||
+
|
|
||||||
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
+ return 0, ENOSYS
|
|
||||||
+}
|
|
||||||
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
|
|
||||||
index 914b89bde5..95e245fff7 100644
|
|
||||||
--- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
|
|
||||||
+++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
|
|
||||||
@@ -56,8 +56,11 @@ const SYS___SYSCTL = SYS_SYSCTL
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
|
||||||
//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
|
|
||||||
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
|
|
||||||
//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
|
||||||
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
|
|
||||||
+
|
|
||||||
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
+ return 0, ENOSYS
|
|
||||||
+}
|
|
||||||
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
|
|
||||||
index 23346dc68f..db4f1eaf1c 100644
|
|
||||||
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
|
|
||||||
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
|
|
||||||
@@ -2408,28 +2408,6 @@ func libc_fstatfs64_trampoline()
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
- var _p0 unsafe.Pointer
|
|
||||||
- if len(buf) > 0 {
|
|
||||||
- _p0 = unsafe.Pointer(&buf[0])
|
|
||||||
- } else {
|
|
||||||
- _p0 = unsafe.Pointer(&_zero)
|
|
||||||
- }
|
|
||||||
- r0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
|
|
||||||
- n = int(r0)
|
|
||||||
- if e1 != 0 {
|
|
||||||
- err = errnoErr(e1)
|
|
||||||
- }
|
|
||||||
- return
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func libc___getdirentries64_trampoline()
|
|
||||||
-
|
|
||||||
-//go:linkname libc___getdirentries64 libc___getdirentries64
|
|
||||||
-//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
-
|
|
||||||
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
-
|
|
||||||
func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
|
|
||||||
r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
|
|
||||||
n = int(r0)
|
|
||||||
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
|
|
||||||
index 37b85b4f61..6165f70e33 100644
|
|
||||||
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
|
|
||||||
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
|
|
||||||
@@ -272,8 +272,6 @@ TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatat64(SB)
|
|
||||||
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatfs64(SB)
|
|
||||||
-TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
- JMP libc___getdirentries64(SB)
|
|
||||||
TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_getfsstat64(SB)
|
|
||||||
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
|
|
||||||
index b50178d679..dea5dee75e 100644
|
|
||||||
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
|
|
||||||
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
|
|
||||||
@@ -2408,28 +2408,6 @@ func libc_fstatfs64_trampoline()
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
- var _p0 unsafe.Pointer
|
|
||||||
- if len(buf) > 0 {
|
|
||||||
- _p0 = unsafe.Pointer(&buf[0])
|
|
||||||
- } else {
|
|
||||||
- _p0 = unsafe.Pointer(&_zero)
|
|
||||||
- }
|
|
||||||
- r0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
|
|
||||||
- n = int(r0)
|
|
||||||
- if e1 != 0 {
|
|
||||||
- err = errnoErr(e1)
|
|
||||||
- }
|
|
||||||
- return
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func libc___getdirentries64_trampoline()
|
|
||||||
-
|
|
||||||
-//go:linkname libc___getdirentries64 libc___getdirentries64
|
|
||||||
-//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
-
|
|
||||||
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
-
|
|
||||||
func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
|
|
||||||
r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
|
|
||||||
n = int(r0)
|
|
||||||
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
|
|
||||||
index da9b900a8c..f1e2d7e9a4 100644
|
|
||||||
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
|
|
||||||
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
|
|
||||||
@@ -272,8 +272,6 @@ TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatat64(SB)
|
|
||||||
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatfs64(SB)
|
|
||||||
-TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
- JMP libc___getdirentries64(SB)
|
|
||||||
TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_getfsstat64(SB)
|
|
||||||
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
diff --git a/src/syscall/syscall_darwin_386.go b/src/syscall/syscall_darwin_386.go
|
|
||||||
index 045ebc726b..826d76f569 100644
|
|
||||||
--- a/src/syscall/syscall_darwin_386.go
|
|
||||||
+++ b/src/syscall/syscall_darwin_386.go
|
|
||||||
@@ -16,7 +16,6 @@ func setTimeval(sec, usec int64) Timeval {
|
|
||||||
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_fstat64
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_fstatfs64
|
|
||||||
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS___getdirentries64
|
|
||||||
//sysnb Gettimeofday(tp *Timeval) (err error)
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_lstat64
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_stat64
|
|
||||||
@@ -63,3 +62,7 @@ func libc_sendfile_trampoline()
|
|
||||||
func syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
|
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // sic
|
|
||||||
+
|
|
||||||
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
+ return 0, ENOSYS
|
|
||||||
+}
|
|
||||||
diff --git a/src/syscall/syscall_darwin_amd64.go b/src/syscall/syscall_darwin_amd64.go
|
|
||||||
index 7b6493bf9f..3868790049 100644
|
|
||||||
--- a/src/syscall/syscall_darwin_amd64.go
|
|
||||||
+++ b/src/syscall/syscall_darwin_amd64.go
|
|
||||||
@@ -16,7 +16,6 @@ func setTimeval(sec, usec int64) Timeval {
|
|
||||||
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_fstat64
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_fstatfs64
|
|
||||||
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS___getdirentries64
|
|
||||||
//sysnb Gettimeofday(tp *Timeval) (err error)
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_lstat64
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_stat64
|
|
||||||
@@ -63,3 +62,7 @@ func libc_sendfile_trampoline()
|
|
||||||
func syscallX(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
|
||||||
|
|
||||||
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
|
|
||||||
+
|
|
||||||
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
+ return 0, ENOSYS
|
|
||||||
+}
|
|
||||||
diff --git a/src/syscall/zsyscall_darwin_386.go b/src/syscall/zsyscall_darwin_386.go
|
|
||||||
index 758ff7b129..a666a1f65e 100644
|
|
||||||
--- a/src/syscall/zsyscall_darwin_386.go
|
|
||||||
+++ b/src/syscall/zsyscall_darwin_386.go
|
|
||||||
@@ -1845,27 +1845,7 @@ func libc_fstatfs64_trampoline()
|
|
||||||
|
|
||||||
//go:linkname libc_fstatfs64 libc_fstatfs64
|
|
||||||
//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
-
|
|
||||||
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
- var _p0 unsafe.Pointer
|
|
||||||
- if len(buf) > 0 {
|
|
||||||
- _p0 = unsafe.Pointer(&buf[0])
|
|
||||||
- } else {
|
|
||||||
- _p0 = unsafe.Pointer(&_zero)
|
|
||||||
- }
|
|
||||||
- r0, _, e1 := syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
|
|
||||||
- n = int(r0)
|
|
||||||
- if e1 != 0 {
|
|
||||||
- err = errnoErr(e1)
|
|
||||||
- }
|
|
||||||
- return
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func libc___getdirentries64_trampoline()
|
|
||||||
|
|
||||||
-//go:linkname libc___getdirentries64 libc___getdirentries64
|
|
||||||
-//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func Gettimeofday(tp *Timeval) (err error) {
|
|
||||||
diff --git a/src/syscall/zsyscall_darwin_386.s b/src/syscall/zsyscall_darwin_386.s
|
|
||||||
index a688192501..a5af9b64b9 100644
|
|
||||||
--- a/src/syscall/zsyscall_darwin_386.s
|
|
||||||
+++ b/src/syscall/zsyscall_darwin_386.s
|
|
||||||
@@ -235,8 +235,6 @@ TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstat64(SB)
|
|
||||||
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatfs64(SB)
|
|
||||||
-TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
- JMP libc___getdirentries64(SB)
|
|
||||||
TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_gettimeofday(SB)
|
|
||||||
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
diff --git a/src/syscall/zsyscall_darwin_amd64.go b/src/syscall/zsyscall_darwin_amd64.go
|
|
||||||
index afc3d72d8d..bb87aef1f9 100644
|
|
||||||
--- a/src/syscall/zsyscall_darwin_amd64.go
|
|
||||||
+++ b/src/syscall/zsyscall_darwin_amd64.go
|
|
||||||
@@ -1845,27 +1845,7 @@ func libc_fstatfs64_trampoline()
|
|
||||||
|
|
||||||
//go:linkname libc_fstatfs64 libc_fstatfs64
|
|
||||||
//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
-
|
|
||||||
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
- var _p0 unsafe.Pointer
|
|
||||||
- if len(buf) > 0 {
|
|
||||||
- _p0 = unsafe.Pointer(&buf[0])
|
|
||||||
- } else {
|
|
||||||
- _p0 = unsafe.Pointer(&_zero)
|
|
||||||
- }
|
|
||||||
- r0, _, e1 := syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
|
|
||||||
- n = int(r0)
|
|
||||||
- if e1 != 0 {
|
|
||||||
- err = errnoErr(e1)
|
|
||||||
- }
|
|
||||||
- return
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func libc___getdirentries64_trampoline()
|
|
||||||
|
|
||||||
-//go:linkname libc___getdirentries64 libc___getdirentries64
|
|
||||||
-//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func Gettimeofday(tp *Timeval) (err error) {
|
|
||||||
diff --git a/src/syscall/zsyscall_darwin_amd64.s b/src/syscall/zsyscall_darwin_amd64.s
|
|
||||||
index 21ab38e3ee..409320dea5 100644
|
|
||||||
--- a/src/syscall/zsyscall_darwin_amd64.s
|
|
||||||
+++ b/src/syscall/zsyscall_darwin_amd64.s
|
|
||||||
@@ -235,8 +235,6 @@ TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstat64(SB)
|
|
||||||
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatfs64(SB)
|
|
||||||
-TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
- JMP libc___getdirentries64(SB)
|
|
||||||
TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_gettimeofday(SB)
|
|
||||||
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
--
|
|
||||||
2.21.0
|
|
||||||
|
|
||||||
@@ -1,143 +0,0 @@
|
|||||||
From 3efe4df9b66d4af86363e37768ea469abb8f7bdc Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
|
|
||||||
Date: Tue, 19 Mar 2019 14:01:21 -0600
|
|
||||||
Subject: [PATCH] unix: do not link against ___getdirentries64
|
|
||||||
|
|
||||||
---
|
|
||||||
unix/syscall_darwin_386.go | 5 ++++-
|
|
||||||
unix/syscall_darwin_amd64.go | 5 ++++-
|
|
||||||
unix/zsyscall_darwin_386.go | 22 ----------------------
|
|
||||||
unix/zsyscall_darwin_386.s | 2 --
|
|
||||||
unix/zsyscall_darwin_amd64.go | 22 ----------------------
|
|
||||||
unix/zsyscall_darwin_amd64.s | 2 --
|
|
||||||
6 files changed, 8 insertions(+), 50 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/unix/syscall_darwin_386.go b/unix/syscall_darwin_386.go
|
|
||||||
index 489726f..900dd7c 100644
|
|
||||||
--- a/unix/syscall_darwin_386.go
|
|
||||||
+++ b/unix/syscall_darwin_386.go
|
|
||||||
@@ -56,8 +56,11 @@ const SYS___SYSCTL = SYS_SYSCTL
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
|
||||||
//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
|
|
||||||
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
|
|
||||||
//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
|
||||||
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
|
|
||||||
+
|
|
||||||
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
+ return 0, ENOSYS
|
|
||||||
+}
|
|
||||||
diff --git a/unix/syscall_darwin_amd64.go b/unix/syscall_darwin_amd64.go
|
|
||||||
index 914b89b..95e245f 100644
|
|
||||||
--- a/unix/syscall_darwin_amd64.go
|
|
||||||
+++ b/unix/syscall_darwin_amd64.go
|
|
||||||
@@ -56,8 +56,11 @@ const SYS___SYSCTL = SYS_SYSCTL
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
|
||||||
//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
|
|
||||||
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
|
|
||||||
//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
|
||||||
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
|
|
||||||
+
|
|
||||||
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
+ return 0, ENOSYS
|
|
||||||
+}
|
|
||||||
diff --git a/unix/zsyscall_darwin_386.go b/unix/zsyscall_darwin_386.go
|
|
||||||
index 23346dc..db4f1ea 100644
|
|
||||||
--- a/unix/zsyscall_darwin_386.go
|
|
||||||
+++ b/unix/zsyscall_darwin_386.go
|
|
||||||
@@ -2408,28 +2408,6 @@ func libc_fstatfs64_trampoline()
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
- var _p0 unsafe.Pointer
|
|
||||||
- if len(buf) > 0 {
|
|
||||||
- _p0 = unsafe.Pointer(&buf[0])
|
|
||||||
- } else {
|
|
||||||
- _p0 = unsafe.Pointer(&_zero)
|
|
||||||
- }
|
|
||||||
- r0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
|
|
||||||
- n = int(r0)
|
|
||||||
- if e1 != 0 {
|
|
||||||
- err = errnoErr(e1)
|
|
||||||
- }
|
|
||||||
- return
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func libc___getdirentries64_trampoline()
|
|
||||||
-
|
|
||||||
-//go:linkname libc___getdirentries64 libc___getdirentries64
|
|
||||||
-//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
-
|
|
||||||
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
-
|
|
||||||
func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
|
|
||||||
r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
|
|
||||||
n = int(r0)
|
|
||||||
diff --git a/unix/zsyscall_darwin_386.s b/unix/zsyscall_darwin_386.s
|
|
||||||
index 37b85b4..6165f70 100644
|
|
||||||
--- a/unix/zsyscall_darwin_386.s
|
|
||||||
+++ b/unix/zsyscall_darwin_386.s
|
|
||||||
@@ -272,8 +272,6 @@ TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatat64(SB)
|
|
||||||
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatfs64(SB)
|
|
||||||
-TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
- JMP libc___getdirentries64(SB)
|
|
||||||
TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_getfsstat64(SB)
|
|
||||||
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
diff --git a/unix/zsyscall_darwin_amd64.go b/unix/zsyscall_darwin_amd64.go
|
|
||||||
index c142e33..126f993 100644
|
|
||||||
--- a/unix/zsyscall_darwin_amd64.go
|
|
||||||
+++ b/unix/zsyscall_darwin_amd64.go
|
|
||||||
@@ -2423,28 +2423,6 @@ func libc_fstatfs64_trampoline()
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
- var _p0 unsafe.Pointer
|
|
||||||
- if len(buf) > 0 {
|
|
||||||
- _p0 = unsafe.Pointer(&buf[0])
|
|
||||||
- } else {
|
|
||||||
- _p0 = unsafe.Pointer(&_zero)
|
|
||||||
- }
|
|
||||||
- r0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
|
|
||||||
- n = int(r0)
|
|
||||||
- if e1 != 0 {
|
|
||||||
- err = errnoErr(e1)
|
|
||||||
- }
|
|
||||||
- return
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func libc___getdirentries64_trampoline()
|
|
||||||
-
|
|
||||||
-//go:linkname libc___getdirentries64 libc___getdirentries64
|
|
||||||
-//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
|
|
||||||
-
|
|
||||||
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
-
|
|
||||||
func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
|
|
||||||
r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
|
|
||||||
n = int(r0)
|
|
||||||
diff --git a/unix/zsyscall_darwin_amd64.s b/unix/zsyscall_darwin_amd64.s
|
|
||||||
index 1a39151..a19c4f5 100644
|
|
||||||
--- a/unix/zsyscall_darwin_amd64.s
|
|
||||||
+++ b/unix/zsyscall_darwin_amd64.s
|
|
||||||
@@ -274,8 +274,6 @@ TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatat64(SB)
|
|
||||||
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fstatfs64(SB)
|
|
||||||
-TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
- JMP libc___getdirentries64(SB)
|
|
||||||
TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_getfsstat64(SB)
|
|
||||||
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
|
|
||||||
--
|
|
||||||
2.21.0
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user