]> Cypherpunks repositories - gostls13.git/commitdiff
internal/syscall/windows: add GetModuleFileName
authorShenghou Ma <minux@golang.org>
Sun, 1 Nov 2015 09:17:34 +0000 (04:17 -0500)
committerMinux Ma <minux@golang.org>
Mon, 7 Nov 2016 22:18:24 +0000 (22:18 +0000)
For os.Executable. Updates #12773.

Change-Id: Iff6593514b7453b6c5e1f20079e35cb4992cc74a
Reviewed-on: https://go-review.googlesource.com/32877
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/internal/syscall/windows/syscall_windows.go
src/internal/syscall/windows/zsyscall_windows.go

index dd2df92ff6106335f43f9a3630fbbf0899f408a6..ec08a5a92c67727031c3fc0fef2acc527cb60d68 100644 (file)
@@ -110,6 +110,7 @@ const (
 //sys  GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses
 //sys  GetComputerNameEx(nameformat uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
 //sys  MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW
+//sys  GetModuleFileName(module syscall.Handle, fn *uint16, len uint32) (n uint32, err error) = kernel32.GetModuleFileNameW
 
 const (
        ComputerNameNetBIOS                   = 0
index 9ed977f2bd0e721db4ac87aaad47a3c91746664f..7a2ffeeffaf9cd42fbd21aeed92c7fc9d186a7b8 100644 (file)
@@ -44,6 +44,7 @@ var (
        procGetAdaptersAddresses  = modiphlpapi.NewProc("GetAdaptersAddresses")
        procGetComputerNameExW    = modkernel32.NewProc("GetComputerNameExW")
        procMoveFileExW           = modkernel32.NewProc("MoveFileExW")
+       procGetModuleFileNameW    = modkernel32.NewProc("GetModuleFileNameW")
        procGetACP                = modkernel32.NewProc("GetACP")
        procGetConsoleCP          = modkernel32.NewProc("GetConsoleCP")
        procMultiByteToWideChar   = modkernel32.NewProc("MultiByteToWideChar")
@@ -89,6 +90,19 @@ func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) {
        return
 }
 
+func GetModuleFileName(module syscall.Handle, fn *uint16, len uint32) (n uint32, err error) {
+       r0, _, e1 := syscall.Syscall(procGetModuleFileNameW.Addr(), 3, uintptr(module), uintptr(unsafe.Pointer(fn)), uintptr(len))
+       n = uint32(r0)
+       if n == 0 {
+               if e1 != 0 {
+                       err = errnoErr(e1)
+               } else {
+                       err = syscall.EINVAL
+               }
+       }
+       return
+}
+
 func GetACP() (acp uint32) {
        r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0)
        acp = uint32(r0)