diff options
Diffstat (limited to 'libgo/go/syscall/exec_windows.go')
-rw-r--r-- | libgo/go/syscall/exec_windows.go | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/libgo/go/syscall/exec_windows.go b/libgo/go/syscall/exec_windows.go index 936aeb577bc..5a01843d2be 100644 --- a/libgo/go/syscall/exec_windows.go +++ b/libgo/go/syscall/exec_windows.go @@ -135,23 +135,17 @@ func FullPath(name string) (path string, err error) { if err != nil { return "", err } - buf := make([]uint16, 100) - n, err := GetFullPathName(p, uint32(len(buf)), &buf[0], nil) - if err != nil { - return "", err - } - if n > uint32(len(buf)) { - // Windows is asking for bigger buffer. - buf = make([]uint16, n) + n := uint32(100) + for { + buf := make([]uint16, n) n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil) if err != nil { return "", err } - if n > uint32(len(buf)) { - return "", EINVAL + if n <= uint32(len(buf)) { + return UTF16ToString(buf[:n]), nil } } - return UTF16ToString(buf[:n]), nil } func isSlash(c uint8) bool { @@ -250,6 +244,9 @@ func StartProcess(argv0 string, argv []string, attr *ProcAttr) (pid int, handle if len(attr.Files) > 3 { return 0, 0, EWINDOWS } + if len(attr.Files) < 3 { + return 0, 0, EINVAL + } if len(attr.Dir) != 0 { // StartProcess assumes that argv0 is relative to attr.Dir, |