From dd52cbd7e66743663b07c386add4a1c93e83aff2 Mon Sep 17 00:00:00 2001 From: Sean McBride Date: Mon, 27 Sep 2021 18:36:08 -0400 Subject: [PATCH] refactor: sandbox stderr goes to host --- runtime/src/libc/syscall.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/runtime/src/libc/syscall.c b/runtime/src/libc/syscall.c index 4a6d7d5..9c97399 100644 --- a/runtime/src/libc/syscall.c +++ b/runtime/src/libc/syscall.c @@ -131,12 +131,14 @@ err: int32_t wasm_write(int32_t fd, int32_t buf_offset, int32_t buf_size) { - struct sandbox *s = current_sandbox_get(); + struct sandbox *s = current_sandbox_get(); + char * buffer = worker_thread_get_memory_ptr_void(buf_offset, buf_size); - if (fd == STDOUT_FILENO || fd == STDERR_FILENO) { - char *buffer = worker_thread_get_memory_ptr_void(buf_offset, buf_size); - int buffer_remaining = s->module->max_response_size - s->response.length; - int to_write = buffer_remaining > buf_size ? buf_size : buffer_remaining; + if (fd == STDERR_FILENO) { write(STDERR_FILENO, buffer, buf_size); } + + if (fd == STDOUT_FILENO) { + int buffer_remaining = s->module->max_response_size - s->response.length; + int to_write = buffer_remaining > buf_size ? buf_size : buffer_remaining; if (to_write == 0) return 0; memcpy(&s->response.base[s->response.length], buffer, to_write); @@ -265,12 +267,7 @@ wasm_writev(int32_t fd, int32_t iov_offset, int32_t iovcnt) int len = 0; struct wasm_iovec *iov = worker_thread_get_memory_ptr_void(iov_offset, iovcnt * sizeof(struct wasm_iovec)); - for (int i = 0; i < iovcnt; i++) { - char *b = worker_thread_get_memory_ptr_void(iov[i].base_offset, iov[i].len); - memcpy(&s->response.base[s->response.length], b, iov[i].len); - s->response.length += iov[i].len; - len += iov[i].len; - } + for (int i = 0; i < iovcnt; i++) { len += wasm_write(fd, iov[i].base_offset, iov[i].len); } return len; }