Skip to content

Instantly share code, notes, and snippets.

@algal
Last active February 10, 2017 22:56
Show Gist options
  • Save algal/83fe8a6c1cc21650eb3f478bb6431a4a to your computer and use it in GitHub Desktop.
Save algal/83fe8a6c1cc21650eb3f478bb6431a4a to your computer and use it in GitHub Desktop.
import Foundation
// machine, version, release, nodename, sysname
extension utsname : CustomStringConvertible {
static var `default`:utsname {
var x = utsname()
uname(&x)
return x
}
var machineString:String { return string(fromTuple: self.machine) }
var versionString:String { return string(fromTuple: self.version) }
var releaseString:String { return string(fromTuple: self.release) }
var nodenameString:String { return string(fromTuple: self.nodename) }
var sysnameString:String { return string(fromTuple: self.sysname) }
public var description:String {
let s = [
"machine":self.machineString,
"version":self.versionString,
"release":self.releaseString,
"nodename":self.nodenameString,
"sysname":self.sysnameString
]
return "\(s)"
}
}
fileprivate typealias Int8x256 = (Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8)
fileprivate func string(fromTuple t:Int8x256) -> String
{
var a = t
let tupleElements:Int = 256
let result = withUnsafePointer(to: &a) {
(p) -> String in
p.withMemoryRebound(to: Int8.self,
capacity: tupleElements,
{
(pp:UnsafePointer<Int8>) -> String in
let bufP = UnsafeBufferPointer(start: pp, count: tupleElements)
var s = ""
for ch in bufP {
if ch == 0 {
break
}
else {
let c = UnicodeScalar(UInt8(ch))
let char = Character(c)
s.append(char)
}
}
return s
})
}
return result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment