From b8c590218b6a5a4c17c00a82d921ff3926c32b78 Mon Sep 17 00:00:00 2001 From: HikariKnight <2557889+HikariKnight@users.noreply.github.com> Date: Sun, 9 Apr 2023 03:19:12 +0200 Subject: [PATCH] add uname functionality, kinda --- pkg/uname/uname.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 pkg/uname/uname.go diff --git a/pkg/uname/uname.go b/pkg/uname/uname.go new file mode 100644 index 0000000..4a87c62 --- /dev/null +++ b/pkg/uname/uname.go @@ -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 +}