Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/library_wasi.js
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,31 @@ var WasiLibrary = {
#endif
},

fd_tell: function(fd, offset_addr) {
#if SYSCALLS_REQUIRE_FILESYSTEM
var stream = SYSCALLS.getStreamFromFD(fd);
var offset = FS.llseek(stream, 0, {{{ cDefs.SEEK_CUR }}});
{{{ makeSetValue('offset_addr', '0', 'offset', 'i64') }}};
return 0;
#else
return {{{ cDefs.ESPIPE }}};
#endif
},

fd_renumber: function(fd, to) {
#if SYSCALLS_REQUIRE_FILESYSTEM
var oldStream = SYSCALLS.getStreamFromFD(fd);
var newStream = SYSCALLS.getStreamFromFD(fd);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this be getStreamFromFD(to) ?

if (!oldStream || !newStream) return -{{{ cDefs.EINVAL }}};
var newfd = newStream.fd;
FS.close(newStream);
oldStream.fd = newfd;
return 0;
#else
return {{{ cDefs.ESPIPE }}};
#endif
},

$wasiRightsToMuslOFlags: function(rights) {
#if SYSCALL_DEBUG
err('wasiRightsToMuslOFlags: ' + rights);
Expand Down
2 changes: 2 additions & 0 deletions test/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -892,6 +892,7 @@ def cleanup(line):
return '\n'.join(lines)

def run_js(self, filename, engine=None, args=None,
input=None,
output_nicerizer=None,
assert_returncode=0,
interleaved_output=True):
Expand All @@ -916,6 +917,7 @@ def run_js(self, filename, engine=None, args=None,
jsrun.run_js(filename, engine, args,
stdout=stdout,
stderr=stderr,
input=input,
assert_returncode=assert_returncode)
except subprocess.TimeoutExpired as e:
timeout_error = e
Expand Down
3 changes: 2 additions & 1 deletion test/jsrun.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def require_engine(engine):
sys.exit(1)


def run_js(filename, engine, args=None,
def run_js(filename, engine, args=None, input=None,
stdin=None, stdout=PIPE, stderr=None, cwd=None,
full_output=False, assert_returncode=0, skip_check=False,
timeout=DEFAULT_TIMEOUT):
Expand All @@ -104,6 +104,7 @@ def run_js(filename, engine, args=None,
stdin=stdin,
stdout=stdout,
stderr=stderr,
input=input,
cwd=cwd,
timeout=timeout,
universal_newlines=True)
Expand Down
29 changes: 25 additions & 4 deletions test/test_other.py
Original file line number Diff line number Diff line change
Expand Up @@ -13343,7 +13343,8 @@ def run_wasi_test_suite_test(self, name):
config = json.load(f)
exit_code = config.get('exitCode', 0)
args = config.get('args', [])
env = config.get('env', [])
env = config.get('env')
stdin = config.get('stdin')
if env:
env = [f'ENV["{key}"] = "{value}";' for key, value in env.items()]
env = '\n'.join(env)
Expand All @@ -13353,7 +13354,7 @@ def run_wasi_test_suite_test(self, name):
'-sPURE_WASI', '-lnodefs.js', '-lnoderawfs.js',
wasm, '-o', name + '.js'] + self.get_emcc_args(main_file=True))

output = self.run_js(name + '.js', args=args, assert_returncode=exit_code)
output = self.run_js(name + '.js', args=args, assert_returncode=exit_code, input=stdin)
if 'stdout' in config:
self.assertContained(config['stdout'], output)

Expand All @@ -13368,13 +13369,25 @@ def test_wasi_std_env_vars(self):
self.run_wasi_test_suite_test('std_env_vars')

@requires_node
def test_wasi_std_io_stdout(self):
self.run_wasi_test_suite_test('std_io_stdout')
def test_wasi_std_fs_write(self):
self.run_wasi_test_suite_test('std_fs_write')

@requires_node
def test_wasi_std_io_stderr(self):
self.run_wasi_test_suite_test('std_io_stderr')

@requires_node
def test_wasi_std_io_stdin(self):
self.run_wasi_test_suite_test('std_io_stdin')

@requires_node
def test_wasi_std_io_stdout(self):
self.run_wasi_test_suite_test('std_io_stdout')

@requires_node
def test_wasi_std_process_exit(self):
self.run_wasi_test_suite_test('std_process_exit')

@requires_node
def test_wasi_clock_res_get(self):
self.run_wasi_test_suite_test('wasi_clock_res_get')
Expand All @@ -13387,6 +13400,14 @@ def test_wasi_clock_time_get(self):
def test_wasi_fd_fdstat_get(self):
self.run_wasi_test_suite_test('wasi_fd_fdstat_get')

@requires_node
def test_wasi_wasi_fd_renumber(self):
self.run_wasi_test_suite_test('wasi_fd_renumber')

@requires_node
def test_wasi_wasi_fd_tell_file(self):
self.run_wasi_test_suite_test('wasi_fd_tell_file')

@requires_node
def test_wasi_wasi_fd_write_file(self):
self.run_wasi_test_suite_test('wasi_fd_write_file')
Expand Down