diff --git a/dependencies/trampoline/src b/dependencies/trampoline/src index 06e9f4d..50d94d5 160000 --- a/dependencies/trampoline/src +++ b/dependencies/trampoline/src @@ -1 +1 @@ -Subproject commit 06e9f4d7c8505a1e8c8ec4d65e21e93161eae6f7 +Subproject commit 50d94d52998ba361c5d89d1b21f7eafd972f3f4e diff --git a/media-layer/trampoline/src/guest/guest.cpp b/media-layer/trampoline/src/guest/guest.cpp index 374e941..3cfedf9 100644 --- a/media-layer/trampoline/src/guest/guest.cpp +++ b/media-layer/trampoline/src/guest/guest.cpp @@ -38,22 +38,30 @@ static uint32_t trampoline_pipe(const uint32_t id, const bool allow_early_return const trampoline_pipe_arguments cmd = { .id = id, .allow_early_return = allow_early_return, - .length = length, - .args_addr = uint32_t(args) + .length = length }; if (write(arguments_pipe, &cmd, sizeof(trampoline_pipe_arguments)) != sizeof(trampoline_pipe_arguments)) { ERR("Unable To Write Trampoline Command"); } - // Return - if (length > 0 || !allow_early_return) { - uint32_t ret; - if (read(return_value_pipe, &ret, sizeof(uint32_t)) != sizeof(uint32_t)) { - ERR("Unable To Read Trampoline Return Value"); + // Write Arguments + size_t position = 0; + while (position < length) { + const ssize_t ret = write(arguments_pipe, args + position, length - position); + if (ret == -1) { + ERR("Unable To Write Trampoline Arguments"); + } else { + position += ret; } - return ret; - } else { + } + if (allow_early_return) { return 0; } + // Return + uint32_t ret; + if (read(return_value_pipe, &ret, sizeof(uint32_t)) != sizeof(uint32_t)) { + ERR("Unable To Read Trampoline Return Value"); + } + return ret; } // Main Function