-//go:build !darwin && !openbsd
+//go:build !linux
package hostname
import (
- "fmt"
"strings"
- "sync"
- "syscall"
-)
-type i8 = interface {
- int8 | uint8
-}
+ "go.fuhry.dev/runtime/constants"
+)
-var utsname syscall.Utsname
-var utsnameOnce sync.Once
+var defaultDomainName = constants.DefaultHostDomain
func Hostname() string {
- return strings.Split(nodeName(), ".")[0]
+ fqdn := Fqdn()
+ return strings.Split(fqdn, ".")[0]
}
func DomainName() string {
- uname := uname()
-
- domainName := int8ToString(uname.Domainname)
- if domainName != "(none)" {
- return domainName
- }
-
- nodeName := int8ToString(uname.Nodename)
- for i, chr := range []byte(nodeName) {
- if chr == '.' {
- return nodeName[i+1:]
- }
+ fqdn := strings.Split(Fqdn(), ".")
+ if len(fqdn) > 1 {
+ return strings.Join(fqdn[1:], ".")
}
-
- err := fmt.Errorf("could not determine domain name from (uname.Nodename=%v) (uname.Domainname=%v)", uname.Nodename, uname.Domainname)
- panic(err)
+ return defaultDomainName
}
func RegionName() string {
- domain := DomainName()
-
- if domain == "" {
- panic("domain string is empty")
- }
-
- return strings.Split(domain, ".")[0]
-}
-
-func Fqdn() string {
- return strings.Join([]string{Hostname(), DomainName()}, ".")
-}
-
-func uname() syscall.Utsname {
- utsnameOnce.Do(func() {
- err := syscall.Uname(&utsname)
- if err != nil {
- panic(err)
- }
- })
-
- return utsname
-}
-
-func nodeName() string {
- uname := uname()
-
- return int8ToString(uname.Nodename)
-}
-
-func int8ToString[T i8](ba [65]T) string {
- bytes := make([]byte, 0)
- for _, b := range ba {
- if b == T(0) {
- break
- }
- bytes = append(bytes, byte(b))
- }
-
- return string(bytes)
+ return strings.Split(DomainName(), ".")[0]
}
--- /dev/null
+//go:build !linux && !openbsd && !darwin
+
+package hostname
+
+import "runtime"
+
+func Fqdn() string {
+ panic("fqdn is not implemented on your platform (" + runtime.GOOS + ")")
+ return ""
+}
--- /dev/null
+//go:build linux
+
+package hostname
+
+import (
+ "fmt"
+ "strings"
+ "sync"
+ "syscall"
+)
+
+type i8 = interface {
+ int8 | uint8
+}
+
+var utsname syscall.Utsname
+var utsnameOnce sync.Once
+
+func Hostname() string {
+ return strings.Split(nodeName(), ".")[0]
+}
+
+func DomainName() string {
+ uname := uname()
+
+ domainName := int8ToString(uname.Domainname)
+ if domainName != "(none)" {
+ return domainName
+ }
+
+ nodeName := int8ToString(uname.Nodename)
+ for i, chr := range []byte(nodeName) {
+ if chr == '.' {
+ return nodeName[i+1:]
+ }
+ }
+
+ err := fmt.Errorf(
+ "could not determine domain name from (uname.Nodename=%v) (uname.Domainname=%v)",
+ int8ToString(uname.Nodename),
+ int8ToString(uname.Domainname))
+ panic(err)
+}
+
+func RegionName() string {
+ domain := DomainName()
+
+ if domain == "" {
+ panic("domain string is empty")
+ }
+
+ return strings.Split(domain, ".")[0]
+}
+
+func Fqdn() string {
+ return strings.Join([]string{Hostname(), DomainName()}, ".")
+}
+
+func uname() syscall.Utsname {
+ utsnameOnce.Do(func() {
+ err := syscall.Uname(&utsname)
+ if err != nil {
+ panic(err)
+ }
+ })
+
+ return utsname
+}
+
+func nodeName() string {
+ uname := uname()
+
+ return int8ToString(uname.Nodename)
+}
+
+func int8ToString[T i8](ba [65]T) string {
+ bytes := make([]byte, 0)
+ for _, b := range ba {
+ if b == T(0) {
+ break
+ }
+ bytes = append(bytes, byte(b))
+ }
+
+ return string(bytes)
+}
"strings"
"time"
- "go.fuhry.dev/runtime/constants"
"go.fuhry.dev/runtime/utils/log"
"howett.net/plist"
)
-var defaultDomainName = constants.DefaultHostDomain
-
const (
systemPreferencesPlist = "/Library/Preferences/SystemConfiguration/preferences.plist"
)
ComputerNameEncoding int `plist:"ComputerNameEncoding"`
}
-func Hostname() string {
- fqdn := Fqdn()
- return strings.Split(fqdn, ".")[0]
-}
-
-func DomainName() string {
- fqdn := strings.Split(Fqdn(), ".")
- if len(fqdn) > 1 {
- return strings.Join(fqdn[1:], ".")
- }
- return defaultDomainName
-}
-
-func RegionName() string {
- return strings.Split(DomainName(), ".")[0]
-}
-
func Fqdn() string {
dnsFqdn, dnsErr := fqdnFromDns()
if dnsErr == nil {
"strings"
"time"
- "go.fuhry.dev/runtime/constants"
"go.fuhry.dev/runtime/utils/log"
)
-var defaultDomainName = constants.DefaultHostDomain
var cachedFqdn string
-func Hostname() string {
- fqdn := Fqdn()
- return strings.Split(fqdn, ".")[0]
-}
-
-func DomainName() string {
- fqdn := strings.Split(Fqdn(), ".")
- if len(fqdn) > 1 {
- return strings.Join(fqdn[1:], ".")
- }
- return defaultDomainName
-}
-
-func RegionName() string {
- return strings.Split(DomainName(), ".")[0]
-}
-
func Fqdn() string {
if cachedFqdn != "" {
return cachedFqdn