|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|