// Copyright 2016 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
package os | |
import ( | |
"internal/syscall/windows" | |
"syscall" | |
) | |
func getModuleFileName(handle syscall.Handle) (string, error) { | |
n := uint32(1024) | |
var buf []uint16 | |
for { | |
buf = make([]uint16, n) | |
r, err := windows.GetModuleFileName(handle, &buf[0], n) | |
if err != nil { | |
return "", err | |
} | |
if r < n { | |
break | |
} | |
// r == n means n not big enough | |
n += 1024 | |
} | |
return syscall.UTF16ToString(buf), nil | |
} | |
func executable() (string, error) { | |
return getModuleFileName(0) | |
} |