Replace UInt16 with Int16 in FilePermissions

This commit is contained in:
1024jp 2024-02-03 10:01:38 +09:00
parent fbe0466d8a
commit fa7f6b4fc2
5 changed files with 21 additions and 9 deletions

View File

@ -478,8 +478,9 @@ final class Document: NSDocument, AdditionalDocumentPreparing, EncodingChanging
// give the execute permission if user requested
if self.saveOptions.isExecutable, !saveOperation.isAutosave {
let permissions = self.fileAttributes?.permissions.mask ?? 0o644 // ???: Is the default permission really always 644?
attributes[FileAttributeKey.posixPermissions] = permissions | S_IXUSR
var permissions = self.fileAttributes?.permissions ?? FilePermissions(mask: 0o644) // ???: Is the default permission really always 644?
permissions.user.insert(.execute)
attributes[FileAttributeKey.posixPermissions] = permissions.mask
}
// save document state to the extended file attributes

View File

@ -171,7 +171,7 @@ extension DocumentFile.Attributes {
self.creationDate = dictionary[.creationDate] as? Date
self.modificationDate = dictionary[.modificationDate] as? Date
self.size = dictionary[.size] as? Int64 ?? 0
self.permissions = FilePermissions(mask: dictionary[.posixPermissions] as? UInt16 ?? 0)
self.permissions = FilePermissions(mask: dictionary[.posixPermissions] as? Int16 ?? 0)
self.owner = dictionary[.ownerAccountName] as? String
}
}

View File

@ -1767,7 +1767,7 @@ extension EditorTextView {
}
if movement == NSIllegalTextMovement,
let character = event.characters?.utf16.first,
character < 0xF700, character != UInt16(NSDeleteCharacter)
character < 0xF700, character != Int16(NSDeleteCharacter)
{ // standard key-input
self.needsRecompletion = true
}

View File

@ -32,7 +32,7 @@ struct FilePermissions: Equatable {
struct Permission: OptionSet {
let rawValue: UInt16
let rawValue: Int16
static let read = Self(rawValue: 0b100)
static let write = Self(rawValue: 0b010)
@ -48,7 +48,7 @@ struct FilePermissions: Equatable {
}
init(mask: UInt16) {
init(mask: Int16) {
self.user = Permission(rawValue: (mask & 0b111 << 6) >> 6)
self.group = Permission(rawValue: (mask & 0b111 << 3) >> 3)
@ -56,7 +56,8 @@ struct FilePermissions: Equatable {
}
var mask: UInt16 {
/// The `Int16` value.
var mask: Int16 {
let userMask = self.user.rawValue << 6
let groupMask = self.group.rawValue << 3
@ -66,14 +67,14 @@ struct FilePermissions: Equatable {
}
/// The human-readable permission expression like "rwxr--r--"
/// The human-readable permission expression like rwxr--r--.
var symbolic: String {
self.user.symbolic + self.group.symbolic + self.others.symbolic
}
/// The octal value expression like "644"
/// The octal value expression like 644.
var octal: String {
String(self.mask, radix: 8)

View File

@ -44,4 +44,14 @@ final class FilePermissionTests: XCTestCase {
XCTAssertEqual(FilePermissions(mask: 0o777).formatted(.filePermissions(.full)), "777 (-rwxrwxrwx)")
XCTAssertEqual(FilePermissions(mask: 0o643).formatted(.filePermissions(.full)), "643 (-rw-r---wx)")
}
func testCalculation() {
var permissions = FilePermissions(mask: 0o644)
permissions.user.insert(.execute)
XCTAssertTrue(permissions.user.contains(.execute))
XCTAssertEqual(permissions.mask, 0o744)
}
}