56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package uname
|
|
|
|
import "syscall"
|
|
|
|
type Uname struct {
|
|
Sysname string
|
|
Nodename string
|
|
Hostname string
|
|
Release string
|
|
Kernel string
|
|
Version string
|
|
Machine string
|
|
Arch string
|
|
Domainname string
|
|
}
|
|
|
|
// A utility to convert int8 values to proper strings.
|
|
func int8ToStr(arr []int8) string {
|
|
b := make([]byte, 0, len(arr))
|
|
for _, v := range arr {
|
|
if v == 0x00 {
|
|
break
|
|
}
|
|
b = append(b, byte(v))
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func New() *Uname {
|
|
var system syscall.Utsname
|
|
uname := &Uname{}
|
|
if err := syscall.Uname(&system); err == nil {
|
|
// extract members:
|
|
// type Utsname struct {
|
|
// Sysname [65]int8
|
|
// Nodename [65]int8
|
|
// Release [65]int8
|
|
// Version [65]int8
|
|
// Machine [65]int8
|
|
// Domainname [65]int8
|
|
// }
|
|
|
|
// Add to the uname struct for humans
|
|
uname.Sysname = int8ToStr(system.Sysname[:])
|
|
uname.Nodename = int8ToStr(system.Nodename[:])
|
|
uname.Hostname = uname.Nodename
|
|
uname.Release = int8ToStr(system.Release[:])
|
|
uname.Kernel = uname.Release
|
|
uname.Version = int8ToStr(system.Version[:])
|
|
uname.Machine = int8ToStr(system.Machine[:])
|
|
uname.Arch = uname.Machine
|
|
uname.Domainname = int8ToStr(system.Domainname[:])
|
|
}
|
|
|
|
return uname
|
|
}
|