add uname functionality, kinda
This commit is contained in:
parent
ef3760879b
commit
b8c590218b
1 changed files with 56 additions and 0 deletions
56
pkg/uname/uname.go
Normal file
56
pkg/uname/uname.go
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
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
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue