Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10433354
exec_windows.go
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
1 KB
Subscribers
None
exec_windows.go
View Options
// 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
}
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Jan 20, 3:11 AM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3137557
Attached To
rWCLI writeas-cli
Event Timeline
Log In to Comment