Files
Sylve/pkg/utils/sysctl/sysctl.go
T
2025-05-01 01:36:10 +04:00

55 lines
1.2 KiB
Go

// SPDX-License-Identifier: BSD-2-Clause
//
// Copyright (c) 2025 The FreeBSD Foundation.
//
// This software was developed by Hayzam Sherif <hayzam@alchemilla.io>
// of Alchemilla Ventures Pvt. Ltd. <hello@alchemilla.io>,
// under sponsorship from the FreeBSD Foundation.
//go:build freebsd
package sysctl
// #include <sys/types.h>
// #include <sys/sysctl.h>
import "C"
import "unsafe"
func GetInt64(name string) (value int64, err error) {
oldlen := C.size_t(8)
_, err = C.sysctlbyname(C.CString(name), unsafe.Pointer(&value), &oldlen, nil, 0)
if err != nil {
return 0, err
}
return value, nil
}
func GetString(name string) (string, error) {
bytes, err := GetBytes(name)
if err != nil {
return "", err
}
if len(bytes) > 0 && bytes[len(bytes)-1] == 0 {
bytes = bytes[:len(bytes)-1]
}
return string(bytes), nil
}
func GetBytes(name string) (value []byte, err error) {
oldlen := C.size_t(0)
_, err = C.sysctlbyname(C.CString(name), nil, &oldlen, nil, 0)
if err != nil {
return nil, err
}
buf := make([]byte, oldlen)
_, err = C.sysctlbyname(C.CString(name), unsafe.Pointer(&buf[0]), &oldlen, nil, 0)
if err != nil {
return nil, err
}
return buf[:oldlen], nil
}