From fe54c4c2ebe8a85dd975d921d46aaaecd086dadf Mon Sep 17 00:00:00 2001 From: YR Chen Date: Mon, 21 Dec 2020 20:07:05 +0800 Subject: [PATCH] Fix problems on Windows --- Sources/TSCBasic/Process.swift | 14 +++++++------- Tests/TSCBasicTests/TemporaryFileTests.swift | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Sources/TSCBasic/Process.swift b/Sources/TSCBasic/Process.swift index 91580809..3da43aa0 100644 --- a/Sources/TSCBasic/Process.swift +++ b/Sources/TSCBasic/Process.swift @@ -326,19 +326,19 @@ public final class Process: ObjectIdentifierProtocol { currentWorkingDirectory: localFileSystem.currentWorkingDirectory ) #if os(Windows) - var searchPaths = [String]() - let buffer = UnsafeMutablePointer.allocate(capacity: 260) + var searchPaths = Array() + var buffer = Array(repeating: 0, count: Int(MAX_PATH + 1)) // The 32-bit Windows system directory - GetSystemDirectoryW(buffer, 260) - searchPaths += buffer.pointee + GetSystemDirectoryW(&buffer, .init(MAX_PATH + 1)) + searchPaths.append(AbsolutePath(String(decodingCString: buffer, as: UTF16.self))) // The 16-bit Windows system directory - searchPaths += "\(ProcessEnv.vars["systemdrive"] ?? "C:")\\System" + searchPaths.append(AbsolutePath("\(ProcessEnv.vars["systemdrive"] ?? "C:")\\System")) // The Windows directory - GetWindowsDirectoryW(buffer, 260) - searchPaths += buffer.pointee + GetWindowsDirectoryW(&buffer, .init(MAX_PATH + 1)) + searchPaths.append(AbsolutePath(String(decodingCString: buffer, as: UTF16.self))) searchPaths.append(contentsOf: envSearchPaths) #else diff --git a/Tests/TSCBasicTests/TemporaryFileTests.swift b/Tests/TSCBasicTests/TemporaryFileTests.swift index 18cbf526..ad65d2a3 100644 --- a/Tests/TSCBasicTests/TemporaryFileTests.swift +++ b/Tests/TSCBasicTests/TemporaryFileTests.swift @@ -137,6 +137,7 @@ class TemporaryFileTests: XCTestCase { XCTAssertFalse(localFileSystem.isDirectory(pathTwo)) } + #if !os(Windows) // `fileDescriptor` is currently unavailable in Windows /// Check that the temporary file doesn't leak file descriptors. func testLeaks() throws { // We check this by testing that we get back the same FD after a @@ -150,4 +151,5 @@ class TemporaryFileTests: XCTestCase { let endFD = try Int(withTemporaryFile { return $0.fileHandle.fileDescriptor }) XCTAssertEqual(initialFD, endFD) } + #endif }