diff options
author | Bo <bohende@gmail.com> | 2017-11-13 04:24:42 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2017-11-13 04:24:42 +0800 |
commit | cb8bbe70819839e6399c44fff6a75ab3d16b8791 (patch) | |
tree | 1beb6efbe63416f7921f4914d228cc7d78b49c09 /vendor/golang.org/x/sys/windows/exec_windows.go | |
parent | f47adc9ea8f16544a023ea9b67d1ed320750c5e7 (diff) | |
download | go-tangerine-cb8bbe70819839e6399c44fff6a75ab3d16b8791.tar go-tangerine-cb8bbe70819839e6399c44fff6a75ab3d16b8791.tar.gz go-tangerine-cb8bbe70819839e6399c44fff6a75ab3d16b8791.tar.bz2 go-tangerine-cb8bbe70819839e6399c44fff6a75ab3d16b8791.tar.lz go-tangerine-cb8bbe70819839e6399c44fff6a75ab3d16b8791.tar.xz go-tangerine-cb8bbe70819839e6399c44fff6a75ab3d16b8791.tar.zst go-tangerine-cb8bbe70819839e6399c44fff6a75ab3d16b8791.zip |
puppeth: handle encrypted ssh keys (closes #15442) (#15443)
* cmd/puppeth: handle encrypted ssh keys
* cmd/puppeth: fix unconvert linter error
Diffstat (limited to 'vendor/golang.org/x/sys/windows/exec_windows.go')
-rw-r--r-- | vendor/golang.org/x/sys/windows/exec_windows.go | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go new file mode 100644 index 000000000..3606c3a8b --- /dev/null +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -0,0 +1,97 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Fork, exec, wait, etc. + +package windows + +// EscapeArg rewrites command line argument s as prescribed +// in http://msdn.microsoft.com/en-us/library/ms880421. +// This function returns "" (2 double quotes) if s is empty. +// Alternatively, these transformations are done: +// - every back slash (\) is doubled, but only if immediately +// followed by double quote ("); +// - every double quote (") is escaped by back slash (\); +// - finally, s is wrapped with double quotes (arg -> "arg"), +// but only if there is space or tab inside s. +func EscapeArg(s string) string { + if len(s) == 0 { + return "\"\"" + } + n := len(s) + hasSpace := false + for i := 0; i < len(s); i++ { + switch s[i] { + case '"', '\\': + n++ + case ' ', '\t': + hasSpace = true + } + } + if hasSpace { + n += 2 + } + if n == len(s) { + return s + } + + qs := make([]byte, n) + j := 0 + if hasSpace { + qs[j] = '"' + j++ + } + slashes := 0 + for i := 0; i < len(s); i++ { + switch s[i] { + default: + slashes = 0 + qs[j] = s[i] + case '\\': + slashes++ + qs[j] = s[i] + case '"': + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '\\' + j++ + qs[j] = s[i] + } + j++ + } + if hasSpace { + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '"' + j++ + } + return string(qs[:j]) +} + +func CloseOnExec(fd Handle) { + SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) +} + +// FullPath retrieves the full path of the specified file. +func FullPath(name string) (path string, err error) { + p, err := UTF16PtrFromString(name) + if err != nil { + return "", err + } + 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 UTF16ToString(buf[:n]), nil + } + } +} |