Files
sourcekit-lsp/Sources/SourceKitD/SKDRequestArray.swift
Max Desiatov 66f1c0dbf2 Add support for Musl libc with canImport(Musl) checks (#772)
Since Musl is sufficiently different from Glibc (see https://wiki.musl-libc.org/functional-differences-from-glibc.html), it requires a different import, which now should be applied to files that have `import Glibc` in them.

Musl is a low footprint libc that's used in Linux distributions such as Alpine Linux, which allows producing fairly small container images. Additionally, unlike Glibc, musl allows full static linking, meaning apps can be easily distributed to an arbitrary Linux distribution that may have a version of Glibc incompatible with the one that Swift is usually built with or no Glibc installed at all.
2023-07-18 22:51:26 +01:00

47 lines
1.3 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import Csourcekitd
#if canImport(Glibc)
import Glibc
#elseif canImport(Musl)
import Musl
#elseif canImport(CRT)
import CRT
#endif
public final class SKDRequestArray {
public let array: sourcekitd_object_t?
public let sourcekitd: SourceKitD
public init(_ array: sourcekitd_object_t? = nil, sourcekitd: SourceKitD) {
self.array = array ?? sourcekitd.api.request_array_create(nil, 0)
self.sourcekitd = sourcekitd
}
deinit {
sourcekitd.api.request_release(array)
}
public func append(_ value: String) {
sourcekitd.api.request_array_set_string(array, -1, value)
}
}
extension SKDRequestArray: CustomStringConvertible {
public var description: String {
let ptr = sourcekitd.api.request_description_copy(array)!
defer { free(ptr) }
return String(cString: ptr)
}
}