Skip to content

Commit 3d8a3b8

Browse files
authored
Merge pull request #1 from l4go/support_windows_2407
Release support_windows_2407
2 parents 674bd43 + 0330583 commit 3d8a3b8

File tree

5 files changed

+65
-3
lines changed

5 files changed

+65
-3
lines changed

cmdio.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,11 @@ type StdPipe struct {
106106
}
107107

108108
func StdDup() (*StdPipe, error) {
109-
in, err := syscall.Dup(syscall.Stdin)
109+
in, err := sys_dup(syscall.Stdin)
110110
if err != nil {
111111
return nil, err
112112
}
113-
out, err := syscall.Dup(syscall.Stdout)
113+
out, err := sys_dup(syscall.Stdout)
114114
if err != nil {
115115
return nil, err
116116
}

dup_unix.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//go:build !windows
2+
3+
package cmdio
4+
5+
import (
6+
"syscall"
7+
)
8+
9+
type Handle = int
10+
11+
func sys_dup(oldfd Handle) (Handle, error) {
12+
return syscall.Dup(oldfd)
13+
}

dup_windows.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//go:build windows
2+
3+
package cmdio
4+
5+
import (
6+
"syscall"
7+
8+
"golang.org/x/sys/windows"
9+
)
10+
11+
type Handle = syscall.Handle
12+
13+
func sys_dup(oldfd Handle) (Handle, error) {
14+
currentProcess := windows.CurrentProcess()
15+
var newFdHandle windows.Handle
16+
17+
var hSourceProcessHandle = currentProcess
18+
var hSourceHandle = windows.Handle(oldfd)
19+
var hTargetProcessHandle = currentProcess
20+
var lpTargetHandle = &newFdHandle
21+
var dwDesiredAccess uint32 = 0
22+
var bInheritHandle = false
23+
var dwOptions uint32 = windows.DUPLICATE_SAME_ACCESS
24+
25+
err := windows.DuplicateHandle(
26+
hSourceProcessHandle,
27+
hSourceHandle,
28+
hTargetProcessHandle,
29+
lpTargetHandle,
30+
dwDesiredAccess,
31+
bInheritHandle,
32+
dwOptions,
33+
)
34+
if err != nil {
35+
return 0, err
36+
}
37+
38+
return Handle(newFdHandle), nil
39+
}

go.mod

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
module github.com/l4go/cmdio
22

3-
go 1.15
3+
go 1.19
4+
5+
require (
6+
github.com/l4go/task v1.20220225.0
7+
golang.org/x/sys v0.22.0
8+
)

go.sum

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
github.com/l4go/task v1.20220225.0 h1:CpAsxaMbcqtikq4qjUposmCDLBACXXLu26J6ocOKzKs=
2+
github.com/l4go/task v1.20220225.0/go.mod h1:5vuq2+n3+gYolXbT3AgPaHoCzLDnOLp4NrvWWB1uPV4=
3+
github.com/l4go/timer v1.20220131.0/go.mod h1:3WVqLwRVS1odYYP2UqSs8k8VYAbIRlNEGE02Yq1I2Pw=
4+
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
5+
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

0 commit comments

Comments
 (0)