From 18215381dd1013e281206d5c80af3f691ef441aa Mon Sep 17 00:00:00 2001 From: qiu-x Date: Sat, 6 Nov 2021 10:03:51 +0100 Subject: [PATCH] Make getting the up-time more portable across unix-like systems --- .../darktile/hinters/hint_dmesg_timestamp.go | 5 +---- internal/app/darktile/hinters/uptime.go | 22 +++++++++++++++++++ internal/app/darktile/hinters/uptime_linux.go | 11 ++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 internal/app/darktile/hinters/uptime.go create mode 100644 internal/app/darktile/hinters/uptime_linux.go diff --git a/internal/app/darktile/hinters/hint_dmesg_timestamp.go b/internal/app/darktile/hinters/hint_dmesg_timestamp.go index 7c48103..cb6aced 100644 --- a/internal/app/darktile/hinters/hint_dmesg_timestamp.go +++ b/internal/app/darktile/hinters/hint_dmesg_timestamp.go @@ -4,7 +4,6 @@ import ( "regexp" "strconv" "strings" - "syscall" "time" "github.com/liamg/darktile/internal/app/darktile/termutil" @@ -52,7 +51,5 @@ func (h *DmesgTimestampHinter) Click(api HintAPI) error { } func setSysStartTime() { - sysInfo := &syscall.Sysinfo_t{} - _ = syscall.Sysinfo(sysInfo) - sysStart = time.Now().Local().Add(time.Duration(int(sysInfo.Uptime*-1)) * time.Second) + sysStart = time.Now().Local().Add(time.Duration(int(getUptime()*-1)) * time.Second) } diff --git a/internal/app/darktile/hinters/uptime.go b/internal/app/darktile/hinters/uptime.go new file mode 100644 index 0000000..e04e452 --- /dev/null +++ b/internal/app/darktile/hinters/uptime.go @@ -0,0 +1,22 @@ +//go:build cgo && (!linux || unix) +package hinters + +/* +#include +#include +#include +#include + + +time_t getuptime() { + struct timespec tp; + clock_gettime(CLOCK_UPTIME, &tp); + return tp.tv_sec; +} +*/ +import "C" + +func getUptime() int64 { + time := C.getuptime() + return int64(time) +} diff --git a/internal/app/darktile/hinters/uptime_linux.go b/internal/app/darktile/hinters/uptime_linux.go new file mode 100644 index 0000000..5b806f0 --- /dev/null +++ b/internal/app/darktile/hinters/uptime_linux.go @@ -0,0 +1,11 @@ +package hinters + +import ( + "syscall" +) + +func getUptime() int64 { + sysInfo := &syscall.Sysinfo_t{} + _ = syscall.Sysinfo(sysInfo) + return sysInfo.Uptime +}