// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause

//go:build linux || freebsd || openbsd || darwin

package hostinfo

import (
	"runtime"

	"golang.org/x/sys/unix"
	"tailscale.com/types/ptr"
)

func init() {
	unameMachine = lazyUnameMachine.Get
}

var lazyUnameMachine = &lazyAtomicValue[string]{f: ptr.To(unameMachineUnix)}

func unameMachineUnix() string {
	switch runtime.GOOS {
	case "android":
		// Don't call on Android for now. We're late in the 1.36 release cycle
		// and don't want to test syscall filters on various Android versions to
		// see what's permitted. Notably, the hostinfo_linux.go file has build
		// tag !android, so maybe Uname is verboten.
		return ""
	case "ios":
		// For similar reasons, don't call on iOS. There aren't many iOS devices
		// and we know their CPU properties so calling this is only risk and no
		// reward.
		return ""
	}
	var un unix.Utsname
	unix.Uname(&un)
	return unix.ByteSliceToString(un.Machine[:])
}
