Source file
src/os/executable_windows.go
1
2
3
4
5 package os
6
7 import (
8 "internal/syscall/windows"
9 "syscall"
10 )
11
12 func getModuleFileName(handle syscall.Handle) (string, error) {
13 n := uint32(1024)
14 var buf []uint16
15 for {
16 buf = make([]uint16, n)
17 r, err := windows.GetModuleFileName(handle, &buf[0], n)
18 if err != nil {
19 return "", err
20 }
21 if r < n {
22 break
23 }
24
25 n += 1024
26 }
27 return syscall.UTF16ToString(buf), nil
28 }
29
30 func executable() (string, error) {
31 return getModuleFileName(0)
32 }
33
View as plain text