46 lines
1.3 KiB
Swift
46 lines
1.3 KiB
Swift
//
|
|
// URL+ExtendedAttributes.swift
|
|
// Delta
|
|
//
|
|
// Created by Riley Testut on 3/26/19.
|
|
// Copyright © 2019 Riley Testut. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
extension URL
|
|
{
|
|
func setExtendedAttribute(name: String, value: String) throws
|
|
{
|
|
try self.withUnsafeFileSystemRepresentation { (path) in
|
|
let data = value.data(using: .utf8)
|
|
let result = data?.withUnsafeBytes { (buffer) in
|
|
setxattr(path, name, buffer.baseAddress, buffer.count, 0, 0)
|
|
}
|
|
|
|
if let result = result, result < 0
|
|
{
|
|
throw POSIXError(POSIXErrorCode(rawValue: errno) ?? .ENOENT)
|
|
}
|
|
}
|
|
}
|
|
|
|
func extendedAttribute(name: String) -> String?
|
|
{
|
|
let value = self.withUnsafeFileSystemRepresentation { (path) -> String? in
|
|
let size = getxattr(path, name, nil, 0, 0, 0)
|
|
guard size >= 0 else { return nil }
|
|
|
|
var data = Data(count: size)
|
|
let result = data.withUnsafeMutableBytes { getxattr(path, name, $0.baseAddress, $0.count, 0, 0) }
|
|
|
|
guard result >= 0 else { return nil }
|
|
|
|
let value = String(data: data, encoding: .utf8)!
|
|
return value
|
|
}
|
|
|
|
return value
|
|
}
|
|
}
|