OXIESEC PANEL
- Current Dir:
/
/
opt
/
golang
/
1.22.0
/
src
/
syscall
Server IP: 191.96.63.230
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
asan.go
410 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asan0.go
342 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm9_unix2_amd64.s
1.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_aix_ppc64.s
540 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_darwin_amd64.s
2.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_darwin_arm64.s
2.83 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_freebsd_arm.s
2.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_freebsd_arm64.s
2.79 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_freebsd_riscv64.s
2.76 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_386.s
3.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_amd64.s
1.33 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_arm.s
1.77 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_arm64.s
916 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_loong64.s
947 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_mips64x.s
985 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_mipsx.s
1.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_ppc64x.s
913 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_riscv64.s
861 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_linux_s390x.s
2.15 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_netbsd_arm.s
2.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_netbsd_arm64.s
2.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_openbsd_386.s
1.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_openbsd_amd64.s
1.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_openbsd_arm.s
1.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_openbsd_arm64.s
1.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_openbsd_mips64.s
2.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_openbsd_ppc64.s
1.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_openbsd_riscv64.s
1.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_plan9_386.s
3.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_plan9_amd64.s
3.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_plan9_arm.s
3.25 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_solaris_amd64.s
1.8 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_unix_386.s
2.74 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_unix_amd64.s
2.15 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
bpf_bsd.go
4.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
const_plan9.go
1.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
creds_test.go
3.37 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
dir_plan9.go
5.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
dirent.go
3.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
dirent_test.go
3.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
dll_windows.go
7.63 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
endian_big.go
249 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
endian_little.go
309 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
env_unix.go
2.73 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
env_windows.go
1.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
errors_plan9.go
1.61 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_aix_test.go
823 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_bsd.go
7.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_freebsd.go
8.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_freebsd_test.go
2.41 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_libc.go
8.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_libc2.go
8.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_linux.go
22.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_linux_test.go
20.37 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_pdeathsig_test.go
4.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_plan9.go
13.25 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_solaris_test.go
815 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_unix.go
8.63 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_unix_test.go
8.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_windows.go
10.3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exec_windows_test.go
3.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_darwin_test.go
348 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_linux_test.go
296 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_rlimit_test.go
262 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_unix_test.go
391 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_wasip1_test.go
267 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_windows_test.go
500 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
flock_aix.go
564 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
flock_bsd.go
469 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
flock_linux.go
641 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
flock_linux_32bit.go
511 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
forkpipe.go
604 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
forkpipe2.go
2.6 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
fs_js.go
10.84 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
fs_wasip1.go
24.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
fs_wasip1_test.go
1.98 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
getdirentries_test.go
2.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📁
js
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
lsf_linux.go
2.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mkall.sh
14.62 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mkasm.go
1.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mkerrors.sh
10.71 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mkpost.go
2.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mksyscall.pl
10.19 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksyscall_libc.pl
8.02 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksyscall_windows.go
1.99 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mksysctl_openbsd.pl
5.04 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksysnum_dragonfly.pl
866 bytes
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksysnum_freebsd.pl
1.35 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksysnum_linux.pl
1.26 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksysnum_netbsd.pl
1.01 KB
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksysnum_openbsd.pl
872 bytes
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mksysnum_plan9.sh
459 bytes
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
mmap_unix_test.go
500 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
msan.go
410 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
msan0.go
342 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
net.go
1.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
net_fake.go
883 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
net_js.go
1.38 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
net_wasip1.go
1.82 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netlink_linux.go
4.77 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_wasip1.go
252 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
pwd_plan9.go
2.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rlimit.go
1.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rlimit_darwin.go
593 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rlimit_stub.go
338 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rlimit_test.go
953 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_bsd.go
9.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_darwin.go
2.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_dragonfly.go
2.61 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_freebsd.go
2.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_freebsd_32bit.go
1.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_freebsd_64bit.go
762 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_netbsd.go
1.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
route_openbsd.go
1.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
security_windows.go
10.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
setuidgid_32_linux.go
435 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
setuidgid_linux.go
421 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sockcmsg_dragonfly.go
547 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sockcmsg_linux.go
1.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sockcmsg_unix.go
2.51 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sockcmsg_unix_other.go
1.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall.go
3.78 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_aix.go
17.9 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_aix_ppc64.go
405 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_bsd.go
13.63 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_bsd_test.go
1.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_darwin.go
10.74 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_darwin_amd64.go
1.91 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_darwin_arm64.go
1.82 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_dragonfly.go
8.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_dragonfly_amd64.go
1.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_freebsd.go
8.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_freebsd_386.go
1.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_freebsd_amd64.go
1.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_freebsd_arm.go
1.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_freebsd_arm64.go
1.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_freebsd_riscv64.go
1.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_freebsd_test.go
424 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_illumos.go
613 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_js.go
6.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux.go
35.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_386.go
10.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_accept.go
961 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_accept4.go
592 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_amd64.go
4.78 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_arm.go
7.05 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_arm64.go
6.21 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_loong64.go
7.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_mips64x.go
5.98 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_mipsx.go
6.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_ppc64x.go
4.63 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_riscv64.go
5.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_s390x.go
7.9 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_linux_test.go
21.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_netbsd.go
7.78 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_netbsd_386.go
716 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_netbsd_amd64.go
709 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_netbsd_arm.go
716 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_netbsd_arm64.go
709 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd.go
6.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd1.go
534 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_386.go
715 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_amd64.go
701 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_arm.go
715 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_arm64.go
906 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_libc.go
3.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_mips64.go
970 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_ppc64.go
906 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_openbsd_riscv64.go
906 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_plan9.go
9.37 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_plan9_test.go
1.15 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_ptrace_test.go
768 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_solaris.go
15.66 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_solaris_amd64.go
487 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_solarisonly.go
304 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_test.go
1.44 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_unix.go
12.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_unix_test.go
9.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_wasip1.go
9.37 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_windows.go
52.6 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_windows_test.go
5.73 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tables_js.go
19.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tables_wasip1.go
6.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_fake.go
677 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_nofake.go
351 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
timestruct.go
954 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_aix.go
3.35 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_darwin.go
5.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_dragonfly.go
5.05 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_freebsd.go
6.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_illumos_amd64.go
379 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_linux.go
10.9 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_netbsd.go
4.77 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_openbsd.go
5.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_solaris.go
4.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_windows.go
27.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_windows_386.go
477 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_windows_amd64.go
477 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_windows_arm.go
477 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
types_windows_arm64.go
477 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
wtf8_windows.go
2.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
wtf8_windows_test.go
4.31 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_aix_ppc64.go
47.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_darwin_amd64.go
55.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_darwin_arm64.go
55.79 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_dragonfly_amd64.go
59.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_freebsd_386.go
67.35 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_freebsd_amd64.go
67.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_freebsd_arm.go
67.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_freebsd_arm64.go
67.41 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_freebsd_riscv64.go
67.41 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_386.go
57.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_amd64.go
57.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_arm.go
57.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_arm64.go
68.57 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_loong64.go
82.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_mips.go
69.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_mips64.go
68.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_mips64le.go
68.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_mipsle.go
69.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_ppc64.go
70.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_ppc64le.go
71.84 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_riscv64.go
70.8 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_linux_s390x.go
73.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_netbsd_386.go
67.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_netbsd_amd64.go
67.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_netbsd_arm.go
66.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_netbsd_arm64.go
67.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_openbsd_386.go
62.52 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_openbsd_amd64.go
62.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_openbsd_arm.go
62.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_openbsd_arm64.go
66.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_openbsd_mips64.go
66.66 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_openbsd_ppc64.go
67.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_openbsd_riscv64.go
67.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_solaris_amd64.go
50.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zerrors_windows.go
9.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_aix_ppc64.go
41.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_darwin_amd64.go
51.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_darwin_amd64.s
8.7 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_darwin_arm64.go
51.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_darwin_arm64.s
8.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_dragonfly_amd64.go
31.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_freebsd_386.go
31.21 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_freebsd_amd64.go
31.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_freebsd_arm.go
31.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_freebsd_arm64.go
31.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_freebsd_riscv64.go
31.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_386.go
34.68 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_amd64.go
39.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_arm.go
38.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_arm64.go
37.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_loong64.go
37.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_mips.go
40.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_mips64.go
40.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_mips64le.go
40.35 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_mipsle.go
40.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_ppc64.go
40.98 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_ppc64le.go
40.99 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_riscv64.go
37.84 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_linux_s390x.go
35.3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_netbsd_386.go
30.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_netbsd_amd64.go
29.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_netbsd_arm.go
30.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_netbsd_arm64.go
29.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_386.go
48.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_386.s
8.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_amd64.go
47.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_amd64.s
8.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_arm.go
48.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_arm.s
8.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_arm64.go
47.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_arm64.s
8.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_mips64.go
30.05 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_ppc64.go
47.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_ppc64.s
8.78 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_riscv64.go
47.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_openbsd_riscv64.s
8.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_plan9_386.go
6.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_plan9_amd64.go
6.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_plan9_arm.go
6.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_solaris_amd64.go
37.56 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsyscall_windows.go
56.73 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysctl_openbsd.go
11.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_darwin_amd64.go
14.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_darwin_arm64.go
14.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_dragonfly_amd64.go
22.94 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_freebsd_386.go
25.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_freebsd_amd64.go
25.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_freebsd_arm.go
25.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_freebsd_arm64.go
35.79 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_freebsd_riscv64.go
35.79 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_386.go
11.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_amd64.go
10.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_arm.go
11.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_arm64.go
8.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_loong64.go
10.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_mips.go
12.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_mips64.go
10.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_mips64le.go
10.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_mipsle.go
12.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_ppc64.go
11.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_ppc64le.go
11.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_riscv64.go
8.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_linux_s390x.go
10.64 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_netbsd_386.go
25.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_netbsd_amd64.go
25.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_netbsd_arm.go
25.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_netbsd_arm64.go
25.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_openbsd_386.go
14.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_openbsd_amd64.go
14.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_openbsd_arm.go
14.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_openbsd_arm64.go
14.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_openbsd_mips64.go
14.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_openbsd_ppc64.go
15.83 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_openbsd_riscv64.go
15.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_plan9.go
1.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zsysnum_solaris_amd64.go
293 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_aix_ppc64.go
4.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_darwin_amd64.go
6.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_darwin_arm64.go
6.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_dragonfly_amd64.go
6.7 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_freebsd_386.go
8 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_freebsd_amd64.go
8.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_freebsd_arm.go
8.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_freebsd_arm64.go
8.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_freebsd_riscv64.go
8.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_386.go
11.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_amd64.go
11.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_arm.go
11.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_arm64.go
10.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_loong64.go
10.77 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_mips.go
9.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_mips64.go
10.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_mips64le.go
10.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_mipsle.go
9.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_ppc64.go
10.25 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_ppc64le.go
10.38 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_riscv64.go
10.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_linux_s390x.go
10.44 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_netbsd_386.go
5.99 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_netbsd_amd64.go
6.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_netbsd_arm.go
6.13 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_netbsd_arm64.go
6.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_openbsd_386.go
6.73 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_openbsd_amd64.go
6.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_openbsd_arm.go
6.84 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_openbsd_arm64.go
6.66 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_openbsd_mips64.go
6.66 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_openbsd_ppc64.go
6.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_openbsd_riscv64.go
6.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
ztypes_solaris_amd64.go
5.57 KB
02/02/2024 06:09:55 PM
rw-r--r--
Editing: exec_plan9.go
Close
// 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 syscall import ( "internal/itoa" "runtime" "sync" "unsafe" ) // ForkLock is not used on plan9. var ForkLock sync.RWMutex // gstringb reads a non-empty string from b, prefixed with a 16-bit length in little-endian order. // It returns the string as a byte slice, or nil if b is too short to contain the length or // the full string. // //go:nosplit func gstringb(b []byte) []byte { if len(b) < 2 { return nil } n, b := gbit16(b) if int(n) > len(b) { return nil } return b[:n] } // Offset of the name field in a 9P directory entry - see UnmarshalDir() in dir_plan9.go const nameOffset = 39 // gdirname returns the first filename from a buffer of directory entries, // and a slice containing the remaining directory entries. // If the buffer doesn't start with a valid directory entry, the returned name is nil. // //go:nosplit func gdirname(buf []byte) (name []byte, rest []byte) { if len(buf) < 2 { return } size, buf := gbit16(buf) if size < STATFIXLEN || int(size) > len(buf) { return } name = gstringb(buf[nameOffset:size]) rest = buf[size:] return } // StringSlicePtr converts a slice of strings to a slice of pointers // to NUL-terminated byte arrays. If any string contains a NUL byte // this function panics instead of returning an error. // // Deprecated: Use SlicePtrFromStrings instead. func StringSlicePtr(ss []string) []*byte { bb := make([]*byte, len(ss)+1) for i := 0; i < len(ss); i++ { bb[i] = StringBytePtr(ss[i]) } bb[len(ss)] = nil return bb } // SlicePtrFromStrings converts a slice of strings to a slice of // pointers to NUL-terminated byte arrays. If any string contains // a NUL byte, it returns (nil, EINVAL). func SlicePtrFromStrings(ss []string) ([]*byte, error) { var err error bb := make([]*byte, len(ss)+1) for i := 0; i < len(ss); i++ { bb[i], err = BytePtrFromString(ss[i]) if err != nil { return nil, err } } bb[len(ss)] = nil return bb, nil } // readdirnames returns the names of files inside the directory represented by dirfd. func readdirnames(dirfd int) (names []string, err error) { names = make([]string, 0, 100) var buf [STATMAX]byte for { n, e := Read(dirfd, buf[:]) if e != nil { return nil, e } if n == 0 { break } for b := buf[:n]; len(b) > 0; { var s []byte s, b = gdirname(b) if s == nil { return nil, ErrBadStat } names = append(names, string(s)) } } return } // name of the directory containing names and control files for all open file descriptors var dupdev, _ = BytePtrFromString("#d") // forkAndExecInChild forks the process, calling dup onto 0..len(fd) // and finally invoking exec(argv0, argvv, envv) in the child. // If a dup or exec fails, it writes the error string to pipe. // (The pipe write end is close-on-exec so if exec succeeds, it will be closed.) // // In the child, this function must not acquire any locks, because // they might have been locked at the time of the fork. This means // no rescheduling, no malloc calls, and no new stack segments. // The calls to RawSyscall are okay because they are assembly // functions that do not grow the stack. // //go:norace func forkAndExecInChild(argv0 *byte, argv []*byte, envv []envItem, dir *byte, attr *ProcAttr, pipe int, rflag int) (pid int, err error) { // Declare all variables at top in case any // declarations require heap allocation (e.g., errbuf). var ( r1 uintptr nextfd int i int clearenv int envfd int errbuf [ERRMAX]byte statbuf [STATMAX]byte dupdevfd int n int b []byte ) // Guard against side effects of shuffling fds below. // Make sure that nextfd is beyond any currently open files so // that we can't run the risk of overwriting any of them. fd := make([]int, len(attr.Files)) nextfd = len(attr.Files) for i, ufd := range attr.Files { if nextfd < int(ufd) { nextfd = int(ufd) } fd[i] = int(ufd) } nextfd++ if envv != nil { clearenv = RFCENVG } // About to call fork. // No more allocation or calls of non-assembly functions. r1, _, _ = RawSyscall(SYS_RFORK, uintptr(RFPROC|RFFDG|RFREND|clearenv|rflag), 0, 0) if r1 != 0 { if int32(r1) == -1 { return 0, NewError(errstr()) } // parent; return PID return int(r1), nil } // Fork succeeded, now in child. // Close fds we don't need. r1, _, _ = RawSyscall(SYS_OPEN, uintptr(unsafe.Pointer(dupdev)), uintptr(O_RDONLY), 0) dupdevfd = int(r1) if dupdevfd == -1 { goto childerror } dirloop: for { r1, _, _ = RawSyscall6(SYS_PREAD, uintptr(dupdevfd), uintptr(unsafe.Pointer(&statbuf[0])), uintptr(len(statbuf)), ^uintptr(0), ^uintptr(0), 0) n = int(r1) switch n { case -1: goto childerror case 0: break dirloop } for b = statbuf[:n]; len(b) > 0; { var s []byte s, b = gdirname(b) if s == nil { copy(errbuf[:], ErrBadStat.Error()) goto childerror1 } if s[len(s)-1] == 'l' { // control file for descriptor <N> is named <N>ctl continue } closeFdExcept(int(atoi(s)), pipe, dupdevfd, fd) } } RawSyscall(SYS_CLOSE, uintptr(dupdevfd), 0, 0) // Write new environment variables. if envv != nil { for i = 0; i < len(envv); i++ { r1, _, _ = RawSyscall(SYS_CREATE, uintptr(unsafe.Pointer(envv[i].name)), uintptr(O_WRONLY), uintptr(0666)) if int32(r1) == -1 { goto childerror } envfd = int(r1) r1, _, _ = RawSyscall6(SYS_PWRITE, uintptr(envfd), uintptr(unsafe.Pointer(envv[i].value)), uintptr(envv[i].nvalue), ^uintptr(0), ^uintptr(0), 0) if int32(r1) == -1 || int(r1) != envv[i].nvalue { goto childerror } r1, _, _ = RawSyscall(SYS_CLOSE, uintptr(envfd), 0, 0) if int32(r1) == -1 { goto childerror } } } // Chdir if dir != nil { r1, _, _ = RawSyscall(SYS_CHDIR, uintptr(unsafe.Pointer(dir)), 0, 0) if int32(r1) == -1 { goto childerror } } // Pass 1: look for fd[i] < i and move those up above len(fd) // so that pass 2 won't stomp on an fd it needs later. if pipe < nextfd { r1, _, _ = RawSyscall(SYS_DUP, uintptr(pipe), uintptr(nextfd), 0) if int32(r1) == -1 { goto childerror } pipe = nextfd nextfd++ } for i = 0; i < len(fd); i++ { if fd[i] >= 0 && fd[i] < i { if nextfd == pipe { // don't stomp on pipe nextfd++ } r1, _, _ = RawSyscall(SYS_DUP, uintptr(fd[i]), uintptr(nextfd), 0) if int32(r1) == -1 { goto childerror } fd[i] = nextfd nextfd++ } } // Pass 2: dup fd[i] down onto i. for i = 0; i < len(fd); i++ { if fd[i] == -1 { RawSyscall(SYS_CLOSE, uintptr(i), 0, 0) continue } if fd[i] == i { continue } r1, _, _ = RawSyscall(SYS_DUP, uintptr(fd[i]), uintptr(i), 0) if int32(r1) == -1 { goto childerror } } // Pass 3: close fd[i] if it was moved in the previous pass. for i = 0; i < len(fd); i++ { if fd[i] >= len(fd) { RawSyscall(SYS_CLOSE, uintptr(fd[i]), 0, 0) } } // Time to exec. r1, _, _ = RawSyscall(SYS_EXEC, uintptr(unsafe.Pointer(argv0)), uintptr(unsafe.Pointer(&argv[0])), 0) childerror: // send error string on pipe RawSyscall(SYS_ERRSTR, uintptr(unsafe.Pointer(&errbuf[0])), uintptr(len(errbuf)), 0) childerror1: errbuf[len(errbuf)-1] = 0 i = 0 for i < len(errbuf) && errbuf[i] != 0 { i++ } RawSyscall6(SYS_PWRITE, uintptr(pipe), uintptr(unsafe.Pointer(&errbuf[0])), uintptr(i), ^uintptr(0), ^uintptr(0), 0) for { RawSyscall(SYS_EXITS, 0, 0, 0) } } // close the numbered file descriptor, unless it is fd1, fd2, or a member of fds. // //go:nosplit func closeFdExcept(n int, fd1 int, fd2 int, fds []int) { if n == fd1 || n == fd2 { return } for _, fd := range fds { if n == fd { return } } RawSyscall(SYS_CLOSE, uintptr(n), 0, 0) } func cexecPipe(p []int) error { e := Pipe(p) if e != nil { return e } fd, e := Open("#d/"+itoa.Itoa(p[1]), O_RDWR|O_CLOEXEC) if e != nil { Close(p[0]) Close(p[1]) return e } Close(p[1]) p[1] = fd return nil } type envItem struct { name *byte value *byte nvalue int } type ProcAttr struct { Dir string // Current working directory. Env []string // Environment. Files []uintptr // File descriptors. Sys *SysProcAttr } type SysProcAttr struct { Rfork int // additional flags to pass to rfork } var zeroProcAttr ProcAttr var zeroSysProcAttr SysProcAttr func forkExec(argv0 string, argv []string, attr *ProcAttr) (pid int, err error) { var ( p [2]int n int errbuf [ERRMAX]byte wmsg Waitmsg ) if attr == nil { attr = &zeroProcAttr } sys := attr.Sys if sys == nil { sys = &zeroSysProcAttr } p[0] = -1 p[1] = -1 // Convert args to C form. argv0p, err := BytePtrFromString(argv0) if err != nil { return 0, err } argvp, err := SlicePtrFromStrings(argv) if err != nil { return 0, err } destDir := attr.Dir if destDir == "" { wdmu.Lock() destDir = wdStr wdmu.Unlock() } var dir *byte if destDir != "" { dir, err = BytePtrFromString(destDir) if err != nil { return 0, err } } var envvParsed []envItem if attr.Env != nil { envvParsed = make([]envItem, 0, len(attr.Env)) for _, v := range attr.Env { i := 0 for i < len(v) && v[i] != '=' { i++ } envname, err := BytePtrFromString("/env/" + v[:i]) if err != nil { return 0, err } envvalue := make([]byte, len(v)-i) copy(envvalue, v[i+1:]) envvParsed = append(envvParsed, envItem{envname, &envvalue[0], len(v) - i}) } } // Allocate child status pipe close on exec. e := cexecPipe(p[:]) if e != nil { return 0, e } // Kick off child. pid, err = forkAndExecInChild(argv0p, argvp, envvParsed, dir, attr, p[1], sys.Rfork) if err != nil { if p[0] >= 0 { Close(p[0]) Close(p[1]) } return 0, err } // Read child error status from pipe. Close(p[1]) n, err = Read(p[0], errbuf[:]) Close(p[0]) if err != nil || n != 0 { if n > 0 { err = NewError(string(errbuf[:n])) } else if err == nil { err = NewError("failed to read exec status") } // Child failed; wait for it to exit, to make sure // the zombies don't accumulate. for wmsg.Pid != pid { Await(&wmsg) } return 0, err } // Read got EOF, so pipe closed on exec, so exec succeeded. return pid, nil } type waitErr struct { Waitmsg err error } var procs struct { sync.Mutex waits map[int]chan *waitErr } // startProcess starts a new goroutine, tied to the OS // thread, which runs the process and subsequently waits // for it to finish, communicating the process stats back // to any goroutines that may have been waiting on it. // // Such a dedicated goroutine is needed because on // Plan 9, only the parent thread can wait for a child, // whereas goroutines tend to jump OS threads (e.g., // between starting a process and running Wait(), the // goroutine may have been rescheduled). func startProcess(argv0 string, argv []string, attr *ProcAttr) (pid int, err error) { type forkRet struct { pid int err error } forkc := make(chan forkRet, 1) go func() { runtime.LockOSThread() var ret forkRet ret.pid, ret.err = forkExec(argv0, argv, attr) // If fork fails there is nothing to wait for. if ret.err != nil || ret.pid == 0 { forkc <- ret return } waitc := make(chan *waitErr, 1) // Mark that the process is running. procs.Lock() if procs.waits == nil { procs.waits = make(map[int]chan *waitErr) } procs.waits[ret.pid] = waitc procs.Unlock() forkc <- ret var w waitErr for w.err == nil && w.Pid != ret.pid { w.err = Await(&w.Waitmsg) } waitc <- &w close(waitc) }() ret := <-forkc return ret.pid, ret.err } // Combination of fork and exec, careful to be thread safe. func ForkExec(argv0 string, argv []string, attr *ProcAttr) (pid int, err error) { return startProcess(argv0, argv, attr) } // StartProcess wraps ForkExec for package os. func StartProcess(argv0 string, argv []string, attr *ProcAttr) (pid int, handle uintptr, err error) { pid, err = startProcess(argv0, argv, attr) return pid, 0, err } // Ordinary exec. func Exec(argv0 string, argv []string, envv []string) (err error) { if envv != nil { r1, _, _ := RawSyscall(SYS_RFORK, RFCENVG, 0, 0) if int32(r1) == -1 { return NewError(errstr()) } for _, v := range envv { i := 0 for i < len(v) && v[i] != '=' { i++ } fd, e := Create("/env/"+v[:i], O_WRONLY, 0666) if e != nil { return e } _, e = Write(fd, []byte(v[i+1:])) if e != nil { Close(fd) return e } Close(fd) } } argv0p, err := BytePtrFromString(argv0) if err != nil { return err } argvp, err := SlicePtrFromStrings(argv) if err != nil { return err } _, _, e1 := Syscall(SYS_EXEC, uintptr(unsafe.Pointer(argv0p)), uintptr(unsafe.Pointer(&argvp[0])), 0) return e1 } // WaitProcess waits until the pid of a // running process is found in the queue of // wait messages. It is used in conjunction // with ForkExec/StartProcess to wait for a // running process to exit. func WaitProcess(pid int, w *Waitmsg) (err error) { procs.Lock() ch := procs.waits[pid] procs.Unlock() var wmsg *waitErr if ch != nil { wmsg = <-ch procs.Lock() if procs.waits[pid] == ch { delete(procs.waits, pid) } procs.Unlock() } if wmsg == nil { // ch was missing or ch is closed return NewError("process not found") } if wmsg.err != nil { return wmsg.err } if w != nil { *w = wmsg.Waitmsg } return nil }