]> Cypherpunks repositories - gostls13.git/commitdiff
os/exec: cleanup and remove duplicated code
authorHiroshi Ioka <hirochachacha@gmail.com>
Sat, 26 Dec 2015 07:50:01 +0000 (16:50 +0900)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 11 May 2016 16:48:46 +0000 (16:48 +0000)
Change-Id: Ia2f61427b1cc09064ac4c0563bccbd9b98767a0e
Reviewed-on: https://go-review.googlesource.com/18118
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/os/exec/lp_plan9.go
src/os/exec/lp_unix.go
src/os/exec/lp_windows.go
src/os/exec/lp_windows_test.go

index 82678802a96483d62e65d1ee7ce192ae5de2341d..142f87ed32b3b52e26e518ca8645494304fd5d15 100644 (file)
@@ -7,6 +7,7 @@ package exec
 import (
        "errors"
        "os"
+       "path/filepath"
        "strings"
 )
 
@@ -44,9 +45,10 @@ func LookPath(file string) (string, error) {
        }
 
        path := os.Getenv("path")
-       for _, dir := range strings.Split(path, "\000") {
-               if err := findExecutable(dir + "/" + file); err == nil {
-                       return dir + "/" + file, nil
+       for _, dir := range filepath.SplitList(path) {
+               path := filepath.Join(dir, file)
+               if err := findExecutable(path); err == nil {
+                       return path, nil
                }
        }
        return "", &Error{file, ErrNotFound}
index 32e3046cb8740108c88cfea65427748b5c5c57c6..7a302752a8974dc04e16d937d96b65e6b8c02575 100644 (file)
@@ -9,6 +9,7 @@ package exec
 import (
        "errors"
        "os"
+       "path/filepath"
        "strings"
 )
 
@@ -42,16 +43,13 @@ func LookPath(file string) (string, error) {
                }
                return "", &Error{file, err}
        }
-       pathenv := os.Getenv("PATH")
-       if pathenv == "" {
-               return "", &Error{file, ErrNotFound}
-       }
-       for _, dir := range strings.Split(pathenv, ":") {
+       path := os.Getenv("PATH")
+       for _, dir := range filepath.SplitList(path) {
                if dir == "" {
                        // Unix shell semantics: path element "" means "."
                        dir = "."
                }
-               path := dir + "/" + file
+               path := filepath.Join(dir, file)
                if err := findExecutable(path); err == nil {
                        return path, nil
                }
index 1c005220d01bc3439b282d0d81c16df1e2a67852..793d4d98b3a6aef429196c9f4a5186af131944ae 100644 (file)
@@ -7,6 +7,7 @@ package exec
 import (
        "errors"
        "os"
+       "path/filepath"
        "strings"
 )
 
@@ -56,20 +57,22 @@ func findExecutable(file string, exts []string) (string, error) {
 // a suitable candidate.
 // The result may be an absolute path or a path relative to the current directory.
 func LookPath(file string) (string, error) {
+       var exts []string
        x := os.Getenv(`PATHEXT`)
-       if x == "" {
-               x = `.COM;.EXE;.BAT;.CMD`
-       }
-       exts := []string{}
-       for _, e := range strings.Split(strings.ToLower(x), `;`) {
-               if e == "" {
-                       continue
-               }
-               if e[0] != '.' {
-                       e = "." + e
+       if x != "" {
+               for _, e := range strings.Split(strings.ToLower(x), `;`) {
+                       if e == "" {
+                               continue
+                       }
+                       if e[0] != '.' {
+                               e = "." + e
+                       }
+                       exts = append(exts, e)
                }
-               exts = append(exts, e)
+       } else {
+               exts = []string{".com", ".exe", ".bat", ".cmd"}
        }
+
        if strings.ContainsAny(file, `:\/`) {
                if f, err := findExecutable(file, exts); err == nil {
                        return f, nil
@@ -77,48 +80,14 @@ func LookPath(file string) (string, error) {
                        return "", &Error{file, err}
                }
        }
-       if f, err := findExecutable(`.\`+file, exts); err == nil {
+       if f, err := findExecutable(filepath.Join(".", file), exts); err == nil {
                return f, nil
        }
-       if pathenv := os.Getenv(`PATH`); pathenv != "" {
-               for _, dir := range splitList(pathenv) {
-                       if f, err := findExecutable(dir+`\`+file, exts); err == nil {
-                               return f, nil
-                       }
+       path := os.Getenv("path")
+       for _, dir := range filepath.SplitList(path) {
+               if f, err := findExecutable(filepath.Join(dir, file), exts); err == nil {
+                       return f, nil
                }
        }
        return "", &Error{file, ErrNotFound}
 }
-
-func splitList(path string) []string {
-       // The same implementation is used in SplitList in path/filepath;
-       // consider changing path/filepath when changing this.
-
-       if path == "" {
-               return []string{}
-       }
-
-       // Split path, respecting but preserving quotes.
-       list := []string{}
-       start := 0
-       quo := false
-       for i := 0; i < len(path); i++ {
-               switch c := path[i]; {
-               case c == '"':
-                       quo = !quo
-               case c == os.PathListSeparator && !quo:
-                       list = append(list, path[start:i])
-                       start = i + 1
-               }
-       }
-       list = append(list, path[start:])
-
-       // Remove quotes.
-       for i, s := range list {
-               if strings.Contains(s, `"`) {
-                       list[i] = strings.Replace(s, `"`, "", -1)
-               }
-       }
-
-       return list
-}
index 042e5a1389eb7db019d24441b3fef7cef40bed56..96a22d843f8544775555584895848f5f11f7596f 100644 (file)
@@ -107,7 +107,7 @@ func createEnv(dir, PATH, PATHEXT string) []string {
        env := os.Environ()
        env = updateEnv(env, "PATHEXT", PATHEXT)
        // Add dir in front of every directory in the PATH.
-       dirs := splitList(PATH)
+       dirs := filepath.SplitList(PATH)
        for i := range dirs {
                dirs[i] = filepath.Join(dir, dirs[i])
        }