Linux vmi284606.contaboserver.net 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Apache/2.4.57 (Ubuntu)
: 167.86.127.34 | : 216.73.217.1
Cant Read [ /etc/named.conf ]
7.2.24-0ubuntu0.18.04.17
root
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
local /
go /
src /
syscall /
[ HOME SHELL ]
Name
Size
Permission
Action
js
[ DIR ]
drwxr-xr-x
asm9_unix1_amd64.s
1.02
KB
-rw-r--r--
asm9_unix2_amd64.s
1.2
KB
-rw-r--r--
asm_aix_ppc64.s
540
B
-rw-r--r--
asm_darwin_386.s
2.5
KB
-rw-r--r--
asm_darwin_amd64.s
2.82
KB
-rw-r--r--
asm_darwin_arm.s
2.81
KB
-rw-r--r--
asm_darwin_arm64.s
2.71
KB
-rw-r--r--
asm_freebsd_arm.s
2.96
KB
-rw-r--r--
asm_freebsd_arm64.s
2.68
KB
-rw-r--r--
asm_linux_386.s
4.67
KB
-rw-r--r--
asm_linux_amd64.s
3.21
KB
-rw-r--r--
asm_linux_arm.s
3.63
KB
-rw-r--r--
asm_linux_arm64.s
2.73
KB
-rw-r--r--
asm_linux_mips64x.s
2.28
KB
-rw-r--r--
asm_linux_mipsx.s
3.28
KB
-rw-r--r--
asm_linux_ppc64x.s
2.66
KB
-rw-r--r--
asm_linux_riscv64.s
2.46
KB
-rw-r--r--
asm_linux_s390x.s
4.19
KB
-rw-r--r--
asm_netbsd_arm.s
2.85
KB
-rw-r--r--
asm_netbsd_arm64.s
2.77
KB
-rw-r--r--
asm_openbsd_arm.s
3.22
KB
-rw-r--r--
asm_openbsd_arm64.s
2.49
KB
-rw-r--r--
asm_plan9_386.s
3.14
KB
-rw-r--r--
asm_plan9_amd64.s
3.06
KB
-rw-r--r--
asm_plan9_arm.s
3.25
KB
-rw-r--r--
asm_solaris_amd64.s
1.79
KB
-rw-r--r--
asm_unix_386.s
2.74
KB
-rw-r--r--
asm_unix_amd64.s
2.08
KB
-rw-r--r--
asm_windows.s
384
B
-rw-r--r--
bpf_bsd.go
4.61
KB
-rw-r--r--
bpf_darwin.go
3.97
KB
-rw-r--r--
const_plan9.go
1.2
KB
-rw-r--r--
creds_test.go
3.26
KB
-rw-r--r--
dir_plan9.go
5.62
KB
-rw-r--r--
dirent.go
3
KB
-rw-r--r--
dirent_test.go
3.28
KB
-rw-r--r--
dll_windows.go
9.72
KB
-rw-r--r--
endian_big.go
239
B
-rw-r--r--
endian_little.go
273
B
-rw-r--r--
env_plan9.go
2.15
KB
-rw-r--r--
env_unix.go
2.77
KB
-rw-r--r--
env_windows.go
1.75
KB
-rw-r--r--
errors_plan9.go
1.61
KB
-rw-r--r--
exec_aix_test.go
816
B
-rw-r--r--
exec_bsd.go
6.36
KB
-rw-r--r--
exec_darwin.go
6.76
KB
-rw-r--r--
exec_libc.go
6.96
KB
-rw-r--r--
exec_linux.go
18.34
KB
-rw-r--r--
exec_linux_test.go
18.81
KB
-rw-r--r--
exec_plan9.go
13.19
KB
-rw-r--r--
exec_solaris_test.go
808
B
-rw-r--r--
exec_unix.go
8.13
KB
-rw-r--r--
exec_unix_test.go
3.89
KB
-rw-r--r--
exec_windows.go
7.64
KB
-rw-r--r--
export_freebsd_test.go
304
B
-rw-r--r--
export_linux_test.go
252
B
-rw-r--r--
export_test.go
193
B
-rw-r--r--
export_unix_test.go
341
B
-rw-r--r--
flock.go
691
B
-rw-r--r--
flock_aix.go
564
B
-rw-r--r--
flock_darwin.go
405
B
-rw-r--r--
flock_linux_32bit.go
481
B
-rw-r--r--
forkpipe.go
501
B
-rw-r--r--
forkpipe2.go
276
B
-rw-r--r--
fs_js.go
10.46
KB
-rw-r--r--
getdirentries_test.go
2.18
KB
-rw-r--r--
lsf_linux.go
2.12
KB
-rw-r--r--
mkall.sh
12.49
KB
-rwxr-xr-x
mkasm_darwin.go
1.66
KB
-rw-r--r--
mkerrors.sh
10.65
KB
-rwxr-xr-x
mkpost.go
1.99
KB
-rw-r--r--
mksyscall.pl
9.52
KB
-rwxr-xr-x
mksyscall_libc.pl
7.8
KB
-rwxr-xr-x
mksyscall_windows.go
707
B
-rw-r--r--
mksysctl_openbsd.pl
5.04
KB
-rwxr-xr-x
mksysnum_darwin.pl
578
B
-rwxr-xr-x
mksysnum_dragonfly.pl
866
B
-rwxr-xr-x
mksysnum_freebsd.pl
1.35
KB
-rwxr-xr-x
mksysnum_linux.pl
1.26
KB
-rwxr-xr-x
mksysnum_netbsd.pl
1.01
KB
-rwxr-xr-x
mksysnum_openbsd.pl
871
B
-rwxr-xr-x
mksysnum_plan9.sh
459
B
-rwxr-xr-x
mmap_unix_test.go
544
B
-rw-r--r--
msan.go
409
B
-rw-r--r--
msan0.go
341
B
-rw-r--r--
net.go
1.19
KB
-rw-r--r--
net_js.go
2.11
KB
-rw-r--r--
netlink_linux.go
4.67
KB
-rw-r--r--
pwd_plan9.go
1.55
KB
-rw-r--r--
route_bsd.go
9.09
KB
-rw-r--r--
route_darwin.go
2.01
KB
-rw-r--r--
route_dragonfly.go
2.61
KB
-rw-r--r--
route_freebsd.go
2.67
KB
-rw-r--r--
route_freebsd_32bit.go
1.29
KB
-rw-r--r--
route_freebsd_64bit.go
724
B
-rw-r--r--
route_netbsd.go
1.43
KB
-rw-r--r--
route_openbsd.go
1.46
KB
-rw-r--r--
security_windows.go
10.12
KB
-rw-r--r--
setuidgid_32_linux.go
306
B
-rw-r--r--
setuidgid_linux.go
302
B
-rw-r--r--
sock_cloexec_linux.go
632
B
-rw-r--r--
sockcmsg_dragonfly.go
547
B
-rw-r--r--
sockcmsg_linux.go
1.12
KB
-rw-r--r--
sockcmsg_unix.go
2.56
KB
-rw-r--r--
sockcmsg_unix_other.go
957
B
-rw-r--r--
str.go
549
B
-rw-r--r--
syscall.go
3.72
KB
-rw-r--r--
syscall_aix.go
17.83
KB
-rw-r--r--
syscall_aix_ppc64.go
405
B
-rw-r--r--
syscall_bsd.go
14.07
KB
-rw-r--r--
syscall_bsd_test.go
1.16
KB
-rw-r--r--
syscall_darwin.go
14.26
KB
-rw-r--r--
syscall_darwin_386.go
2
KB
-rw-r--r--
syscall_darwin_amd64.go
1.92
KB
-rw-r--r--
syscall_darwin_arm.go
2.03
KB
-rw-r--r--
syscall_darwin_arm64.go
1.98
KB
-rw-r--r--
syscall_dragonfly.go
7.98
KB
-rw-r--r--
syscall_dragonfly_amd64.go
1.12
KB
-rw-r--r--
syscall_freebsd.go
15.82
KB
-rw-r--r--
syscall_freebsd_386.go
1.17
KB
-rw-r--r--
syscall_freebsd_amd64.go
1.12
KB
-rw-r--r--
syscall_freebsd_arm.go
1.16
KB
-rw-r--r--
syscall_freebsd_arm64.go
1.12
KB
-rw-r--r--
syscall_freebsd_test.go
1.35
KB
-rw-r--r--
syscall_getwd_bsd.go
453
B
-rw-r--r--
syscall_js.go
6.59
KB
-rw-r--r--
syscall_linux.go
26.05
KB
-rw-r--r--
syscall_linux_386.go
10.91
KB
-rw-r--r--
syscall_linux_amd64.go
5.39
KB
-rw-r--r--
syscall_linux_arm.go
7.47
KB
-rw-r--r--
syscall_linux_arm64.go
6.24
KB
-rw-r--r--
syscall_linux_mips64x.go
6.58
KB
-rw-r--r--
syscall_linux_mipsx.go
7.03
KB
-rw-r--r--
syscall_linux_ppc64x.go
5.21
KB
-rw-r--r--
syscall_linux_riscv64.go
6.4
KB
-rw-r--r--
syscall_linux_s390x.go
8.64
KB
-rw-r--r--
syscall_linux_test.go
10.61
KB
-rw-r--r--
syscall_netbsd.go
7.59
KB
-rw-r--r--
syscall_netbsd_386.go
716
B
-rw-r--r--
syscall_netbsd_amd64.go
709
B
-rw-r--r--
syscall_netbsd_arm.go
716
B
-rw-r--r--
syscall_netbsd_arm64.go
709
B
-rw-r--r--
syscall_openbsd.go
7.06
KB
-rw-r--r--
syscall_openbsd_386.go
715
B
-rw-r--r--
syscall_openbsd_amd64.go
701
B
-rw-r--r--
syscall_openbsd_arm.go
715
B
-rw-r--r--
syscall_openbsd_arm64.go
906
B
-rw-r--r--
syscall_plan9.go
8.94
KB
-rw-r--r--
syscall_plan9_test.go
1.15
KB
-rw-r--r--
syscall_ptrace_test.go
752
B
-rw-r--r--
syscall_solaris.go
15.07
KB
-rw-r--r--
syscall_solaris_amd64.go
487
B
-rw-r--r--
syscall_test.go
1.7
KB
-rw-r--r--
syscall_unix.go
8.3
KB
-rw-r--r--
syscall_unix_test.go
10.61
KB
-rw-r--r--
syscall_windows.go
42.54
KB
-rw-r--r--
syscall_windows_386.go
176
B
-rw-r--r--
syscall_windows_amd64.go
176
B
-rw-r--r--
syscall_windows_test.go
1.8
KB
-rw-r--r--
tables_js.go
19.17
KB
-rw-r--r--
time_fake.go
676
B
-rw-r--r--
time_nofake.go
350
B
-rw-r--r--
timestruct.go
1.13
KB
-rw-r--r--
types_aix.go
3.35
KB
-rw-r--r--
types_darwin.go
4.98
KB
-rw-r--r--
types_dragonfly.go
5.04
KB
-rw-r--r--
types_freebsd.go
6.96
KB
-rw-r--r--
types_linux.go
10.68
KB
-rw-r--r--
types_netbsd.go
4.77
KB
-rw-r--r--
types_openbsd.go
5.04
KB
-rw-r--r--
types_solaris.go
4.88
KB
-rw-r--r--
types_windows.go
26.96
KB
-rw-r--r--
types_windows_386.go
477
B
-rw-r--r--
types_windows_amd64.go
477
B
-rw-r--r--
types_windows_arm.go
477
B
-rw-r--r--
zerrors_aix_ppc64.go
47.16
KB
-rw-r--r--
zerrors_darwin_386.go
55.27
KB
-rw-r--r--
zerrors_darwin_amd64.go
55.27
KB
-rw-r--r--
zerrors_darwin_arm.go
46.08
KB
-rw-r--r--
zerrors_darwin_arm64.go
55.78
KB
-rw-r--r--
zerrors_dragonfly_amd64.go
59.49
KB
-rw-r--r--
zerrors_freebsd_386.go
67.35
KB
-rw-r--r--
zerrors_freebsd_amd64.go
67.4
KB
-rw-r--r--
zerrors_freebsd_arm.go
67.34
KB
-rw-r--r--
zerrors_freebsd_arm64.go
67.41
KB
-rw-r--r--
zerrors_linux_386.go
58.31
KB
-rw-r--r--
zerrors_linux_amd64.go
58.35
KB
-rw-r--r--
zerrors_linux_arm.go
58.83
KB
-rw-r--r--
zerrors_linux_arm64.go
69.52
KB
-rw-r--r--
zerrors_linux_mips.go
70.14
KB
-rw-r--r--
zerrors_linux_mips64.go
69.46
KB
-rw-r--r--
zerrors_linux_mips64le.go
69.46
KB
-rw-r--r--
zerrors_linux_mipsle.go
70.14
KB
-rw-r--r--
zerrors_linux_ppc64.go
71.84
KB
-rw-r--r--
zerrors_linux_ppc64le.go
72.8
KB
-rw-r--r--
zerrors_linux_riscv64.go
71.76
KB
-rw-r--r--
zerrors_linux_s390x.go
74.28
KB
-rw-r--r--
zerrors_netbsd_386.go
67.43
KB
-rw-r--r--
zerrors_netbsd_amd64.go
67.02
KB
-rw-r--r--
zerrors_netbsd_arm.go
66.45
KB
-rw-r--r--
zerrors_netbsd_arm64.go
67.02
KB
-rw-r--r--
zerrors_openbsd_386.go
62.47
KB
-rw-r--r--
zerrors_openbsd_amd64.go
62.43
KB
-rw-r--r--
zerrors_openbsd_arm.go
62.46
KB
-rw-r--r--
zerrors_openbsd_arm64.go
66.36
KB
-rw-r--r--
zerrors_solaris_amd64.go
50.71
KB
-rw-r--r--
zerrors_windows.go
9.97
KB
-rw-r--r--
zerrors_windows_386.go
176
B
-rw-r--r--
zerrors_windows_amd64.go
176
B
-rw-r--r--
zsyscall_aix_ppc64.go
40.02
KB
-rw-r--r--
zsyscall_darwin_386.go
53.97
KB
-rw-r--r--
zsyscall_darwin_386.s
8.65
KB
-rw-r--r--
zsyscall_darwin_amd64.go
53.83
KB
-rw-r--r--
zsyscall_darwin_amd64.s
8.65
KB
-rw-r--r--
zsyscall_darwin_arm.go
53.44
KB
-rw-r--r--
zsyscall_darwin_arm.s
8.56
KB
-rw-r--r--
zsyscall_darwin_arm64.go
53.3
KB
-rw-r--r--
zsyscall_darwin_arm64.s
8.56
KB
-rw-r--r--
zsyscall_dragonfly_amd64.go
30.9
KB
-rw-r--r--
zsyscall_freebsd_386.go
33.55
KB
-rw-r--r--
zsyscall_freebsd_amd64.go
33.41
KB
-rw-r--r--
zsyscall_freebsd_arm.go
33.58
KB
-rw-r--r--
zsyscall_freebsd_arm64.go
33.41
KB
-rw-r--r--
zsyscall_linux_386.go
35.54
KB
-rw-r--r--
zsyscall_linux_amd64.go
40.66
KB
-rw-r--r--
zsyscall_linux_arm.go
39.77
KB
-rw-r--r--
zsyscall_linux_arm64.go
38.92
KB
-rw-r--r--
zsyscall_linux_mips.go
41.52
KB
-rw-r--r--
zsyscall_linux_mips64.go
41.3
KB
-rw-r--r--
zsyscall_linux_mips64le.go
41.3
KB
-rw-r--r--
zsyscall_linux_mipsle.go
41.52
KB
-rw-r--r--
zsyscall_linux_ppc64.go
41.94
KB
-rw-r--r--
zsyscall_linux_ppc64le.go
41.94
KB
-rw-r--r--
zsyscall_linux_riscv64.go
38.95
KB
-rw-r--r--
zsyscall_linux_s390x.go
35.94
KB
-rw-r--r--
zsyscall_netbsd_386.go
29.62
KB
-rw-r--r--
zsyscall_netbsd_amd64.go
29.48
KB
-rw-r--r--
zsyscall_netbsd_arm.go
29.63
KB
-rw-r--r--
zsyscall_netbsd_arm64.go
29.48
KB
-rw-r--r--
zsyscall_openbsd_386.go
30.46
KB
-rw-r--r--
zsyscall_openbsd_amd64.go
30.32
KB
-rw-r--r--
zsyscall_openbsd_arm.go
30.47
KB
-rw-r--r--
zsyscall_openbsd_arm64.go
30.32
KB
-rw-r--r--
zsyscall_plan9_386.go
6.17
KB
-rw-r--r--
zsyscall_plan9_amd64.go
6.17
KB
-rw-r--r--
zsyscall_plan9_arm.go
6.17
KB
-rw-r--r--
zsyscall_solaris_amd64.go
35.79
KB
-rw-r--r--
zsyscall_windows.go
60.53
KB
-rw-r--r--
zsysctl_openbsd.go
11.71
KB
-rw-r--r--
zsysnum_darwin_386.go
14.55
KB
-rw-r--r--
zsysnum_darwin_amd64.go
14.55
KB
-rw-r--r--
zsysnum_darwin_arm.go
12.28
KB
-rw-r--r--
zsysnum_darwin_arm64.go
14.38
KB
-rw-r--r--
zsysnum_dragonfly_amd64.go
22.72
KB
-rw-r--r--
zsysnum_freebsd_386.go
25.65
KB
-rw-r--r--
zsysnum_freebsd_amd64.go
25.65
KB
-rw-r--r--
zsysnum_freebsd_arm.go
25.65
KB
-rw-r--r--
zsysnum_freebsd_arm64.go
36.09
KB
-rw-r--r--
zsysnum_linux_386.go
11.26
KB
-rw-r--r--
zsysnum_linux_amd64.go
10.1
KB
-rw-r--r--
zsysnum_linux_arm.go
11.55
KB
-rw-r--r--
zsysnum_linux_arm64.go
8.95
KB
-rw-r--r--
zsysnum_linux_mips.go
12.1
KB
-rw-r--r--
zsysnum_linux_mips64.go
10.93
KB
-rw-r--r--
zsysnum_linux_mips64le.go
10.93
KB
-rw-r--r--
zsysnum_linux_mipsle.go
12.1
KB
-rw-r--r--
zsysnum_linux_ppc64.go
11.46
KB
-rw-r--r--
zsysnum_linux_ppc64le.go
11.49
KB
-rw-r--r--
zsysnum_linux_riscv64.go
8.88
KB
-rw-r--r--
zsysnum_linux_s390x.go
10.64
KB
-rw-r--r--
zsysnum_netbsd_386.go
25.54
KB
-rw-r--r--
zsysnum_netbsd_amd64.go
25.55
KB
-rw-r--r--
zsysnum_netbsd_arm.go
25.54
KB
-rw-r--r--
zsysnum_netbsd_arm64.go
25.55
KB
-rw-r--r--
zsysnum_openbsd_386.go
14.15
KB
-rw-r--r--
zsysnum_openbsd_amd64.go
14.15
KB
-rw-r--r--
zsysnum_openbsd_arm.go
14.46
KB
-rw-r--r--
zsysnum_openbsd_arm64.go
14.72
KB
-rw-r--r--
zsysnum_plan9.go
1.03
KB
-rw-r--r--
zsysnum_solaris_amd64.go
289
B
-rw-r--r--
zsysnum_windows_386.go
40
B
-rw-r--r--
zsysnum_windows_amd64.go
40
B
-rw-r--r--
ztypes_aix_ppc64.go
4.17
KB
-rw-r--r--
ztypes_darwin_386.go
6.7
KB
-rw-r--r--
ztypes_darwin_amd64.go
6.92
KB
-rw-r--r--
ztypes_darwin_arm.go
6.77
KB
-rw-r--r--
ztypes_darwin_arm64.go
6.92
KB
-rw-r--r--
ztypes_dragonfly_amd64.go
6.7
KB
-rw-r--r--
ztypes_freebsd_386.go
9
KB
-rw-r--r--
ztypes_freebsd_amd64.go
9
KB
-rw-r--r--
ztypes_freebsd_arm.go
9.01
KB
-rw-r--r--
ztypes_freebsd_arm64.go
9
KB
-rw-r--r--
ztypes_linux_386.go
11.55
KB
-rw-r--r--
ztypes_linux_amd64.go
11.92
KB
-rw-r--r--
ztypes_linux_arm.go
11.44
KB
-rw-r--r--
ztypes_linux_arm64.go
10.12
KB
-rw-r--r--
ztypes_linux_mips.go
9.93
KB
-rw-r--r--
ztypes_linux_mips64.go
10.05
KB
-rw-r--r--
ztypes_linux_mips64le.go
10.05
KB
-rw-r--r--
ztypes_linux_mipsle.go
9.93
KB
-rw-r--r--
ztypes_linux_ppc64.go
10.21
KB
-rw-r--r--
ztypes_linux_ppc64le.go
10.35
KB
-rw-r--r--
ztypes_linux_riscv64.go
10.2
KB
-rw-r--r--
ztypes_linux_s390x.go
10.39
KB
-rw-r--r--
ztypes_netbsd_386.go
5.98
KB
-rw-r--r--
ztypes_netbsd_amd64.go
6.17
KB
-rw-r--r--
ztypes_netbsd_arm.go
6.13
KB
-rw-r--r--
ztypes_netbsd_arm64.go
6.17
KB
-rw-r--r--
ztypes_openbsd_386.go
6.73
KB
-rw-r--r--
ztypes_openbsd_amd64.go
6.88
KB
-rw-r--r--
ztypes_openbsd_arm.go
6.84
KB
-rw-r--r--
ztypes_openbsd_arm64.go
6.66
KB
-rw-r--r--
ztypes_solaris_amd64.go
5.56
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : fs_js.go
// Copyright 2018 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. // +build js,wasm package syscall import ( "errors" "io" "sync" "syscall/js" ) // Provided by package runtime. func now() (sec int64, nsec int32) var jsProcess = js.Global().Get("process") var jsFS = js.Global().Get("fs") var constants = jsFS.Get("constants") var uint8Array = js.Global().Get("Uint8Array") var ( nodeWRONLY = constants.Get("O_WRONLY").Int() nodeRDWR = constants.Get("O_RDWR").Int() nodeCREATE = constants.Get("O_CREAT").Int() nodeTRUNC = constants.Get("O_TRUNC").Int() nodeAPPEND = constants.Get("O_APPEND").Int() nodeEXCL = constants.Get("O_EXCL").Int() ) type jsFile struct { path string entries []string dirIdx int // entries[:dirIdx] have already been returned in ReadDirent pos int64 seeked bool } var filesMu sync.Mutex var files = map[int]*jsFile{ 0: {}, 1: {}, 2: {}, } func fdToFile(fd int) (*jsFile, error) { filesMu.Lock() f, ok := files[fd] filesMu.Unlock() if !ok { return nil, EBADF } return f, nil } func Open(path string, openmode int, perm uint32) (int, error) { if err := checkPath(path); err != nil { return 0, err } flags := 0 if openmode&O_WRONLY != 0 { flags |= nodeWRONLY } if openmode&O_RDWR != 0 { flags |= nodeRDWR } if openmode&O_CREATE != 0 { flags |= nodeCREATE } if openmode&O_TRUNC != 0 { flags |= nodeTRUNC } if openmode&O_APPEND != 0 { flags |= nodeAPPEND } if openmode&O_EXCL != 0 { flags |= nodeEXCL } if openmode&O_SYNC != 0 { return 0, errors.New("syscall.Open: O_SYNC is not supported by js/wasm") } jsFD, err := fsCall("open", path, flags, perm) if err != nil { return 0, err } fd := jsFD.Int() var entries []string if stat, err := fsCall("fstat", fd); err == nil && stat.Call("isDirectory").Bool() { dir, err := fsCall("readdir", path) if err != nil { return 0, err } entries = make([]string, dir.Length()) for i := range entries { entries[i] = dir.Index(i).String() } } f := &jsFile{ path: path, entries: entries, } filesMu.Lock() files[fd] = f filesMu.Unlock() return fd, nil } func Close(fd int) error { filesMu.Lock() delete(files, fd) filesMu.Unlock() _, err := fsCall("close", fd) return err } func CloseOnExec(fd int) { // nothing to do - no exec } func Mkdir(path string, perm uint32) error { if err := checkPath(path); err != nil { return err } _, err := fsCall("mkdir", path, perm) return err } func ReadDirent(fd int, buf []byte) (int, error) { f, err := fdToFile(fd) if err != nil { return 0, err } if f.entries == nil { return 0, EINVAL } n := 0 for f.dirIdx < len(f.entries) { entry := f.entries[f.dirIdx] l := 2 + len(entry) if l > len(buf) { break } buf[0] = byte(l) buf[1] = byte(l >> 8) copy(buf[2:], entry) buf = buf[l:] n += l f.dirIdx++ } return n, nil } func setStat(st *Stat_t, jsSt js.Value) { st.Dev = int64(jsSt.Get("dev").Int()) st.Ino = uint64(jsSt.Get("ino").Int()) st.Mode = uint32(jsSt.Get("mode").Int()) st.Nlink = uint32(jsSt.Get("nlink").Int()) st.Uid = uint32(jsSt.Get("uid").Int()) st.Gid = uint32(jsSt.Get("gid").Int()) st.Rdev = int64(jsSt.Get("rdev").Int()) st.Size = int64(jsSt.Get("size").Int()) st.Blksize = int32(jsSt.Get("blksize").Int()) st.Blocks = int32(jsSt.Get("blocks").Int()) atime := int64(jsSt.Get("atimeMs").Int()) st.Atime = atime / 1000 st.AtimeNsec = (atime % 1000) * 1000000 mtime := int64(jsSt.Get("mtimeMs").Int()) st.Mtime = mtime / 1000 st.MtimeNsec = (mtime % 1000) * 1000000 ctime := int64(jsSt.Get("ctimeMs").Int()) st.Ctime = ctime / 1000 st.CtimeNsec = (ctime % 1000) * 1000000 } func Stat(path string, st *Stat_t) error { if err := checkPath(path); err != nil { return err } jsSt, err := fsCall("stat", path) if err != nil { return err } setStat(st, jsSt) return nil } func Lstat(path string, st *Stat_t) error { if err := checkPath(path); err != nil { return err } jsSt, err := fsCall("lstat", path) if err != nil { return err } setStat(st, jsSt) return nil } func Fstat(fd int, st *Stat_t) error { jsSt, err := fsCall("fstat", fd) if err != nil { return err } setStat(st, jsSt) return nil } func Unlink(path string) error { if err := checkPath(path); err != nil { return err } _, err := fsCall("unlink", path) return err } func Rmdir(path string) error { if err := checkPath(path); err != nil { return err } _, err := fsCall("rmdir", path) return err } func Chmod(path string, mode uint32) error { if err := checkPath(path); err != nil { return err } _, err := fsCall("chmod", path, mode) return err } func Fchmod(fd int, mode uint32) error { _, err := fsCall("fchmod", fd, mode) return err } func Chown(path string, uid, gid int) error { if err := checkPath(path); err != nil { return err } _, err := fsCall("chown", path, uint32(uid), uint32(gid)) return err } func Fchown(fd int, uid, gid int) error { _, err := fsCall("fchown", fd, uint32(uid), uint32(gid)) return err } func Lchown(path string, uid, gid int) error { if err := checkPath(path); err != nil { return err } if jsFS.Get("lchown").IsUndefined() { // fs.lchown is unavailable on Linux until Node.js 10.6.0 // TODO(neelance): remove when we require at least this Node.js version return ENOSYS } _, err := fsCall("lchown", path, uint32(uid), uint32(gid)) return err } func UtimesNano(path string, ts []Timespec) error { if err := checkPath(path); err != nil { return err } if len(ts) != 2 { return EINVAL } atime := ts[0].Sec mtime := ts[1].Sec _, err := fsCall("utimes", path, atime, mtime) return err } func Rename(from, to string) error { if err := checkPath(from); err != nil { return err } if err := checkPath(to); err != nil { return err } _, err := fsCall("rename", from, to) return err } func Truncate(path string, length int64) error { if err := checkPath(path); err != nil { return err } _, err := fsCall("truncate", path, length) return err } func Ftruncate(fd int, length int64) error { _, err := fsCall("ftruncate", fd, length) return err } func Getcwd(buf []byte) (n int, err error) { defer recoverErr(&err) cwd := jsProcess.Call("cwd").String() n = copy(buf, cwd) return } func Chdir(path string) (err error) { if err := checkPath(path); err != nil { return err } defer recoverErr(&err) jsProcess.Call("chdir", path) return } func Fchdir(fd int) error { f, err := fdToFile(fd) if err != nil { return err } return Chdir(f.path) } func Readlink(path string, buf []byte) (n int, err error) { if err := checkPath(path); err != nil { return 0, err } dst, err := fsCall("readlink", path) if err != nil { return 0, err } n = copy(buf, dst.String()) return n, nil } func Link(path, link string) error { if err := checkPath(path); err != nil { return err } if err := checkPath(link); err != nil { return err } _, err := fsCall("link", path, link) return err } func Symlink(path, link string) error { if err := checkPath(path); err != nil { return err } if err := checkPath(link); err != nil { return err } _, err := fsCall("symlink", path, link) return err } func Fsync(fd int) error { _, err := fsCall("fsync", fd) return err } func Read(fd int, b []byte) (int, error) { f, err := fdToFile(fd) if err != nil { return 0, err } if f.seeked { n, err := Pread(fd, b, f.pos) f.pos += int64(n) return n, err } buf := uint8Array.New(len(b)) n, err := fsCall("read", fd, buf, 0, len(b), nil) if err != nil { return 0, err } js.CopyBytesToGo(b, buf) n2 := n.Int() f.pos += int64(n2) return n2, err } func Write(fd int, b []byte) (int, error) { f, err := fdToFile(fd) if err != nil { return 0, err } if f.seeked { n, err := Pwrite(fd, b, f.pos) f.pos += int64(n) return n, err } if faketime && (fd == 1 || fd == 2) { n := faketimeWrite(fd, b) if n < 0 { return 0, errnoErr(Errno(-n)) } return n, nil } buf := uint8Array.New(len(b)) js.CopyBytesToJS(buf, b) n, err := fsCall("write", fd, buf, 0, len(b), nil) if err != nil { return 0, err } n2 := n.Int() f.pos += int64(n2) return n2, err } func Pread(fd int, b []byte, offset int64) (int, error) { buf := uint8Array.New(len(b)) n, err := fsCall("read", fd, buf, 0, len(b), offset) if err != nil { return 0, err } js.CopyBytesToGo(b, buf) return n.Int(), nil } func Pwrite(fd int, b []byte, offset int64) (int, error) { buf := uint8Array.New(len(b)) js.CopyBytesToJS(buf, b) n, err := fsCall("write", fd, buf, 0, len(b), offset) if err != nil { return 0, err } return n.Int(), nil } func Seek(fd int, offset int64, whence int) (int64, error) { f, err := fdToFile(fd) if err != nil { return 0, err } var newPos int64 switch whence { case io.SeekStart: newPos = offset case io.SeekCurrent: newPos = f.pos + offset case io.SeekEnd: var st Stat_t if err := Fstat(fd, &st); err != nil { return 0, err } newPos = st.Size + offset default: return 0, errnoErr(EINVAL) } if newPos < 0 { return 0, errnoErr(EINVAL) } f.seeked = true f.dirIdx = 0 // Reset directory read position. See issue 35767. f.pos = newPos return newPos, nil } func Dup(fd int) (int, error) { return 0, ENOSYS } func Dup2(fd, newfd int) error { return ENOSYS } func Pipe(fd []int) error { return ENOSYS } func fsCall(name string, args ...interface{}) (js.Value, error) { type callResult struct { val js.Value err error } c := make(chan callResult, 1) jsFS.Call(name, append(args, js.FuncOf(func(this js.Value, args []js.Value) interface{} { var res callResult if len(args) >= 1 { // on Node.js 8, fs.utimes calls the callback without any arguments if jsErr := args[0]; !jsErr.IsNull() { res.err = mapJSError(jsErr) } } res.val = js.Undefined() if len(args) >= 2 { res.val = args[1] } c <- res return nil }))...) res := <-c return res.val, res.err } // checkPath checks that the path is not empty and that it contains no null characters. func checkPath(path string) error { if path == "" { return EINVAL } for i := 0; i < len(path); i++ { if path[i] == '\x00' { return EINVAL } } return nil } func recoverErr(errPtr *error) { if err := recover(); err != nil { jsErr, ok := err.(js.Error) if !ok { panic(err) } *errPtr = mapJSError(jsErr.Value) } } // mapJSError maps an error given by Node.js to the appropriate Go error func mapJSError(jsErr js.Value) error { errno, ok := errnoByCode[jsErr.Get("code").String()] if !ok { panic(jsErr) } return errnoErr(Errno(errno)) }
Close