2016-03-01 15:57:46 -07:00
|
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
2010-04-02 02:11:17 -06:00
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package os
|
|
|
|
|
2015-02-24 03:35:55 -07:00
|
|
|
import (
|
|
|
|
"internal/syscall/windows"
|
|
|
|
"syscall"
|
|
|
|
)
|
2010-04-27 00:17:14 -06:00
|
|
|
|
2012-01-16 22:51:54 -07:00
|
|
|
func hostname() (name string, err error) {
|
2015-02-24 03:35:55 -07:00
|
|
|
// Use PhysicalDnsHostname to uniquely identify host in a cluster
|
|
|
|
const format = windows.ComputerNamePhysicalDnsHostname
|
|
|
|
|
|
|
|
n := uint32(64)
|
|
|
|
for {
|
|
|
|
b := make([]uint16, n)
|
|
|
|
err := windows.GetComputerNameEx(format, &b[0], &n)
|
|
|
|
if err == nil {
|
|
|
|
return syscall.UTF16ToString(b[:n]), nil
|
|
|
|
}
|
|
|
|
if err != syscall.ERROR_MORE_DATA {
|
|
|
|
return "", NewSyscallError("ComputerNameEx", err)
|
|
|
|
}
|
|
|
|
|
2017-09-14 19:24:47 -06:00
|
|
|
// If we received an ERROR_MORE_DATA, but n doesn't get larger,
|
2015-02-24 03:35:55 -07:00
|
|
|
// something has gone wrong and we may be in an infinite loop
|
|
|
|
if n <= uint32(len(b)) {
|
|
|
|
return "", NewSyscallError("ComputerNameEx", err)
|
|
|
|
}
|
2010-04-27 00:17:14 -06:00
|
|
|
}
|
|
|
|
}
|