summaryrefslogtreecommitdiff
path: root/libgo/go/syscall/exec_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/syscall/exec_windows.go')
-rw-r--r--libgo/go/syscall/exec_windows.go19
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,