Concessions To Reality

This commit is contained in:
TheBrokenRail 2024-06-08 04:34:46 -04:00
parent 2d9659f273
commit d52c16e722
2 changed files with 18 additions and 10 deletions

@ -1 +1 @@
Subproject commit 06e9f4d7c8505a1e8c8ec4d65e21e93161eae6f7 Subproject commit 50d94d52998ba361c5d89d1b21f7eafd972f3f4e

View File

@ -38,22 +38,30 @@ static uint32_t trampoline_pipe(const uint32_t id, const bool allow_early_return
const trampoline_pipe_arguments cmd = { const trampoline_pipe_arguments cmd = {
.id = id, .id = id,
.allow_early_return = allow_early_return, .allow_early_return = allow_early_return,
.length = length, .length = length
.args_addr = uint32_t(args)
}; };
if (write(arguments_pipe, &cmd, sizeof(trampoline_pipe_arguments)) != sizeof(trampoline_pipe_arguments)) { if (write(arguments_pipe, &cmd, sizeof(trampoline_pipe_arguments)) != sizeof(trampoline_pipe_arguments)) {
ERR("Unable To Write Trampoline Command"); ERR("Unable To Write Trampoline Command");
} }
// Return // Write Arguments
if (length > 0 || !allow_early_return) { size_t position = 0;
uint32_t ret; while (position < length) {
if (read(return_value_pipe, &ret, sizeof(uint32_t)) != sizeof(uint32_t)) { const ssize_t ret = write(arguments_pipe, args + position, length - position);
ERR("Unable To Read Trampoline Return Value"); if (ret == -1) {
ERR("Unable To Write Trampoline Arguments");
} else {
position += ret;
} }
return ret; }
} else { if (allow_early_return) {
return 0; 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 // Main Function