add uname functionality, kinda

This commit is contained in:
HikariKnight 2023-04-09 03:19:12 +02:00
parent ef3760879b
commit b8c590218b

56
pkg/uname/uname.go Normal file
View 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
}