Skip to content

Commit ac7d39b

Browse files
committed
Remove SYS_dup2 syscall. NFC
The musl implemenation of dup2 works fine without this syscall as it can be implemented in terms of dup3. As part of this change I was forced to implement __wasi_fd_fdstat_get for wasmfs since dup2 not depends on this wasi syscall. Split out from #15411
1 parent 95d5695 commit ac7d39b

File tree

5 files changed

+18
-13
lines changed

5 files changed

+18
-13
lines changed

src/library_syscall.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -418,11 +418,6 @@ var SyscallsLibrary = {
418418
}
419419
#endif // SYSCALLS_REQUIRE_FILESYSTEM
420420
},
421-
__syscall_dup2: function(oldfd, suggestFD) {
422-
var old = SYSCALLS.getStreamFromFD(oldfd);
423-
if (old.fd === suggestFD) return suggestFD;
424-
return SYSCALLS.doDup(old.path, old.flags, suggestFD);
425-
},
426421
__syscall_symlink: function(target, linkpath) {
427422
target = SYSCALLS.getStr(target);
428423
linkpath = SYSCALLS.getStr(linkpath);
@@ -1120,9 +1115,6 @@ var SyscallsLibrary = {
11201115
return 0;
11211116
},
11221117
__syscall_dup3: function(fd, suggestFD, flags) {
1123-
#if SYSCALL_DEBUG
1124-
err('warning: untested syscall: dup3');
1125-
#endif
11261118
var old = SYSCALLS.getStreamFromFD(fd);
11271119
#if ASSERTIONS
11281120
assert(!flags);

system/lib/libc/musl/arch/emscripten/bits/syscall.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#define SYS_ioctl __syscall_ioctl
1919
#define SYS_setpgid __syscall_setpgid
2020
#define SYS_umask __syscall_umask
21-
#define SYS_dup2 __syscall_dup2
2221
#define SYS_getppid __syscall_getppid
2322
#define SYS_setsid __syscall_setsid
2423
#define SYS_setrlimit __syscall_setrlimit

system/lib/libc/musl/arch/emscripten/syscall_arch.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ long __syscall_acct(long filename);
3131
long __syscall_ioctl(long fd, long request, ...);
3232
long __syscall_setpgid(long pid, long gpid);
3333
long __syscall_umask(long mask);
34-
long __syscall_dup2(long oldfd, long newfd);
3534
long __syscall_getppid(void);
3635
long __syscall_getpgrp(void);
3736
long __syscall_setsid(void);

system/lib/libc/musl/src/unistd/dup2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ int dup2(int old, int new)
1414
#else
1515
if (old==new) {
1616
#ifdef __EMSCRIPTEN__
17-
r = __wasi_fd_is_valid(old) ? 0 : -1;
17+
r = __wasi_fd_is_valid(old) ? 0 : -EBADF;
1818
#else
1919
r = __syscall(SYS_fcntl, old, F_GETFD);
2020
#endif

system/lib/wasmfs/syscalls.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ extern "C" {
2323

2424
using namespace wasmfs;
2525

26-
long __syscall_dup2(long oldfd, long newfd) {
26+
long __syscall_dup3(long oldfd, long newfd, long flags) {
2727
auto fileTable = wasmFS.getLockedFileTable();
2828

2929
auto oldOpenFile = fileTable[oldfd];
@@ -38,7 +38,7 @@ long __syscall_dup2(long oldfd, long newfd) {
3838
}
3939

4040
if (oldfd == newfd) {
41-
return oldfd;
41+
return -EINVAL;
4242
}
4343

4444
// If the file descriptor newfd was previously open, it will just be
@@ -426,4 +426,19 @@ __wasi_errno_t __wasi_fd_seek(__wasi_fd_t fd,
426426

427427
return __WASI_ERRNO_SUCCESS;
428428
}
429+
430+
__wasi_errno_t __wasi_fd_fdstat_get(__wasi_fd_t fd, __wasi_fdstat_t *stat) {
431+
auto openFile = wasmFS.getLockedFileTable()[fd];
432+
if (!openFile) {
433+
return __WASI_ERRNO_BADF;
434+
}
435+
436+
if (openFile.locked().getFile()->is<Directory>()) {
437+
stat->fs_filetype = __WASI_FILETYPE_DIRECTORY;
438+
} else {
439+
stat->fs_filetype = __WASI_FILETYPE_REGULAR_FILE;
440+
}
441+
return __WASI_ERRNO_SUCCESS;
442+
}
443+
429444
}

0 commit comments

Comments
 (0)