]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
TunnelName: sort correctly with numbers and capitals
authorJason A. Donenfeld <Jason@zx2c4.com>
Sun, 17 Mar 2019 09:28:27 +0000 (10:28 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 Mar 2019 05:46:55 +0000 (06:46 +0100)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
WireGuard/WireGuard/Tunnel/TunnelsManager.swift
WireGuard/WireGuard/ZipArchive/ZipImporter.swift

index ea5e62251815cef61007bf7d5d568c3f4244a5ab..1a467f5604f07de97285c96404f934f42e6cda37 100644 (file)
@@ -28,7 +28,7 @@ class TunnelsManager {
     private var configurationsObservationToken: AnyObject?
 
     init(tunnelProviders: [NETunnelProviderManager]) {
-        tunnels = tunnelProviders.map { TunnelContainer(tunnel: $0) }.sorted { $0.name < $1.name }
+        tunnels = tunnelProviders.map { TunnelContainer(tunnel: $0) }.sorted { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
         startObservingTunnelStatuses()
         startObservingTunnelConfigurations()
     }
@@ -90,7 +90,7 @@ class TunnelsManager {
                     }
                     let tunnel = TunnelContainer(tunnel: loadedTunnelProvider)
                     self.tunnels.append(tunnel)
-                    self.tunnels.sort { $0.name < $1.name }
+                    self.tunnels.sort { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
                     self.tunnelsListDelegate?.tunnelAdded(at: self.tunnels.firstIndex(of: tunnel)!)
                 }
             }
@@ -142,7 +142,7 @@ class TunnelsManager {
 
             let tunnel = TunnelContainer(tunnel: tunnelProviderManager)
             self.tunnels.append(tunnel)
-            self.tunnels.sort { $0.name < $1.name }
+            self.tunnels.sort { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
             self.tunnelsListDelegate?.tunnelAdded(at: self.tunnels.firstIndex(of: tunnel)!)
             completionHandler(.success(tunnel))
         }
@@ -204,7 +204,7 @@ class TunnelsManager {
             guard let self = self else { return }
             if isNameChanged {
                 let oldIndex = self.tunnels.firstIndex(of: tunnel)!
-                self.tunnels.sort { $0.name < $1.name }
+                self.tunnels.sort { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
                 let newIndex = self.tunnels.firstIndex(of: tunnel)!
                 self.tunnelsListDelegate?.tunnelMoved(from: oldIndex, to: newIndex)
             }
@@ -400,6 +400,9 @@ class TunnelsManager {
         }
     }
 
+    static func tunnelNameIsLessThan(_ a: String, _ b: String) -> Bool {
+        return a.compare(b, options: [.caseInsensitive, .diacriticInsensitive, .widthInsensitive, .numeric]) == .orderedAscending
+    }
 }
 
 private func lastErrorTextFromNetworkExtension(for tunnel: TunnelContainer) -> (title: String, message: String)? {
index b86b06ed6e8f74157773057da3afde64181f79c8..ade30a636b02896d51de6325b2175b400186e26c 100644 (file)
@@ -37,7 +37,7 @@ class ZipImporter {
                 fatalError()
             }
 
-            unarchivedFiles.sort { $0.fileBaseName < $1.fileBaseName }
+            unarchivedFiles.sort { TunnelsManager.tunnelNameIsLessThan($0.fileBaseName, $1.fileBaseName) }
             var configs: [TunnelConfiguration?] = Array(repeating: nil, count: unarchivedFiles.count)
             for (index, file) in unarchivedFiles.enumerated() {
                 if index > 0 && file == unarchivedFiles[index - 1] {