Skip to content

Commit ac84026

Browse files
[wasm] Gate atomic write option usages behind platform check
`Data.WritingOptions.atomic` is now unavailable on WASI: swiftlang/swift-foundation#992
1 parent 15022ff commit ac84026

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

Sources/Foundation/NSData.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,10 +433,12 @@ open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding {
433433
#if os(WASI)
434434
// WASI does not have permission concept
435435
let permissions: Int? = nil
436+
var atomicWrite: Bool { false }
436437
#else
437438
let permissions = try? fm.attributesOfItem(atPath: path)[.posixPermissions] as? Int
439+
let atomicWrite = writeOptionsMask.contains(.atomic)
438440
#endif
439-
if writeOptionsMask.contains(.atomic) {
441+
if atomicWrite {
440442
let (newFD, auxFilePath) = try _NSCreateTemporaryFile(path)
441443
let fh = FileHandle(fileDescriptor: newFD, closeOnDealloc: true)
442444
do {
@@ -489,7 +491,12 @@ open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding {
489491
/// NOTE: the 'atomically' flag is ignored if the url is not of a type the supports atomic writes
490492
open func write(toFile path: String, atomically useAuxiliaryFile: Bool) -> Bool {
491493
do {
492-
try write(toFile: path, options: useAuxiliaryFile ? .atomic : [])
494+
#if os(WASI)
495+
let options: WritingOptions = []
496+
#else
497+
let options: WritingOptions = useAuxiliaryFile ? .atomic : []
498+
#endif
499+
try write(toFile: path, options: options)
493500
} catch {
494501
return false
495502
}

Sources/Foundation/NSString.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1261,7 +1261,12 @@ extension NSString {
12611261
internal func _writeTo(_ url: URL, _ useAuxiliaryFile: Bool, _ enc: UInt) throws {
12621262
var data = Data()
12631263
try _getExternalRepresentation(&data, url, enc)
1264-
try data.write(to: url, options: useAuxiliaryFile ? .atomic : [])
1264+
#if os(WASI)
1265+
let options: Data.WritingOptions = []
1266+
#else
1267+
let options: Data.WritingOptions = useAuxiliaryFile ? .atomic : []
1268+
#endif
1269+
try data.write(to: url, options: options)
12651270
}
12661271

12671272
public func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws {

0 commit comments

Comments
 (0)