diff --git a/Sources/TSCBasic/Path.swift b/Sources/TSCBasic/Path.swift index a7f8a7dc..ed2716cf 100644 --- a/Sources/TSCBasic/Path.swift +++ b/Sources/TSCBasic/Path.swift @@ -431,7 +431,11 @@ extension Path { private struct UNIXPath: Path { let string: String +#if os(Windows) + static let root = UNIXPath(string: "\\") +#else static let root = UNIXPath(string: "/") +#endif static func isValidComponent(_ name: String) -> Bool { #if os(Windows) @@ -550,7 +554,7 @@ private struct UNIXPath: Path { var result: [WCHAR] = Array(repeating: 0, count: Int(MAX_PATH + 1)) _ = path.standardizingPathSeparator().withCString(encodedAs: UTF16.self) { - PathCchCanonicalize($0, result.length, $0) + PathCchCanonicalize(&result, result.count, $0) } self.init(string: String(decodingCString: result, as: UTF16.self)) #else diff --git a/Sources/TSCBasic/PathShims.swift b/Sources/TSCBasic/PathShims.swift index bae0210d..982abd7a 100644 --- a/Sources/TSCBasic/PathShims.swift +++ b/Sources/TSCBasic/PathShims.swift @@ -26,6 +26,8 @@ public func resolveSymlinks(_ path: AbsolutePath) -> AbsolutePath { var resolved: URL = URL(fileURLWithPath: path.pathString) if let destination = try? FileManager.default.destinationOfSymbolicLink(atPath: path.pathString) { resolved = URL(fileURLWithPath: destination, relativeTo: URL(fileURLWithPath: path.pathString)) + } else { + return try! AbsolutePath(validating: path.pathString) } return resolved.standardized.withUnsafeFileSystemRepresentation {